Commit Graph

22 Commits

Author SHA1 Message Date
Natxo1000
ba3f927e8c firmware: v19 — quitar handler G del loop()
El handler 'G' en loop() empeoraba el problema:
el bootloader del ESP32 manda basura que incluye bytes 0x47 ('G'),
lo que disparaba un handshake falso y dejaba espReady=true
antes de tiempo, permitiendo que mas basura del bootloader
ejecutase backward().

Ahora: solo waitForReady() hace el handshake al arrancar.
Si el ESP32 se cuelga y reinicia, el watchdog de 1.5s (millis())
para los motores. Cuando el ESP32 termina de arrancar, el usuario
puede volver a manejar normalmente.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 16:55:58 +02:00
Natxo1000
3ef37e0f0e firmware: v18 — fix bug critico espReady + watchdog ESP8266
Bug: en v16 se elimino if(!espReady)return del loop() y no se restauro
en v17. Resultado: bytes basura del bootloader ESP32 (ej 0x42='B') se
ejecutaban como backward() antes y despues del handshake.

Fixes:
- Restaurado bool espReady con guard if(!espReady)return en loop()
- Restaurado handler 'G' en loop() para reinicio del ESP32:
  espReady=false + stopMotors() inmediato + nuevo handshake
- Watchdog ligero en ESP8266 (solo millis(), sin FreeRTOS):
  si no llega comando de movimiento en 1.5s -> para motores
  Evita que el coche siga moviendose si el ESP32 crashea

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 21:59:27 +02:00
Natxo1000
88b24f9527 firmware: v17 — waitForReady restaurado, sin watchdog 2026-06-02 17:13:12 +02:00
Natxo1000
e0cc1d0908 firmware: v16 — sin watchdog ni handshake (prueba simplificada)
Eliminados para diagnostico del problema de ruido electrico:
- Watchdog de motores (tarea FreeRTOS en ESP32)
- Handshake GO/OK bidireccional
- ESP8266 vuelve a delay fijo de 15s para esperar al ESP32

Si el problema de desconexion persiste con v16 -> es hardware (ruido L298N)
Si mejora -> alguna de estas tareas contribuia al problema

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 17:10:56 +02:00
Natxo1000
e84a69a9d8 firmware: v15 — fix comandos motor con proxy HTTPS
AbortController cancelaba fetch de movimiento (F/B/L/R) antes de que
llegase al ESP32 si la latencia del proxy Synology era >150ms.
Resultado: algunos comandos (especialmente B y R) no alcanzaban el
servidor y el motor no respondia.

Cambios:
- Movimiento (F/B/L/R): sin AbortController, el fetch llega siempre
- Stop (S): mantiene AbortController para que la parada sea instantanea
- Heartbeat: 150ms → 300ms (margen para latencia de proxy ~100-200ms)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 16:43:25 +02:00
Natxo1000
7d0af92949 firmware: v14 — stream full-screen (CSS)
object-fit:cover + width/height:100% en lugar de max-width/max-height
+ contain. El stream ahora llena toda la pantalla disponible con un
recorte minimo. Sin impacto en latencia: cambio puramente CSS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 15:41:02 +02:00
Natxo1000
e6f1cbf17f firmware: v13 — test OTA Wemos + pitidos mas distinguibles
- Forzado v13 para verificar que el OTA del ESP8266 funciona
- Pitidos handshake alargados a 180ms para distinguirlos mejor
  del "pitido largo" que sonaban antes (100ms eran muy cortos)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 15:30:31 +02:00
Natxo1000
8f360d352a firmware: v12 — quitar setBufferSizes ESP8266 OTA
setBufferSizes(512,512) rechazaba records TLS > 512 bytes durante la
descarga del binario. La primera OTA exitosa no usaba setBufferSizes.
Eliminadas todas las llamadas — buffers por defecto de BearSSL.
Se mantiene el scope block que libera el cliente de version.txt
antes de crear el cliente de descarga.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 15:05:03 +02:00
Natxo1000
234e39aa6f firmware: v11 — fix buffer TLS firmware download ESP8266
setBufferSizes(512,512) en el cliente de descarga causaba que BearSSL
rechazase records TLS de datos > 512 bytes durante la descarga del
binario de ~400KB. Cambiado a setBufferSizes(4096,512):
- 4096 bytes entrada: suficiente para records TLS de datos
- 512 bytes salida: suficiente para peticiones HTTP
- El scope block del cliente de version.txt libera ~10KB antes,
  dejando heap suficiente para este cliente mas grande.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:54:50 +02:00
