Dans ce guide, vous apprendrez comment transformer votre ESP32 et un écran TFT en une horloge numérique affichant l’heure et la date. Nous utiliserons le LVGL (Light Versatile Graphics Library) et le WorldTimeAPI pour obtenir l’heure et la date actuelles. L’ESP32 sera programmé à l’aide de l’IDE Arduino.

Utilisez-vous une carte CYD ? Lisez ce guide : ESP32 CYD avec LVGL – Horloge numérique avec heure et date
Aperçu du projet
Dans ce projet, nous afficherons l’heure et la date de WorldTimeAPI sur un écran tactile LCD TFT ILI9341 de 2,8 pouces (240 × 320). L’heure et la date seront affichées sur des étiquettes de texte.

Pour obtenir une date et une heure précises pour votre fuseau horaire, nous utiliserons WorldTimeAPI. Pour obtenir l’heure de l’API, l’ESP32 doit se connecter à Internet, vous devez donc disposer d’un routeur à proximité pour que l’ESP32 puisse s’y connecter.
Conditions préalables
Avant de continuer, assurez-vous de suivre les conditions préalables suivantes. Vous devez suivre toutes les étapes, sinon votre projet ne fonctionnera pas.
1) Pièces requises
Pour ce projet, vous avez besoin des pièces suivantes :
2) Installez les cartes ESP32 dans l’IDE Arduino

Nous allons programmer l’ESP32 à l’aide de l’IDE Arduino. Assurez-vous que les cartes ESP32 sont installées. Suivez le tutoriel suivant :
3) Familiarisez-vous avec l’écran tactile LCD TFT ILI9341
L’écran que nous utilisons dans ce guide est le 2.8. pouces TFT LCD qui est également livré avec un écran tactile. L’écran communique via le protocole de communication SPI et utilise le pilote ILI9341. L’écran tactile utilise également le protocole de communication SPI.
L’écran tactile TFT LCD est également livré avec une interface de carte SD si vous devez charger des fichiers pour votre projet spécifique. Cet écran est également disponible avec différentes tailles d’écran, mais nous utiliserons celle de 240 x 320 pixels).

Si c’est la première fois que vous utilisez cet écran, assurez-vous de suivre notre guide de démarrage :
4) Câblez l’écran à l’ESP32
Câblez les broches de l’écran LCD TFT et de l’écran tactile aux GPIO ESP32 selon le tableau suivant (vous devez utiliser ces broches exactes, sinon le projet ne fonctionnera pas).

| Écran tactile LCD TFT | ESP32 |
| T_IRQ | GPIO36 |
| T_OUT | GPIO39 |
| T_DIN | GPIO32 |
| T_CS | GPIO33 |
| T_CLK | GPIO25 |
| SDO(MISO) | GPIO12 |
| DIRIGÉ | GPIO21 |
| SCK | GPIO14 |
| IDS(MOSI) | GPIO13 |
| D/C | GPIO2 |
| RÉINITIALISER | FR/RESET |
| CS | GPIO15 |
| GND | GND |
| VCC | 5V (ou 3,3V)* |
* Dans la broche VCC, vous pouvez utiliser 5V ou 3,3V selon si votre connexion J1 est ouverte ou fermée (par défaut elle est généralement ouverte comme vous pouvez le voir sur la figure ci-dessous).
VCC = 5V | J1=OPEN
VCC = 3.3V | J1=CLOSE

5) Installez les bibliothèques TFT et LVGL
LVGL (Light and Versatile Graphics Library) est une bibliothèque graphique gratuite et open source qui fournit une large gamme d’éléments graphiques faciles à utiliser pour vos projets de microcontrôleurs nécessitant une interface utilisateur graphique (GUI).

Suivez le didacticiel suivant pour installer et configurer les bibliothèques requises pour utiliser LVGL avec l’écran tactile LCD TFT ILI9341 240 × 320 de 2,8 pouces à l’aide de l’IDE Arduino.
6) Installer la bibliothèque ArduinoJson
Pour ce projet, vous devez installer la bibliothèque ArduinoJSON pour gérer la réponse JSON lorsque vous effectuez une requête auprès de WorldTimeAPI.
Dans l’IDE Arduino, accédez à Sketch > Inclure la bibliothèque > Gérer les bibliothèques. Recherchez ArduinoJSON et installez la bibliothèque de Benoit Blanchon. Nous utilisons la version 7.0.4. Nous vous recommandons d’utiliser la même version.

