Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:mdinica:cristian.popescu03 [2025/05/29 22:10]
cristian.popescu03 [Schemă electrică]
pm:prj2025:mdinica:cristian.popescu03 [2025/05/30 01:10] (current)
cristian.popescu03 [Jurnal]
Line 14: Line 14:
  
  
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​esphone_diagram.png?​740x475}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 19: Line 20:
 ==== Schemă electrică ==== ==== Schemă electrică ====
  
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​esphone_schematic.png?​740x510}}
  
 ==== Descriere Hardware ==== ==== Descriere Hardware ====
Line 26: Line 28:
   * Ecranul va fi folosit pentru afișarea aplicațiilor și conținutului.   * Ecranul va fi folosit pentru afișarea aplicațiilor și conținutului.
   * Funcția capacitivă a modulului permite utilizatorului sa navigheze prin aplicații și să controleze anumite funcționalități ale acestora.   * Funcția capacitivă a modulului permite utilizatorului sa navigheze prin aplicații și să controleze anumite funcționalități ale acestora.
-  * SD Card-ul va fi introdus in soclul ​de memorie de pe spatele dispozitivului. Acesta va stoca imaginile ce vor putea fi redate in galerie.+  * Ecranul dispune ​de un Touch Pen pentru a crește precizia.
  
 ^ ^ Pin ^ Pin ESP32 ^ Descriere ^ ^ ^ Pin ^ Pin ESP32 ^ Descriere ^
Line 37: Line 39:
 | | SCK | GPIO18 | SCK pentru ecran | | | SCK | GPIO18 | SCK pentru ecran |
 | | LED | GPIO25 | Controlează luminozitatea ecranului | | | LED | GPIO25 | Controlează luminozitatea ecranului |
 +| | MISO | GPIO19 | MISO pentru ecran |
 | | T_CLK | GPIO18 | SCK pentru touch | | | T_CLK | GPIO18 | SCK pentru touch |
-| | T_CS | GPIO21 ​| Slave select touch |+| | T_CS | GPIO4 | Slave select touch |
 | | T_DIN | GPIO23 | MOSI pentru touch | | | T_DIN | GPIO23 | MOSI pentru touch |
 | | T_DO | GPIO19 | MISO pentru touch  | | | T_DO | GPIO19 | MISO pentru touch  |
-| | SD_CS | GPIO26 | Slave select SD Card | 
-| | SD_MOSI | GPIO23 | MOSI pentru SD Card | 
-| | SD_MISO | GPIO19 | MISO pentru SD Card | 
-| | SD_CLK | GPIO18 | SCK pentru SD Card | 
 </​note>​ </​note>​
  
Line 55: Line 54:
 |    | VCC | 3V3 | Alimentare senzor | |    | VCC | 3V3 | Alimentare senzor |
 |    | GND | GND | GND pentru senzor | |    | GND | GND | GND pentru senzor |
-|    | SDA | GPIO32 ​| Linia de date pentru senzor |+|    | SDA | GPIO21 ​| Linia de date pentru senzor |
 |    | SCL | GPIO22 | Semnal de clock pentru senzor | |    | SCL | GPIO22 | Semnal de clock pentru senzor |
 +|    | INT | GPIO35 | Pin ce generează întreruperi |
  
  
Line 64: Line 64:
 <​note>​ <​note>​
 **Buzzer pasiv** **Buzzer pasiv**
-  * Buzzer-ul va fi legat la GPIO32 al microcontrollerului ESP32. Acesta va fi folosit ​in aplicația de redare a muzicii. De asemenea, este legat in serie cu o rezistență de 100 Ohm pentru a preveni zgomotele ascuțite.+  * Buzzer-ul va fi legat la GPIO32 al microcontrollerului ESP32. Acesta va fi folosit ​în aplicația de redare a muzicii. De asemenea, este legat in serie cu o rezistență de 100 Ohm pentru a preveni zgomotele ascuțite.
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 **Push Button** **Push Button**
-  * Acest buton va fi legat la pinul GPIO33 ​al ESP32 in configurație de INPUT_PULLUP. Acesta are mai multe funcționalități,​ in funcție de aplicația curentă:+  * Acest buton va fi legat la pinul GPIO26 ​al ESP32 in configurație de INPUT_PULLUP. Acesta are mai multe funcționalități,​ in funcție de aplicația curentă:
  
 ^ ^ Aplicația curentă ^ Funcție ^ ^ ^ Aplicația curentă ^ Funcție ^
