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:25]
cristian.popescu03 [Descriere Hardware]
pm:prj2025:mdinica:cristian.popescu03 [2025/05/30 01:10] (current)
cristian.popescu03 [Jurnal]
Line 28: 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.
 +  * Ecranul dispune de un Touch Pen pentru a crește precizia.
  
 ^ ^ Pin ^ Pin ESP32 ^ Descriere ^ ^ ^ Pin ^ Pin ESP32 ^ Descriere ^
Line 110: 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 139: 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 160: 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 180: 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.1748546755.txt.gz · Last modified: 2025/05/29 22:25 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