3.3 KiB
DummyBot Firmware
Firmware del ESP32 para DummyBot, task manager para TDAH.
Hardware
- ESP32-D0WD-V3 (DevKitC / WROOM-32, 4 MB flash)
- Pantalla M130T-240240-RGB-7-V1.1 (ST7789 240x240 SPI, sin CS)
- 3× TTP223 (botones táctiles: Siguiente / Hecha / Snooze)
- 1× motor vibrador 1027 (3V DC, controlado por MOSFET en GPIO 25)
Cableado
ESP32 (WROOM-32) M130T-240240-RGB-7-V1.1
───────────────────── ─────────────────────────
5V (VIN) ───────▶ VCC ← IMPORTANTE: 5V, NO 3V3
GND ───────▶ GND
GPIO 18 ───────▶ SCL (SPI clock)
GPIO 23 ───────▶ SDA (SPI MOSI)
GPIO 15 ───────▶ RES (reset) ← IMPORTANTE: GPIO 15, NO GPIO 2
GPIO 4 ───────▶ DC (data/command)
GPIO 32 ───────▶ BL (backlight)
CS a GND (no se usa)
Notas importantes sobre cableado
-
VCC de la pantalla en 5V (pin VIN), NO en 3V3. La pantalla necesita más corriente de la que el regulador 3.3V del ESP32 puede suministrar bajo carga (WiFi + SPI). Con 3V3 el panel se ilumina pero no muestra nada.
-
RES (reset) en GPIO 15, NO en GPIO 2. GPIO 2 está compartido con el LED interno azul del ESP32 DevKitC, lo que interfiere con la señal de reset.
-
Los 3 botones TTP223 van a GPIO 26, 27 y 14, alimentados desde 3V3.
-
El vibrador va a GPIO 25 con un transistor (MOSFET AO3400 o similar).
Para el motor 1027 (3V, 70-100 mA), un MOSFET AO3400 o 2N7000 + resistencia 100Ω en gate. Si solo tienes NPN (BC547/2N2222), esquema alternativo: motor entre 3V3 y colector, resistencia 1kΩ en base.
Build
# 1. Compilar
pio run -e esp32dev
# 2. Flashear firmware
pio run -e esp32dev -t upload --upload-port /dev/ttyUSB0
# 3. Generar y flashear SPIFFS (caritas)
python3 gen_gifs.py
mkdir -p data/gifs && cp gifs/*.gif data/gifs/
mkspiffs -c data -s 0xCF000 -b 4096 -p 256 spiffs.bin
esptool --port /dev/ttyUSB0 write_flash 0x310000 spiffs.bin
Configurar backend + token
En platformio.ini:
[env:mi-server]
platform = espressif32 @ 6.5.0
board = esp32dev
framework = arduino
board_build.partitions = partitions.csv
lib_deps =
bodmer/TFT_eSPI@^2.5.43
bblanchon/ArduinoJson@^7.0.4
tzapu/WiFiManager@^2.0.17
bitbank2/AnimatedGIF@^1.4.1
build_flags =
-DCORE_DEBUG_LEVEL=3
-DUSER_SETUP_LOADED=1
-include $PROJECT_DIR/include/User_Setup.h
-DWM_DEBUG_LEVEL=3
-DBACKEND_URL=\"https://dummybot.example.com\"
-DDEVICE_TOKEN=\"1|abc...xyz\"
build_src_filter = +<main.cpp> -<tests/>
Caritas
12 GIFs animados de 80x80, generados con gen_gifs.py:
- 01_neutral, 02_happy, 03_worried, 04_sad, 05_cry
- 06_surprised, 07_angry, 08_sleepy, 09_wink, 10_love
- 11_working, 12_excited
El firmware elige la emoción según:
- Sin tareas →
SLEEPY/ rotando demo - Nueva tarea detectada →
EXCITED+ vibración - Prioridad
high→WORKING - Hecha →
WINK - Snooze →
WORRIED
Tests
# Test de pantalla (colores + chip ID ST7789)
pio run -e diag -t upload
# Test de bus SPI (loopback MOSI↔MISO)
pio run -e spiloop -t upload
Licencia
MIT