This shows you the differences between two versions of the page.
pm:prj2025:mdinica:cristian.popescu03 [2025/05/29 22:56] cristian.popescu03 [Software Design] |
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 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 ** | ** Main loop ** | ||
- | <code> | + | <code cpp> |
void loop() { | void loop() { | ||
- | // If button is pressed, toggle the display | + | // If button is pressed, toggle the display |
- | if (button_pressed) { | + | if (button_pressed) { |
- | button_pressed = false; | + | button_pressed = false; |
- | toggle_display(); | + | toggle_display(); |
- | } | + | } |
- | // Check and handle any gesture | + | // Check and handle any gesture |
- | if (get_sensor_flag()) | + | if (get_sensor_flag()) |
- | handle_gesture(); | + | handle_gesture(); |
- | // If the screen is off, return | + | // If the screen is off, return |
- | if (!screen_on) { | + | if (!screen_on) { |
- | idle(); | + | idle(); |
- | return; | + | return; |
- | } | + | } |
- | // If the clock timer updated the time, draw the new time | + | // If the clock timer updated the time, draw the new time |
- | if (update_time) { | + | if (update_time) { |
- | update_time = false; | + | update_time = false; |
- | draw_clock_time(); | + | draw_clock_time(); |
- | } | + | } |
- | // Check for any touch | + | // Check for any touch |
- | uint16_t touch_x = 0, touch_y = 0; | + | uint16_t touch_x = 0, touch_y = 0; |
- | bool touch = tft.getTouch(&touch_x, &touch_y); | + | bool touch = tft.getTouch(&touch_x, &touch_y); |
- | if (!touch) | + | if (!touch) |
- | return; | + | return; |
- | // If user exited app, redraw homescreen | + | // If user exited app, redraw homescreen |
- | if (check_app_use(touch_x, touch_y)) | + | if (check_app_use(touch_x, touch_y)) |
- | draw_homescreen(); | + | draw_homescreen(); |
} | } | ||
</code> | </code> | ||
Line 204: | Line 203: | ||
<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. | * 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> | ||
Line 224: | 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 |