16 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
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
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
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
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
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