dummybot-firmware/README.md

3.3 KiB
Raw Blame History

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

  1. 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.

  2. 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.

  3. Los 3 botones TTP223 van a GPIO 26, 27 y 14, alimentados desde 3V3.

  4. 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 highWORKING
  • 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