This is an old revision of the document!
ESPhone
Introducere
ESPhone este un telefon low-cost și low-power, potrivit pentru cei care au nevoie doar de aplicațiile de bază ale unui telefon.
Scopul proiectului este asamblarea și interconectarea unor componente electronice, care să ofere utilizatorului un telefon pentru uz de strictă necesitate. Astfel, ESPhone va pune la dispoziție următoarele funcționalități esențiale: galerie foto, redare muzică, aplicație de desenat, mesagerie, timpul curent si cel mai important, vremea.
Ideea de bază a fost dorința de a agrega funcționalitățile primitive ale telefoanelor actuale - precum galeria foto, redarea muzicii, vreme, alarma, etc. - într-un dispozitiv construit de la 0.
Proiectul este util, deoarece relevă multitudinea de aplicații redundante si timpul pierdut cu acestea, în timp ce ESPhone oferă utilizatorului strictul necesar din punct de vedere software, ajutându-l să se concentreze pe lucrurile cu adevărat importante.
Descriere generală
Afișajul TFT LCD cu touch va fi conectat la microcontrollerul ESP32 prin interfața SPI. Senzorul de gesturi, conectat prin I2C, este folosit pentru recunoașterea gesturilor utilizatorului pentru controlul de la distanță al telefonului. Butonul, LED-ul verde si buzzer-ul pasiv vor fi conectate la pini GPIO.
Schema Bloc
Hardware Design
Schemă electrică
Descriere Hardware
TFT LCD 2.8” 240×320
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.
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.
| Pin | Pin ESP32 | Descriere |
| VCC | 3V3 | Alimentare ecran |
| GND | GND | GND pentru ecran |
| CS | GPIO15 | Slave select ecran |
| RESET | EN | Resetează ecranul |
| DC | GPIO2 | Controlează tipul de date transmise prin SPI |
| MOSI | GPIO23 | MOSI pentru ecran |
| SCK | GPIO18 | SCK pentru ecran |
| LED | GPIO25 | Controlează luminozitatea ecranului |
| T_CLK | GPIO18 | SCK pentru touch |
| T_CS | GPIO21 | Slave select touch |
| T_DIN | GPIO23 | MOSI 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 |
Senzor APDS-9960
| Pin | Pin ESP32 | Descriere |
| VCC | 3V3 | Alimentare senzor |
| GND | GND | GND pentru senzor |
| SDA | GPIO32 | Linia de date pentru senzor |
| SCL | GPIO22 | Semnal de clock pentru senzor |
Push Button
| Aplicația curentă | Funcție |
| Home | Inchide ecranul pentru economisirea energiei |
| Paint | Resetează canvas-ul |
| Music | Trece la următoarea melodie |
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.
Starea de idle se activează în momentul când utilizatorul închide ecranul.
Bill of Materials
Software Design
Î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.
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 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.
Galerie. Dacă utilizatorul este conectat la internet, poate vizualiza poze radom cu pisici.
Aprinderea ecranului la gestul din mână spre dreapta al utilizatorului.
Închiderea ecranului prin apăsarea butonului/gest făcut din mâna spre stânga pentru conservarea energiei.
Schimbarea culorii de fundal.
Descriere biblioteci folosite:
Arduino.h → Include structuri de date si funcții de bază.
TFT_eSPI.h → Permite afișarea pe ecranul TFT si detectarea apăsarii pe display.
Wire.h → Folosită pentru inițializare si comunicarea prin protocolul I2C.
SparkFun_APDS9960.h → Permite inițializarea si folosirea senzorului de gesturi.
WiFi.h → Permite conectarea la Wi-Fi.
HTTPClient.h → Folosită pentru trimiterea de cererilor de tip GET.
Ticker.h → Pune la dispoziție un timer ce produce întreruperi la un interval prestabilit.
time.h → Include functii de transformare si convertire a timpului.
string.h → Folosit pentru manipularea string-urilor.
FS.h → Definește
API-ul pentru sistemul de fișere al microcontrollerului.
LittleFS.h → Folosit pentru scrierea si citirea din Flash-ul microcontrollerului.
TJpg_Decoder.h → Folosit pentru redarea imaginilor stocate în Flash pe ecran.
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.
Conectarea la Wi-Fi in mod dinamic.
Controlul de la distanță al ecranului.
Funcționalități din laborator:
GPIO: Conectarea diferitor periferice.
Întreruperi: Pentru actualizarea timpului pe ecran, dar si pentru detectarea apăsarii butonului/gesturilor.
PWM: În momentul ce ecranul se stinge, LED-ul verde îsi va crește intensitatea luminii treptat, urmând să o scadă tot treptat.
SPI: Controlul si comunicarea cu ecranul TFT.
I2C: Folosirea senzorului de gesturi.
Interacțiune user-device:
După boot, se afișează pe ecran homescreen-ul cu vremea, aplicațiile si timpul curent.
La fiecare apăsare de ecran, se verifică dacă a fost apăsat vreo zonă în care se află o aplicație.
Dacă o aplicație a fost apăsată, se intră în loop-ul aplicației si ecranul este actualizat.
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.
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.
Rezultate Obţinute
ESPhone v1.0
Concluzii
Download
Jurnal
Bibliografie/Resurse