Nº 11de 22Índice

CacaOS

Firmware em C++ para ESP32 com tela touch: 8 mini-apps em LVGL e simulador SDL2 para desenvolver sem a placa

Ano
2026
Status
EM CURSO
Stack
C++ · PlatformIO · LVGL · ESP32 +2
cacaos
C

C++

Sem captura pública — capa gerada

01O projeto

Firmware de aplicação em C++ para um ESP32 com display touch de 320×240, feito como presente físico: um launcher com oito mini-apps em pixel art (galeria, contador, tamagotchi, pomodoro, mood tracker e outros). Não é sistema operacional — não tem kernel nem escalonador próprio; é um loop cooperativo sobre o framework Arduino, com LVGL desenhando a interface. O detalhe de engenharia que interessa está fora dos apps: um segundo ambiente de build compila o mesmo código de UI contra SDL2 no Mac, trocando por shims só os módulos de hardware, e uma máquina de estados de WiFi pausa e retoma o rádio para conseguir escanear redes durante uma tentativa de conexão.

02O que foi feito

  1. Ambiente de simulador nativo em SDL2 paralelo ao build de hardware: a UI inteira roda no Mac sem a placa, com shims só nos módulos de display, touch, SD, WiFi e sensores

  2. Máquina de estados de WiFi com pause/resume do rádio, porque iniciar scan durante uma tentativa de conexão falha em silêncio no ESP-IDF; a troca de credenciais tem rollback automático quando a rede nova não conecta

  3. Driver de touch reescrito em bit-banging para liberar o barramento SPI real ao cartão SD, que disputava os mesmos pinos

  4. CI no GitHub Actions que compila o firmware de verdade a cada push e reporta o uso de flash e RAM

  5. Pipeline próprio de assets: sprite sheet PNG convertido para o formato binário do LVGL, para reduzir uso de RAM e flash no dispositivo

03Decisões

Decisão 01

Pergunta: Como testar a UI antes de a placa chegar?

Resposta: Um segundo ambiente de build compila o mesmo código de apps e UI contra SDL2 no desktop; só display, touch, SD, WiFi e sensores são substituídos por shims. O resto roda idêntico ao que roda na placa.

Decisão 02

Pergunta: Por que bit-bang no touch em vez do driver SPI padrão?

Resposta: O controlador de touch e o cartão SD disputam o mesmo barramento. Reescrever o touch em bit-banging manual dos pinos devolveu o SPI real ao SD, que sem isso parava de funcionar.

04Stack

  • C++
  • PlatformIO
  • LVGL
  • ESP32
  • SDL2
  • GitHub Actions
Próximo projeto →Nº 12

Compilador em Java: lexer, parser recursivo-descendente, interpretador tree-walking e gerador de assembly NASM x86 32-bit