1. Interfaz Gráfica con LVGL y LovyanGFX
La interfaz gráfica se desarrolla utilizando LVGL y LovyanGFX, aprovechando la pantalla táctil IPS 480×320 del WT32-SC01 Plus.
- Widgets como botones, sliders, gráficos, gauges, arcos, tablas, calendarios y teclados numéricos.
- Navegación sencilla entre pantallas usando botones.
- Estética consistente y moderna.
Ejemplo de creación de un botón en LVGL:
lv_obj_t *btn = lv_btn_create(screen_main);
lv_obj_set_size(btn, 100, 50);
lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "Enviar");
lv_obj_center(label);
lv_obj_add_event_cb(btn, sendBtn_event_cb, LV_EVENT_CLICKED, NULL);
2. Conectividad WiFi y Bot de Telegram
El ESP32-S3 gestiona WiFi en paralelo con LVGL sin interrumpir la interfaz gráfica. Ejemplo de envío de mensajes a Telegram al pulsar un botón:
#include <WiFiClientSecure.h>
WiFiClientSecure client;
client.setInsecure();
if(client.connect("api.telegram.org", 443)) {
String url = String("/bot") + BOT_TOKEN + "/sendMessage?chat_id=" + CHAT_ID + "&text=Botón+presionado";
client.println(String("GET ") + url + " HTTP/1.1");
client.println("Host: api.telegram.org");
client.println("Connection: close");
client.println();
}
3. Información útil del Hardware WT32-SC01 Plus
Función / Bus | GPIO(s) | Uso en WT32-SC01 Plus |
---|---|---|
GPIO Expansión | 10, 11, 12, 13, 14, 21 | Libres para usuario |
BOOT0 | 0 | Strapping pin, evitar uso general |
I²C Touch | 5 (SCL), 6 (SDA) | Reservados FT6336U |
SPI SD | 39, 38, 40, 41 | MicroSD opcional |
UART0 | 43 (TX0), 44 (RX0) | Programación/Serial |
Internos | 45 (LCD_BL), 4 (LCD_RST), 7 (TP_INT) | Pantalla y touch internos |
4. Organización del Código del Proyecto
El código se organiza en:
- main.cpp: Control de alto nivel, setup, loop, callbacks eventos.
- sc01.cpp/.h: Inicialización de hardware/UI y funciones específicas del WT32-SC01 Plus.
Ejemplo simplificado del loop principal:
void loop() {
lv_timer_handler();
if(current_screen != prev_screen) {
switch(current_screen) {
case SCREEN_MAIN: lv_scr_load(screen_main); break;
case SCREEN_DEMO: lv_scr_load(screen_demo); break;
case SCREEN_INFO: lv_scr_load(screen_info); break;
}
prev_screen = current_screen;
}
delay(5);
}
5. Explicación Detallada del Proyecto y Recomendaciones
La estructura modular facilita expansión, mantenibilidad y claridad. Se recomienda:
- Dividir tareas intensivas usando ambos núcleos del ESP32.
- Evitar bloqueos largos en el loop principal.
- Monitorear el uso de memoria.
- Asegurar que cualquier acceso concurrente a LVGL sea seguro.
Referencias útiles: