dummybot-firmware/README.md

111 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```bash
# 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`:
```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
```bash
# 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