-| | Home | Inchide ​ecranul pentru economisirea energiei |+| | Home | Închide ​ecranul pentru economisirea energiei |
 | | Paint | Resetează canvas-ul | | | Paint | Resetează canvas-ul |
-| | Music | Trece la următoarea melodie ​|+| | Music | Iese din aplicația de redare a muzicii ​|
  
 </​note>​ </​note>​
Line 82: Line 82:
 <​note>​ <​note>​
 **Green LED** **Green LED**
-  * LED-ul va fi legat la GPIO27 ​al microcontrollerului ESP32. Acesta va fi controlat cu un semnal PWM  pentru a indica starea de idle a ESP32.+  * LED-ul va fi legat la GPIO14 ​al microcontrollerului ESP32. Acesta va fi controlat cu un semnal PWM  pentru a indica starea de idle a ESP32.
   * Starea de idle se activează în momentul când utilizatorul închide ecranul.   * Starea de idle se activează în momentul când utilizatorul închide ecranul.
 </​note>​ </​note>​
Line 96: Line 96:
 | Resistor 330 Ohm | [[https://​protosupplies.com/​product/​resistor-330-5/​|Datasheet]] | [[https://​www.optimusdigital.ro/​en/​kits/​12026-plusivo-electronics-starter-kit-0721248990075.html?​search_query=X0019AJD65&​results=1|Buy]] |  | Resistor 330 Ohm | [[https://​protosupplies.com/​product/​resistor-330-5/​|Datasheet]] | [[https://​www.optimusdigital.ro/​en/​kits/​12026-plusivo-electronics-starter-kit-0721248990075.html?​search_query=X0019AJD65&​results=1|Buy]] |
 | Resistor 100 Ohm | [[https://​www.mouser.com/​datasheet/​2/​414/​GP-1671375.pdf?​srsltid=AfmBOooEAvJOJrYeo7V_zuZGEGqLsuIyJnjLsqryeTPISK3ep1z37LnL|Datasheet]] | [[https://​www.optimusdigital.ro/​en/​kits/​12026-plusivo-electronics-starter-kit-0721248990075.html?​search_query=X0019AJD65&​results=1|Buy]] |  | Resistor 100 Ohm | [[https://​www.mouser.com/​datasheet/​2/​414/​GP-1671375.pdf?​srsltid=AfmBOooEAvJOJrYeo7V_zuZGEGqLsuIyJnjLsqryeTPISK3ep1z37LnL|Datasheet]] | [[https://​www.optimusdigital.ro/​en/​kits/​12026-plusivo-electronics-starter-kit-0721248990075.html?​search_query=X0019AJD65&​results=1|Buy]] |
-| Power Supply Module | [[https://​www.handsontec.com/​dataspecs/​mb102-ps.pdf|Datasheet]] | [[https://​www.optimusdigital.ro/​en/​kits/​12026-plusivo-electronics-starter-kit-0721248990075.html?​search_query=X0019AJD65&​results=1|Buy]] |  +| Power Bank 10400mah | - | [[https://​www.emag.ro/​power-bank-de-aluminiu-10400-mah-negru-2173/pd/DNSD9QMBM/?cmpid=146866&​utm_source=google&​utm_medium=cpc&​utm_campaign=(RO:​eMAG!)_3P_NO_SALES_%3e_Telefoane_mobile_and_accesorii&​utm_content=144212673726&​gad_source=1&​gad_campaignid=2087836549&​gbraid=0AAAAACvmxQgCiHriGz53DC2mKGd2rP0Ic&​gclid=CjwKCAjwi-DBBhA5EiwAXOHsGXxQQ609BvhfPWVwNBM_i8d4rfWvsmEZHABBTvTVGSw-Sb8EC28i8BoCQkEQAvD_BwE|Buy]] |  
-| Battery 9V | [[https://​www.documents.philips.com/​assets/​20231123/​121cffa23f6a4ec08c61b0c3007432dc.pdf|Datasheet]] | [[https://​www.emag.ro/​baterie-philips-ultra-alkaline-9v-1-buc-6lr61e1b-10/pd/DVS1LKBBM/?ref=history-shopping_423745241_1_1|Buy]] |  +Rigid Wires | - | [[https://​www.optimusdigital.ro/ro/fire-fire-nemufate/​899-set-de-fire-pentru-breadboard-rigide.html?search_query=0104110000008046&​results=1|Buy]] |  
-Micro SDHC 32GB | [[https://​www.adata.com/​upload/​downloadfile/​Datasheet-microSDHC%20CL4_201502.pdf|Datasheet]] | [[https://​www.emag.ro/card-de-memorie-microsdhc-adata-32gb-adaptor-sd-class-10-ausdh32guicl10-ra1/​pd/​D6Z2S6BBM/​?ref=history-shopping_422917791_6139_1|Buy]] |  +Placă de test    | -   | [[https://​www.optimusdigital.ro/ro/prototipare-cablaje-de-test/721-placa-de-test-universala-verde-70x90-mm.html?search_query=0104210000006643&​results=1|Buy]] |
-Breadboard | [[https://​www.mouser.com/datasheet/2/58/BPS-DAT-(BB400)-Datasheet-932623.pdf?​srsltid=AfmBOoq1dNwOj6lHDuvOZFPz8-y2pVhw2VXzCtEzttwLQeGMRh0f9q1b|Datasheet]] ​  | [[https://​www.emag.ro/​breadboard-placa-test-400-puncte-oky0005/​pd/​DSBXR1MBM/​?ref=history-shopping_423745241_2895_1|Buy]] | +
  
  
Line 112: Line 111:
 <​note>​ <​note>​
 În stadiul actual, ESPhone permite următoarele funcționalități:​ În stadiul actual, ESPhone permite următoarele funcționalități:​
-  ​* Aplicație de desenat ce permite selectarea a diferitor culori/​multicolor pentru pictat. Tabla de desen se poate șterge prin apăsarea butonului.+   * Aplicație de desenat ce permite selectarea a diferitor culori/​multicolor pentru pictat. Tabla de desen se poate șterge prin apăsarea butonului.
   * Conectarea la Wi-Fi în mod dinamic. Utilizatorul poate selecta Wi-Fi-ul la care să se conecteze si poate introduce parola folosind o tastatură virtuală.   * Conectarea la Wi-Fi în mod dinamic. Utilizatorul poate selecta Wi-Fi-ul la care să se conecteze si poate introduce parola folosind o tastatură virtuală.
-  * Afișarea vremii. Dacă exista conexiune la internet, utilizatorul poate introduce la tastatură orașul pentru care să se afișeze temperatura si condițiile meteo.+  * Afișarea vremii. Dacă exista conexiune la internet, utilizatorul poate introduce la tastatură orașul pentru care să se afișeze temperatura si condițiile meteo. ​
   * Afișarea timpului curent. Dacă dispozitivul nu este conectat la internet, timpul de start este cel al compilării programului. Dacă utilizatorul se conectează la internet, atunci ceasul se va sincroniza automat cu un NTP server.   * Afișarea timpului curent. Dacă dispozitivul nu este conectat la internet, timpul de start este cel al compilării programului. Dacă utilizatorul se conectează la internet, atunci ceasul se va sincroniza automat cu un NTP server.
-  * Redarea muzicii. Utilizatorul poate schimba muzica ​curentă prin apăsarea butonului. +  * Redarea muzicii. Utilizatorul poate schimba muzica ​trece la melodia anterioară/​urmatoare ​prin gestul mâinii spre stânga/​dreapta. Apăsarea butonului ​duce la revenirea la ecranul de start. Dacă utilizatorul apropie mâna de senzor, muzica se pune pe pauză până când utilizatorul depărteaza mâna
-  * Galerie. Dacă utilizatorul este conectat la internet, poate vizualiza poze radom cu pisici. +  * Galerie. Dacă utilizatorul este conectat la internet, poate vizualiza poze random ​cu pisici. 
-  * Aprinderea ​ecranului ​la gestul ​din mână ​spre dreapta ​al utilizatorului. +  * Stingerea/​aprinderea ​ecranului ​prin gestul ​mâinii ​spre stânga/dreapta. ​Ecranul se poate stinge si prin apăsarea butonului pentru conservarea energiei.
-  * Închiderea ecranului ​prin apăsarea butonului/gest făcut din mâna spre stânga ​pentru conservarea energiei.+
   * Schimbarea culorii de fundal.   * Schimbarea culorii de fundal.
 +  * Chat. Dacă utilizatorul este conectat la internet, poate introduce un username și un IP destinație. Dacă IP-ul rămâne necompletat,​ atunci mesajele vor fi trimise la adresa de broadcast a rețelei la care este conectat. Astfel, comunicația se poate petrece cu mai multe dispozitive în același timp. Transferul de mesaje se realizează folosind UDP. 
 </​note>​ </​note>​
  
Line 141: Line 140:
 <​note>​ <​note>​
 **Elemente unice:** **Elemente unice:**
-  * UI unic, personalizat. Acesta au fost convertite din imagini PNG in BMP cu 1 bit depth pentru a salva spațiul necesar stocării acestora.+  * UI unic, personalizat.
   * Conectarea la Wi-Fi in mod dinamic.   * Conectarea la Wi-Fi in mod dinamic.
   * Controlul de la distanță al ecranului.   * Controlul de la distanță al ecranului.
Line 162: Line 161:
   * Revenirea la homescreen se face prin apăsarea butonului HOME, sau în cazul aplicației de muzică la sfârșitul ultimei melodii.   * Revenirea la homescreen se face prin apăsarea butonului HOME, sau în cazul aplicației de muzică la sfârșitul ultimei melodii.
   * La fiecare revenire, homescreen-ul este actualizat. Dacă utilizatorul s-a conectat la Wi-Fi, atunci vremea si timpul sunt actualizate cu date in timp real.   * La fiecare revenire, homescreen-ul este actualizat. Dacă utilizatorul s-a conectat la Wi-Fi, atunci vremea si timpul sunt actualizate cu date in timp real.
 +
 +** Main loop **
 +<code cpp>
 +void loop() {
 +    // If button is pressed, toggle the display
 +    if (button_pressed) {
 +        button_pressed = false;
 +        toggle_display();​
 +    }
 +
 +    // Check and handle any gesture
 +    if (get_sensor_flag())
 +        handle_gesture();​
 +
 +    // If the screen is off, return
 +    if (!screen_on) {
 +        idle();
 +        return;
 +    }
 +       
 +    // If the clock timer updated the time, draw the new time
 +    if (update_time) {
 +        update_time = false;
 +        draw_clock_time();​
 +    }
 +
 +    // Check for any touch
 +    uint16_t touch_x = 0, touch_y = 0;
 +    bool touch = tft.getTouch(&​touch_x,​ &​touch_y);​
 +
 +    if (!touch)
 +        return;
 +
 +    // If user exited app, redraw homescreen
 +    if (check_app_use(touch_x,​ touch_y))
 +        draw_homescreen();​
 +}
 +</​code>​
 </​note>​ </​note>​
  
 <​note>​ <​note>​
 **Calibrarea ecranului TFT:** **Calibrarea ecranului TFT:**
-Pentru a calibra ecranul, s-au citit coordonatele punctelor la apăsarea în colțurile ecranului, folosind funcția getTouchRaw(). Valorile citite vor fi transmise la inițializarea ecranului, iar pentru citirea coordonatelor apăsarii ecranului, se va folosi funcția getTouch() care mapează coordonatele curente in intervalul corect de apăsare al display-ului. ​+  * Pentru a calibra ecranul, s-au citit coordonatele punctelor la apăsarea în colțurile ecranului, folosind funcția getTouchRaw(). Valorile citite vor fi transmise la inițializarea ecranului, iar pentru citirea coordonatelor apăsarii ecranului, se va folosi funcția getTouch() care mapează coordonatele curente in intervalul corect de apăsare al display-ului.  
 +  * Pentru a conecta modulul direct la 3V3 s-a lipit contectorul J1 de pe spatele ecranului pentru a face bypass la LDO-ul modulului.
 </​note>​ </​note>​
 +
 <​note>​ <​note>​
 **Optimizări:​** **Optimizări:​**
   * S-au folosit întreruperi in loc de polling pentru citirea datelor de la senzorul de gesturi.   * S-au folosit întreruperi in loc de polling pentru citirea datelor de la senzorul de gesturi.
 +  * Pentru a reține și diferenția mesajele trimise de utilizator s-au folosit operatii pe biți aplicate unei variabile pe 16 biți. ​
 +  * Iconițile aplicațiilor au fost convertite din imagini PNG in BMP cu 1 bit depth, iar mai apoi in unsigned char array, pentru a salva spațiul necesar stocării acestora.
 </​note>​ </​note>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 182: Line 223:
  
 {{pm:​prj2025:​mdinica:​cristian.popescu03:​music_app_v1.jpeg?​700x800|Music app}} {{pm:​prj2025:​mdinica:​cristian.popescu03:​music_app_v1.jpeg?​700x800|Music app}}
 +
 +== ESPhone v2.0 ==
 +
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​esphone_with_battery.jpeg?​225x450|ESPhone}}
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​keyboard.jpeg?​225x450|ESPhone keyboard}}
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​bytechat.jpeg?​225x450|ESPhone ByteChat app}}
 +
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​esphone_pm.jpeg?​700x850|Paint app again}}
 +
 +{{pm:​prj2025:​mdinica:​cristian.popescu03:​back_with_espen_holder.jpeg?​700x510|ESPhone with ESPen holder}}
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+După multe zile de debugging și o grămadă de fire lipite, pot să spun că am reușit să creez ceea ce mi-am propus: un telefon ușor de folosit, greu de asamblat. Am învățat o grămadă de lucruri noi, mai ales pe partea de embedded, și sigur nu o să uit această experiență prea curând.
  
 ===== Jurnal ===== ===== Jurnal =====
  
 +<​note>​ 
 +    * 15.04.2025 -> M-am decis în legătură cu tema proiectului. 
 +    * 22.04.2025 -> Am comandat ecranul TFT LCD 2.8"​. 
 +    * 28.04.2025 -> Am desenat UI pentru aplicații. 
 +    * 5.05.2025 -> Am comandat un kit Plusivo, ESP32 DevKit-V1 si un APDS9960. 
 +    * 11.05.2025 -> M-am apucat să dezvolt "​OS-ul"​ pentru ESPhone. 
 +    * 15.05.2025 -> Am cumpărat o placă de test. De asemenea, am implementat aplicația de desenat, de redat muzică, conectat la WiFi și schimbat culoarea fundalului. 
 +    * 22.05.2025 -> Am cumpărat fire pentru momentul când voi lipi piesele pe placa de test. 
 +    * 27.05.2025 -> Am implementat aplicația de mesagerie si galerie foto. 
 +    * 28.05.2025 -> Am lipit componentele pe placa de test. 
 +    * 29.05.2025 -> Am finalizat ESPhone. 
 +</​note>​
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +
 +Resurse Software:
 +  * https://​github.com/​Bodmer/​TFT_eSPI
 +  * https://​github.com/​Bodmer/​TJpg_Decoder
 +  * https://​randomnerdtutorials.com/​esp32-tft-touchscreen-display-2-8-ili9341-arduino/​
 +  * https://​randomnerdtutorials.com/​esp32-ntp-timezones-daylight-saving/​
 +  * https://​randomnerdtutorials.com/​esp32-date-time-ntp-client-server-arduino/​
 +  * https://​github.com/​nayarsystems/​posix_tz_db/​blob/​master/​zones.csv
 +  * https://​projecthub.arduino.cc/​tmekinyan/​playing-popular-songs-with-arduino-and-a-buzzer-546f4a
 +  * https://​github.com/​hibit-dev/​buzzer
 +  * https://​randomnerdtutorials.com/​esp32-pwm-arduino-ide/​
 +  * https://​randomnerdtutorials.com/​esp32-useful-wi-fi-functions-arduino/​
 +  * https://​cataas.com/​
 +  * https://​www.weatherapi.com/​
 +Resurse Hardware:
 +  * https://​www.youtube.com/​watch?​v=rq5yPJbX_uk&​list=LL&​index=1&​t=832s&​pp=gAQBiAQB
 +  * https://​www.youtube.com/​watch?​v=gj-H_agfd6U
pm/prj2025/mdinica/cristian.popescu03.1748545812.txt.gz · Last modified: 2025/05/29 22:10 by cristian.popescu03
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0