Horloge numérique ESP32 TFT : affichage de la date et de l’heure – Code Arduino
Le code suivant créera deux étiquettes de texte avec l’heure et la date actuelles. Avant de télécharger le code sur votre carte, vous devez insérer vos informations d’identification réseau afin que l’ESP32 puisse se connecter à Internet pour obtenir l’heure et la date. Vous devez également insérer votre fuseau horaire.
/* Rui Santos & Sara Santos - Raspberryme.com - https://Raspberryme.com/esp32-cyd-lvgl-digital-clock/ | https://Raspberryme.com/esp32-tft-lvgl-digital-clock/
THIS EXAMPLE WAS TESTED WITH THE FOLLOWING HARDWARE:
1) ESP32-2432S028R 2.8 inch 240×320 also known as the Cheap Yellow Display (CYD): https://makeradvisor.com/tools/cyd-cheap-yellow-display-esp32-2432s028r/
SET UP INSTRUCTIONS: https://Raspberryme.com/cyd-lvgl/
2) REGULAR ESP32 Dev Board + 2.8 inch 240x320 TFT Display: https://makeradvisor.com/tools/2-8-inch-ili9341-tft-240x320/ and https://makeradvisor.com/tools/esp32-dev-board-wi-fi-bluetooth/
SET UP INSTRUCTIONS: https://Raspberryme.com/esp32-tft-lvgl/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
/* Install the "lvgl" library version 9.2 by kisvegabor to interface with the TFT Display - https://lvgl.io/
*** IMPORTANT: lv_conf.h available on the internet will probably NOT work with the examples available at Raspberryme.com ***
*** YOU MUST USE THE lv_conf.h FILE PROVIDED IN THE LINK BELOW IN ORDER TO USE THE EXAMPLES FROM RANDOM NERD TUTORIALS ***
FULL INSTRUCTIONS AVAILABLE ON HOW CONFIGURE THE LIBRARY: https://Raspberryme.com/cyd-lvgl/ or https://Raspberryme.com/esp32-tft-lvgl/ */
#include
/* Install the "TFT_eSPI" library by Bodmer to interface with the TFT Display - https://github.com/Bodmer/TFT_eSPI
*** IMPORTANT: User_Setup.h available on the internet will probably NOT work with the examples available at Raspberryme.com ***
*** YOU MUST USE THE User_Setup.h FILE PROVIDED IN THE LINK BELOW IN ORDER TO USE THE EXAMPLES FROM RANDOM NERD TUTORIALS ***
FULL INSTRUCTIONS AVAILABLE ON HOW CONFIGURE THE LIBRARY: https://Raspberryme.com/cyd-lvgl/ or https://Raspberryme.com/esp32-tft-lvgl/ */
#include
#include
#include
#include
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Specify the timezone you want to get the time for: https://worldtimeapi.org/api/timezone
// Timezone example for Portugal: "Europe/Lisbon"
const char* timezone = "Europe/Lisbon";
// Store date and time
String current_date;
String current_time;
// Store hour, minute, second
static int32_t hour;
static int32_t minute;
static int32_t second;
bool sync_time_date = false;
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
#define DRAW_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT / 10 * (LV_COLOR_DEPTH / 8))
uint32_t draw_buf[DRAW_BUF_SIZE / 4];
// If logging is enabled, it will inform the user about what is happening in the library
void log_print(lv_log_level_t level, const char * buf) {
LV_UNUSED(level);
Serial.println(buf);
Serial.flush();
}
String format_time(int time) {
return (time < 10) ? "0" + String(time) : String(time);
}
static lv_obj_t * text_label_time;
static lv_obj_t * text_label_date;
static void timer_cb(lv_timer_t * timer){
LV_UNUSED(timer);
second++;
if(second > 59) {
second = 0;
minute++;
if(minute > 59) {
minute = 0;
hour++;
sync_time_date = true;
Serial.println(sync_time_date);
Serial.println("\n\n\n\n\n\n\n\n");
if(hour > 23) {
hour = 0;
}
}
}
String hour_time_f = format_time(hour);
String minute_time_f = format_time(minute);
String second_time_f = format_time(second);
String final_time_str = String(hour_time_f) + ":" + String(minute_time_f) + ":" + String(second_time_f);
//Serial.println(final_time_str);
lv_label_set_text(text_label_time, final_time_str.c_str());
lv_label_set_text(text_label_date, current_date.c_str());
}
void lv_create_main_gui(void) {
// Get the time and date from WorldTimeAPI
while(hour==0 && minute==0 && second==0) {
get_date_and_time();
}
Serial.println("Current Time: " + current_time);
Serial.println("Current Date: " + current_date);
lv_timer_t * timer = lv_timer_create(timer_cb, 1000, NULL);
lv_timer_ready(timer);
// Create a text label for the time aligned center
text_label_time = lv_label_create(lv_screen_active());
lv_label_set_text(text_label_time, "");
lv_obj_align(text_label_time, LV_ALIGN_CENTER, 0, -30);
// Set font type and size
static lv_style_t style_text_label;
lv_style_init(&style_text_label);
lv_style_set_text_font(&style_text_label, &lv_font_montserrat_48);
lv_obj_add_style(text_label_time, &style_text_label, 0);
// Create a text label for the date aligned center
text_label_date = lv_label_create(lv_screen_active());
lv_label_set_text(text_label_date, current_date.c_str());
lv_obj_align(text_label_date, LV_ALIGN_CENTER, 0, 40);
// Set font type and size
static lv_style_t style_text_label2;
lv_style_init(&style_text_label2);
lv_style_set_text_font(&style_text_label2, &lv_font_montserrat_30);
lv_obj_add_style(text_label_date, &style_text_label2, 0);
lv_obj_set_style_text_color((lv_obj_t*) text_label_date, lv_palette_main(LV_PALETTE_GREY), 0);
}
void get_date_and_time() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Construct the API endpoint
String url = String("http://worldtimeapi.org/api/timezone/") + timezone;
http.begin(url);
int httpCode = http.GET(); // Make the GET request
if (httpCode > 0) {
// Check for the response
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
//Serial.println("Time information:");
//Serial.println(payload);
// Parse the JSON to extract the time
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
const char* datetime = doc["datetime"];
// Split the datetime into date and time
String datetime_str = String(datetime);
int splitIndex = datetime_str.indexOf('T');
current_date = datetime_str.substring(0, splitIndex);
current_time = datetime_str.substring(splitIndex + 1, splitIndex + 9); // Extract time portion
hour = current_time.substring(0, 2).toInt();
minute = current_time.substring(3, 5).toInt();
second = current_time.substring(6, 8).toInt();
} else {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
}
}
} else {
Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str());
sync_time_date = true;
}
http.end(); // Close connection
} else {
Serial.println("Not connected to Wi-Fi");
}
}
void setup() {
String LVGL_Arduino = String("LVGL Library Version: ") + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();
Serial.begin(115200);
Serial.println(LVGL_Arduino);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("\nConnected to Wi-Fi network with IP Address: ");
Serial.println(WiFi.localIP());
// Start LVGL
lv_init();
// Register print function for debugging
lv_log_register_print_cb(log_print);
// Create a display object
lv_display_t * disp;
// Initialize the TFT display using the TFT_eSPI library
disp = lv_tft_espi_create(SCREEN_WIDTH, SCREEN_HEIGHT, draw_buf, sizeof(draw_buf));
lv_display_set_rotation(disp, LV_DISPLAY_ROTATION_270);
// Function to draw the GUI
lv_create_main_gui();
}
void loop() {
// Get the time and date from WorldTimeAPI
if(sync_time_date) {
sync_time_date = false;
get_date_and_time();
while(hour==0 && minute==0 && second==0) {
get_date_and_time();
}
}
lv_task_handler(); // let the GUI do its work
lv_tick_inc(5); // tell LVGL how much time has passed
delay(5); // let this time pass
}
Afficher le code brut
Comment fonctionne le code ?
Voyons comment obtenir l’heure et la date à partir de l’API et mettre à jour les étiquettes de texte avec les valeurs actuelles. Vous pouvez également passer directement à la section Démonstration.
Y compris les bibliothèques
Vous devez inclure les bibliothèques lvgl.h et TFT_eSPI.h pour communiquer et afficher du texte à l’écran.
#include
#include
Vous devez inclure les bibliothèques WiFi, HTTPClient et ArduinoJson pour effectuer des requêtes HTTP et gérer les données JSON.
#include
#include
#include
Insérez vos informations d’identification et votre fuseau horaire
Dans les lignes suivantes, vous devez insérer vos identifiants réseau afin que l’ESP32 puisse se connecter à votre routeur.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Définissez votre fuseau horaire dans la variable timezone au début du code (liste de tous les fuseaux horaires disponibles).
const char* timezone = "Europe/Lisbon";
Déclaration d’autres variables
Créez des variables auxiliaires pour contenir les valeurs de date et d’heure.
// Store date and time
String current_date;
String current_time;
// Store hour, minute, second
static int32_t hour;
static int32_t minute;
static int32_t second;
bool sync_time_date = false;
Étiquettes de texte globales
Nous créons deux objets d’étiquette de texte LVGL globaux, afin de pouvoir y accéder ultérieurement dans toutes les fonctions.
static lv_obj_t * text_label_time;
static lv_obj_t * text_label_date;
installation()
Dans setup(), incluez les lignes suivantes pour le débogage. Ceux-ci imprimeront la version de LVGL que vous utilisez. Vous devez utiliser la version 9.
String LVGL_Arduino = String("LVGL Library Version: ") + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();
Serial.begin(115200);
Serial.println(LVGL_Arduino);
Connectez-vous à Internet
Pour connecter l’ESP32 à Internet, nous utilisons le code suivant.
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("\nConnected to Wi-Fi network with IP Address: ");
Serial.println(WiFi.localIP());
Initialiser la bibliothèque LVGL
Initialisez la bibliothèque LVGL en appelant la fonction lv_init() dans setup().
// Start LVGL
lv_init();
Fonction de débogage d’enregistrement
Enregistrez votre fonction log_print() déclarée précédemment comme fonction associée au débogage LVGL.
// Register print function for debugging
lv_log_register_print_cb(log_print);
Créer un objet d’affichage
Pour écrire sur l’affichage, vous devez d’abord créer un objet d’affichage. Vous devez le faire dans tous vos croquis LVGL. Les lignes suivantes créeront un objet d’affichage LVGL appelé disp avec la largeur d’écran, la hauteur d’écran et le tampon de dessin définis précédemment.
// Create a display object
lv_display_t * disp;
// Initialize the TFT display using the TFT_eSPI library
disp = lv_tft_espi_create(SCREEN_WIDTH, SCREEN_HEIGHT, draw_buf, sizeof(draw_buf));
lv_display_set_rotation(disp, LV_DISPLAY_ROTATION_270);
Dessiner l’interface graphique
La bibliothèque LVGL fonctionne de manière asynchrone. Vous devez appeler la fonction pour dessiner sur l’écran dans setup(). Ensuite, tout fonctionne avec les événements et les rappels. Le code sera toujours à l’écoute des événements en arrière-plan. Lorsque quelque chose se produit, il exécutera la fonction de rappel associée à l’événement. Vous n’avez pas besoin de rechercher des événements dans la boucle().
Dans la plupart de nos exemples, la fonction qui dessinera à l’écran sera appelée lv_create_main_gui(). Ensuite, à l’intérieur de cette fonction, nous ajouterons les instructions pour construire l’interface.
// Function to draw the GUI
lv_create_main_gui();
get_date_and_time()
Lorsque nous initialisons l’écran, nous appelons la fonction get_date_and_time() pour obtenir la dernière date et heure de WorldTimeAPI. Ensuite, nous stockons les valeurs dans quelques variables auxiliaires qui serviront à les afficher à l’écran.
void get_date_and_time() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Construct the API endpoint
String url = String("http://worldtimeapi.org/api/timezone/") + timezone;
http.begin(url);
int httpCode = http.GET(); // Make the GET request
if (httpCode > 0) {
// Check for the response
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
//Serial.println("Time information:");
//Serial.println(payload);
// Parse the JSON to extract the time
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
const char* datetime = doc["datetime"];
// Split the datetime into date and time
String datetime_str = String(datetime);
int splitIndex = datetime_str.indexOf('T');
current_date = datetime_str.substring(0, splitIndex);
current_time = datetime_str.substring(splitIndex + 1, splitIndex + 9); // Extract time portion
hour = current_time.substring(0, 2).toInt();
minute = current_time.substring(3, 5).toInt();
second = current_time.substring(6, 8).toInt();
} else {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
}
}
} else {
Serial.printf("GET request failed, error: %s\n", http.errorToString(httpCode).c_str());
sync_time_date = true;
}
http.end(); // Close connection
} else {
Serial.println("Not connected to Wi-Fi");
}
}
Préparation de l’interface graphique
Avant de dessiner l’interface graphique principale, nous commençons par appeler l’API pour obtenir la dernière heure et date.
void lv_create_main_gui(void) {
// Get the time and date from WorldTimeAPI
while(hour==0 && minute==0 && second==0) {
get_date_and_time();
}
(...)
Minuteur
Pour mettre à jour les étiquettes de texte d’heure et de date à l’écran, nous pouvons créer une minuterie LVGL qui exécutera périodiquement une fonction spécifique. Dans ce cas, nous le mettrons à jour toutes les secondes. Créez un minuteur LVGL appelé timer et attribuez la fonction de rappel timer_cb.
lv_timer_t * timer = lv_timer_create(timer_cb, 1000, NULL);
lv_timer_ready(timer);
Étiquette de texte d’heure
Pour créer une étiquette de texte, nous pouvons appeler la fonction LVGL lv_label_create() et passer en argument l’endroit où nous voulons afficher le texte. Nous voulons l’ajouter à l’écran actuel (lv_screen_active()).
// Create a text label for the time aligned center
text_label_time = lv_label_create(lv_screen_active());
Après avoir créé l’étiquette de texte, nous pouvons définir son texte en utilisant la fonction lv_label_set_text() qui accepte comme arguments l’étiquette de texte à laquelle nous faisons référence et le texte que nous voulons ajouter à cette étiquette. Dans notre cas, nous le définissons vide au début.
lv_label_set_text(text_label_time, "");
Les lignes suivantes alignent l’étiquette de texte. Vous pouvez utiliser la fonction lv_obj_align(). Passez en arguments, l’objet LVGL, l’alignement et les décalages x et y en pixels.
lv_obj_align(text_label_time, LV_ALIGN_CENTER, 0, -30);
Pour styliser notre étiquette de texte, nous allons commencer par créer un objet de type lv_style_t appelé style_text_label. Ce type d’objet est utilisé pour appliquer des styles aux objets LVGL.
static lv_style_t style_text_label;
Après avoir créé le style, nous l’initialisons à l’aide de la fonction lv_style_init() et passons en argument notre style d’étiquette de texte (style_text_label).
lv_style_init(&style_text_label);
Ensuite, nous pouvons définir le type et la taille de la police à l’aide de la fonction lv_style_set_text_font(). Nous passons en argument l’objet de style auquel nous faisons référence et le type de police. Enfin, nous appliquons le style.
lv_style_set_text_font(&style_text_label, &lv_font_montserrat_48);
lv_obj_add_style(text_label_time, &style_text_label, 0);
Étiquette de texte de date
Une procédure similaire est appliquée pour créer le text_label_date.
// Create a text label for the date aligned center
text_label_date = lv_label_create(lv_screen_active());
lv_label_set_text(text_label_date, current_date.c_str());
lv_obj_align(text_label_date, LV_ALIGN_CENTER, 0, 40);
// Set font type and size
static lv_style_t style_text_label2;
lv_style_init(&style_text_label2);
lv_style_set_text_font(&style_text_label2, &lv_font_montserrat_30);
lv_obj_add_style(text_label_date, &style_text_label2, 0);
lv_obj_set_style_text_color((lv_obj_t*) text_label_date, lv_palette_main(LV_PALETTE_GREY), 0);
Fonction de rappel de minuterie
La fonction timer_cb s’exécute toutes les secondes. Chaque fois que la fonction de rappel s’exécute, nous incrémentons d’une seconde, toutes les 60 secondes une minute et toutes les 60 minutes une heure.
static void timer_cb(lv_timer_t * timer){
LV_UNUSED(timer);
second++;
if(second > 59) {
second = 0;
minute++;
if(minute > 59) {
minute = 0;
hour++;
sync_time_date = true;
Serial.println(sync_time_date);
Serial.println("\n\n\n\n\n\n\n\n");
if(hour > 23) {
hour = 0;
}
}
}
(...)
Nous utilisons ces variables auxiliaires pour préparer la chaîne qui sera affichée sur les étiquettes de texte.
String hour_time_f = format_time(hour);
String minute_time_f = format_time(minute);
String second_time_f = format_time(second);
String final_time_str = String(hour_time_f) + ":" + String(minute_time_f) + ":" + String(second_time_f);
Définissez les étiquettes de texte sur l’heure et la date actuelles :
lv_label_set_text(text_label_time, final_time_str.c_str());
lv_label_set_text(text_label_date, current_date.c_str());
boucle()
Dans la boucle (), vous pouvez ajouter toutes les autres tâches que votre ESP32 doit effectuer, comme dans n’importe quel croquis Arduino classique. Dans notre cas, nous vérifierons s’il est nécessaire de synchroniser la date et l’heure avec WorldTimeAPI toutes les heures.
void loop() {
// Get the time and date from WorldTimeAPI
if(sync_time_date) {
sync_time_date = false;
get_date_and_time();
while(hour==0 && minute==0 && second==0) {
get_date_and_time();
}
}
lv_task_handler(); // let the GUI do its work
lv_tick_inc(5); // tell LVGL how much time has passed
delay(5); // let this time pass
}
Démonstration
Téléchargez le code sur votre tableau. Accédez à Outils > Carte et sélectionnez ESP32 > Module de développement ESP32. Ensuite, sélectionnez le bon port COM dans Outils > Port.
Si vous voyez une erreur comme celle-ci : « Esquisse trop grande » pendant le processus de téléchargement, dans l’IDE Arduino, accédez à Outils > Schéma de partition > choisissez tout ce qui contient plus de 1,4 Mo d’application, par exemple : « Énorme application (3 Mo sans OTA/1 Mo). SPIFF ».

Enfin, cliquez sur le bouton de téléchargement.

Après quelques secondes, l’heure et la date s’afficheront à l’écran comme indiqué dans l’image ci-dessous.

L’ESP32 ne gardera pas parfaitement l’heure avec son horloge interne. Lors de nos tests, au bout d’une heure, il y a généralement un retard de 20 à 40 secondes. Toutes les heures, nous envoyons une nouvelle requête HTTP à WorldTimeAPI pour synchroniser l’heure et la date.
Conclusion
Dans ce tutoriel, vous avez appris à afficher la date et l’heure sur une carte TFT avec ESP32 à l’aide de la bibliothèque LVGL.
Nous espérons que vous avez trouvé ce tutoriel utile. Nous préparons d’autres guides sur ce forum, alors restez à l’écoute. Si vous souhaitez en savoir plus sur la création d’interfaces utilisateur graphiques à l’aide de la bibliothèque LVGL avec l’ESP32, consultez notre dernier eBook :
Autres guides que vous aimeriez lire :
Pour en savoir plus sur l’ESP32, assurez-vous de consulter nos ressources :
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

-
yanwuwa ESP32 LVGL Carte de développement Wi-Fi et Bluetooth avec écran tactile LCD 2,8" 240 x 320 avec étui flexible
-
diymore pour écran ESP32, pour Carte de développement ESP32 avec Bluetooth WiFi, écran LCD 3,2" 240 x 320, Module TFT Intelligent, écran Tactile Haute Vitesse, connectivité IoT, Compatible avec LVGL
