ESP32-CAM:
- Envia '!' por Serial cuando el servidor esta listo
- Watchdog subido a 800ms (compatible con heartbeat 150ms)
ESP8266:
- waitForReady(): bloquea hasta recibir '!' (max 90s)
- loop(): ignora comandos hasta recibir '!' — sin movimiento al arrancar
- Si ESP32 se reinicia (OTA), detecta nuevo '!' y reanuda
Web (index.html):
- Heartbeat: reenvio del comando de movimiento cada 150ms mientras tecla/boton pulsado
- Mantiene vivo el watchdog y garantiza que el motor no pare solo
- carStop() limpia el intervalo y envia S al soltar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Watchdog FreeRTOS: si no llega comando F/B/L/R en 400ms envia S
automaticamente. Evita que el coche siga recto cuando se pierde
el comando de parada por latencia del proxy HTTPS.
- X-Accel-Buffering: no en stream_handler: desactiva buffering en
nginx/Synology. Elimina los microcortes del video MJPEG.
- Cache-Control: no-cache en el stream.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Añadido token de autenticacion a todas las peticiones Gitea
- version.txt y firmware.bin se solicitan con ?token=...
- Sin token el repo privado devuelve 404 y el OTA no arrancaba
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bugs corregidos:
- ESP32-CAM: binario anterior tenia FW_VERSION=2 aunque version.txt=3
(causaba bucle infinito de actualizaciones). Recompilado con v3 real.
- ESP8266: Serial.begin() movia a ANTES de checkOTA() para que el pitido
del ESP32-CAM llegue a tiempo. stopMotors() se llama primero para
evitar movimientos involuntarios.
- Timeout HTTP 5s → 10s para conexiones HTTPS externas lentas.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Interfaz completamente rediseñada: tema militar/racing oscuro
- Fondo con grid animado, tipografia Orbitron
- Barras de potencia estilo LED (6 segmentos verde→rojo)
- Botones angulares con glow rojo (traccion) y azul (camara)
- Flechas CSS puras, crosshair en centro de camara
- Esquinas HUD animadas sobre el stream
- camera_index.h regenerado desde data/index.html (4.6KB gzipped)
- gen_header.py para regenerar el header en el futuro
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 3 pitidos al actualizar ESP32-CAM (via Serial al buzzer)
- 4 pitidos al actualizar ESP8266 (directo al buzzer)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ESP32-CAM: servidor web, stream MJPEG, control motores via Serial
- ESP8266/Wemos D1: control motores DC, servos pan/tilt, buzzer
- OTA automatico en arranque via Gitea (HTTPS, WiFiClientSecure)
- Interfaz web rediseñada: full-screen, tema gaming, reconexion de stream
- partitions.csv con esquema dual OTA (2x1.75MB) para ESP32-CAM
- firmware/ con version.txt inicial para cada placa
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>