Natxo1000
b9bd18a568 firmware: v10 — fix OTA ESP8266 memoria + idioma de pitidos
Fix OTA ESP8266 (pitidos cada arranque):
- BearSSL ocupa ~20KB de heap. El cliente de version.txt y el cliente
  de firmware.bin coexistian → sin heap suficiente → descarga falla.
- Ahora el primer cliente se destruye en su scope {} antes de crear
  el segundo. setBufferSizes(512,512) reduce uso BearSSL durante descarga.

Idioma de pitidos:
- 2 pitidos: handshake OK, ambas placas conectadas y listas
- 3 pitidos: ESP32-CAM actualizandose via OTA
- 4 pitidos: ESP8266 actualizandose via OTA

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:49:11 +02:00
Natxo1000
e02a805aa3 firmware: v9 — fix watchdog ESP32 + mitigacion glitch motor OTA
ESP32-CAM:
- handshakeTask() corre ahora en tarea FreeRTOS separada.
  setup() termina de inmediato, el servidor web arranca sin bloqueos.
  El watchdog de hardware ya no puede dispararse (antes setup()
  bloqueaba hasta 30s con readStringUntil que no cedia el CPU).

ESP8266:
- Antes del flash OTA, fuerza ENA=ENB=0 e IN1-IN4=LOW para reducir
  el glitch de pines GPIO durante el proceso de escritura en flash.
  (La solucion definitiva es resistencias pull-down en ENA/ENB.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 14:35:15 +02:00
Natxo1000
7707953d4d firmware: v8 — handshake GO/OK bidireccional
Problema raiz: el bootloader ROM del ESP32 emite logs a 115200 baud.
Al recibirlos a 9600 baud en el ESP8266 salen bytes aleatorios, alguno
de los cuales puede ser F/B/L/R (mover ruedas) o '!' (activar espReady).

Solucion: handshake con string de 2 chars "GO\n" / "OK\n":
- ESP32-CAM envia "GO\n" cada 300ms hasta recibir "OK\n"
- ESP8266 descarta todo el buffer al arrancar (basura del bootloader),
  luego espera exactamente "GO\n" y responde "OK\n"
- En loop(), si ESP32 reinicia y manda "G", el ESP8266 repite el handshake
- Probabilidad de falso positivo: << 1 en millones vs ~40% del '!' solo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 13:31:33 +02:00
Natxo1000
1688cdb185 firmware: v7 — fix LED independiente del streaming
El LED ahora se enciende/apaga siempre con el boton, sin necesitar
que el stream este activo (antes requeria isStreaming==true).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 13:20:08 +02:00
Natxo1000
c1b587b0a8 firmware: v6 — handshake ! + heartbeat movimiento
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>
2026-06-02 12:56:50 +02:00
Natxo1000
e634138924 firmware: v5 — watchdog motores + fix stream buffering
- 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>
2026-06-02 12:44:33 +02:00
Natxo1000
3cded388b1 firmware: v4 — fix OTA repo privado
- 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>
2026-06-02 12:13:49 +02:00
Natxo1000
20666449b8 firmware: v3 correcto — fix OTA + timing pitido
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>
2026-06-02 12:01:39 +02:00
Natxo1000
8a93578c9f firmware: v3 — nuevo diseño web HUD
- 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>
2026-06-02 11:54:11 +02:00
Natxo1000
830b8fb579 firmware: v2 — pitidos OTA
- 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>
2026-06-02 10:52:39 +02:00
Natxo1000
0675c9ee7a Firmware inicial ESP8266/Wemos D1 Mini (v1)
- OTA via Gitea HTTPS con BearSSL
- Control motores, servos pan/tilt, buzzer via Serial

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 10:27:46 +02:00
Natxo1000
642ec3ef5e Fix compilacion OTA y firmware inicial ESP32-CAM
- Corregido bug: String.trim() devuelve void en Arduino, separado de toInt()
- Añadido firmware/esp32cam/firmware.bin (v1, compilado con min_spiffs OTA)
- min_spiffs: 1.87MB por particion OTA, mas que suficiente (firmware ocupa 1.29MB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 10:24:08 +02:00
Natxo1000
dacc913c5a Coche RC con OTA via Gitea
- 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>
2026-06-02 09:52:51 +02:00