Publicado el Dejar un comentario

Proyecto con Módulo WT32-SC01 Plus (ESP32-S3) con LVGL y funciones WiFi+Telegram

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:

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *