Firmware ESP32 - DummyBot task manager
Cambio importante: el módulo de botones chino tiene los pads cortocircuitados a KCOM (que está a GND), lo que fuerza GPIO 26 y 27 a LOW constantemente y dispara acciones sin tocarlos. Solución temporal: solo GPIO 25 funciona como botón. Multi-pulsación para 3 acciones: - 1 tap = DONE - 2 taps = NEXT (re-poll) - 3 taps = SNOOZE 5 min - mantener 1s+ = sleep/wake pantalla Cuando llegue la placa nueva con 3 pulsadores mecánicos de 6mm, se restaura la lógica de 3 botones en GPIO 25/26/27. |
||
|---|---|---|
| src | ||
| .gitignore | ||
| partitions.csv | ||
| platformio.ini | ||
| README.md | ||
DummyBot Firmware
Firmware del ESP32 para DummyBot, task manager para TDAH con pantalla OLED.
Hardware
- ESP32-D0WD-V3 (DevKitC / WROOM-32, 4 MB flash)
- Pantalla OLED SSD1306 0.96" (128x64, I2C, 4 pines)
- 3× TTP223 (botones táctiles: Siguiente / Hecha / Snooze)
- 1× motor vibrador 1027 (3V DC, controlado por MOSFET en GPIO 25)
Cableado
ESP32 (WROOM-32) OLED SSD1306 0.96" (GM009605 v4.x)
───────────────────── ─────────────────────────
3V3 ───────▶ VDD (también OK con 5V)
GND ───────▶ GND
GPIO 22 ───────▶ SCK (I2C SCL)
GPIO 21 ───────▶ SDA (I2C SDA)
ESP32 TTP223 (×3)
───────── ───────────
GPIO 26 ──▶ SIG TTP223 #1 Siguiente tarea
GPIO 27 ──▶ SIG TTP223 #2 Marcar como hecha
GPIO 14 ──▶ SIG TTP223 #3 Snooze 5 min
3V3 ──▶ VCC de los 3
GND ──▶ GND de los 3
ESP32 Módulo vibrador (con MOSFET)
───────── ──────────────────────────────
GPIO 25 ──▶ Gate del MOSFET
3V3 o 5V ──▶ V+ del vibrador
GND ──▶ GND del vibrador
Para el motor 1027 (3V, 70-100 mA), un MOSFET AO3400 o 2N7000 + resistencia 100Ω en gate. Si solo tienes NPN (BC547/2N2222/S8050), esquema alternativo: motor entre 3V3 y colector, resistencia 1kΩ en base.
Build
# 1. Instalar PlatformIO (si no lo tienes)
pip install platformio
# 2. Compilar
pio run
# 3. Flashear
pio run -t upload --upload-port /dev/ttyUSB0
# 4. Monitor serie (opcional, para ver logs)
pio device monitor --port /dev/ttyUSB0 --baud 115200
Configurar
Hay dos formas:
A) Hardcodear en platformio.ini (más cómodo, editas antes de flashear):
build_flags =
-DDEFAULT_WIFI_SSID=\"TuWiFi\"
-DDEFAULT_WIFI_PASS=\"TuPassword\"
-DBACKEND_URL=\"http://tu-servidor.com\"
-DDEFAULT_DEVICE_TOKEN=\"tu-token-del-dispositivo\"
B) Captive portal (recomendado si vas a dar el bot a otra persona):
- Flashear el firmware sin configurar.
- En el primer arranque, el bot abre un AP
DummyBot-Setup(passdummybot). - Conéctate desde el móvil y abre
http://192.168.4.1/. - Verás una lista de redes WiFi detectadas (con intensidad en dBm).
- Selecciona la tuya, escribe la contraseña, el token y guarda.
- El bot reinicia y conecta solo.
Para resetear la configuración guardada: mantén pulsado el botón BOOT (GPIO 0) durante 5 s al arrancar.
Pantalla OLED
La OLED muestra:
- Sin tareas: "Sin tareas :)" + "Añade desde la web"
- Con tarea: nombre de la tarea (en grande), prioridad en el header
- Conectando: "WiFi..." con puntos animados
- Portal cautivo: "Config WiFi" + AP + contraseña
Funcionalidad
- WiFi: conexión automática con reconexión. Captive portal para configurar.
- HTTP: polling cada 30 s a
BACKEND_URL/api/device/tasks/pendingcon token de dispositivo. - 3 botones: Siguiente (pasa a la siguiente), Hecha (marca como hecha), Snooze (pospone 5 min).
- Vibrador: vibra cuando llega una tarea nueva (patrón de 2 buzzes).
- Captive portal: lista redes WiFi detectadas con dBm, prueba conexión antes de guardar.
Tests
# Test diagnóstico de pantalla (en otra rama)
pio run -e diag -t upload
Licencia
MIT