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.
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 | |
MISO | GPIO19 | MISO pentru ecran | |
T_CLK | GPIO18 | SCK pentru touch | |
T_CS | GPIO4 | Slave select touch | |
T_DIN | GPIO23 | MOSI pentru touch | |
T_DO | GPIO19 | MISO pentru touch |
Pin | Pin ESP32 | Descriere | |
---|---|---|---|
VCC | 3V3 | Alimentare senzor | |
GND | GND | GND pentru senzor | |
SDA | GPIO21 | Linia de date pentru senzor | |
SCL | GPIO22 | Semnal de clock pentru senzor | |
INT | GPIO35 | Pin ce generează întreruperi |
Aplicația curentă | Funcție | |
---|---|---|
Home | Închide ecranul pentru economisirea energiei | |
Paint | Resetează canvas-ul | |
Music | Iese din aplicația de redare a muzicii |
Piesă | Datasheet Link | Buy Link |
---|---|---|
ESP32 DevKit-V1 | Datasheet | Buy |
TFT LCD 2.8” 240×320 | Datasheet | Buy |
APDS-9960 Sensor | Datasheet | Buy |
Passive Buzzer | Datasheet | Buy |
Push Button | Datasheet | Buy |
LED | Datasheet | Buy |
Resistor 330 Ohm | Datasheet | Buy |
Resistor 100 Ohm | Datasheet | Buy |
Power Bank 10400mah | - | Buy |
Rigid Wires | - | Buy |
Placă de test | - | Buy |
Main loop
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(); }
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.
Resurse Software:
Resurse Hardware: