diff --git a/ESP8266/ESP8266.ino b/ESP8266/ESP8266.ino index a920575..d95005b 100644 --- a/ESP8266/ESP8266.ino +++ b/ESP8266/ESP8266.ino @@ -7,7 +7,7 @@ // ================================================================ // OTA CONFIG // ================================================================ -#define FW_VERSION 6 +#define FW_VERSION 8 #define GITEA_HOST "https://git.nacho.myds.me" #define GITEA_OWNER "Natxo" #define GITEA_REPO "Arduino-Car" @@ -99,20 +99,39 @@ static void checkOTA() { WiFi.mode(WIFI_OFF); // apaga radio para ahorrar energía } -bool espReady = false; // true cuando el ESP32-CAM ha enviado '!' +bool espReady = false; +// ── Handshake con ESP32-CAM ────────────────────────────────────── +// Descarta basura del bootloader ROM (115200 baud → bytes aleatorios), +// luego espera exactamente "GO\n" y responde "OK\n". void waitForReady() { - // Espera la señal '!' del ESP32-CAM (máx 90s por si hace OTA) + // Descarta todo lo que haya en el buffer (logs de arranque del ESP32) + delay(300); + while (Serial.available()) Serial.read(); + + // Espera "GO\n" del ESP32-CAM (máx 90s por si está haciendo OTA) unsigned long timeout = millis() + 90000UL; + String buf = ""; while (millis() < timeout) { - if (Serial.available()) { + while (Serial.available()) { char c = Serial.read(); - if (c == '!') { espReady = true; return; } + if (c == '\n') { + buf.trim(); + if (buf == "GO") { + Serial.print("OK\n"); + delay(50); + while (Serial.available()) Serial.read(); // flush post-handshake + espReady = true; + return; + } + buf = ""; + } else if (c != '\r') { + if (buf.length() < 8) buf += c; + } } delay(10); } - // Timeout: arranca igual para no quedarse bloqueado indefinidamente - espReady = true; + espReady = true; // timeout: arranca igual } void setup() { @@ -145,10 +164,17 @@ void loop() { if (Serial.available()) { char c = Serial.read(); - // Señal de listo del ESP32-CAM (también en loop por si reinicia) - if (c == '!') { espReady = true; return; } + // Detecta re-arranque del ESP32-CAM: envía "GO\n" de nuevo + if (c == 'G') { + Serial.readStringUntil('\n'); // consume "O\n" + Serial.print("OK\n"); + delay(50); + while (Serial.available()) Serial.read(); + espReady = true; + return; + } - // Ignorar todo hasta recibir '!' — evita movimientos al arrancar + // Ignorar todo hasta completar el handshake if (!espReady) return; if (c == 'F') forward(); diff --git a/Esp32Cam/Esp32Cam.ino b/Esp32Cam/Esp32Cam.ino index 867b373..6899d2f 100644 --- a/Esp32Cam/Esp32Cam.ino +++ b/Esp32Cam/Esp32Cam.ino @@ -10,7 +10,7 @@ // ================================================================ // OTA CONFIG // ================================================================ -#define FW_VERSION 7 +#define FW_VERSION 8 #define GITEA_HOST "https://git.nacho.myds.me" #define GITEA_OWNER "Natxo" #define GITEA_REPO "Arduino-Car" @@ -24,6 +24,26 @@ const char *password = "Suprak1llm1ndS23S"; void startCameraServer(); void setupLedFlash(); +// ── Handshake bidireccional con ESP8266 ───────────────────────── +// Envía "GO\n" cada 300ms hasta recibir "OK\n". +// Protege contra basura del bootloader ROM (115200 baud → bytes aleatorios). +static void handshakeEsp8266() { + unsigned long deadline = millis() + 30000UL; // máx 30s + while (millis() < deadline) { + Serial.print("GO\n"); + unsigned long t = millis(); + while (millis() - t < 300) { + if (Serial.available()) { + String resp = Serial.readStringUntil('\n'); + resp.trim(); + if (resp == "OK") return; + } + delay(5); + } + } + // Timeout: continúa sin confirmación +} + // ── OTA: comprueba si hay firmware nuevo y actualiza si hace falta ── static void checkOTA() { WiFiClientSecure client; @@ -147,9 +167,8 @@ void setup() { // ── Servidor cámara ─────────────────────────────────────────────── startCameraServer(); - // Señal al ESP8266: estoy listo, puede empezar a procesar comandos - delay(200); - Serial.print("!"); + // Handshake bidireccional: espera ACK del ESP8266 + handshakeEsp8266(); } void loop() { diff --git a/firmware/esp32cam/firmware.bin b/firmware/esp32cam/firmware.bin index d48336f..ee1179f 100644 Binary files a/firmware/esp32cam/firmware.bin and b/firmware/esp32cam/firmware.bin differ diff --git a/firmware/esp32cam/version.txt b/firmware/esp32cam/version.txt index c793025..301160a 100644 --- a/firmware/esp32cam/version.txt +++ b/firmware/esp32cam/version.txt @@ -1 +1 @@ -7 \ No newline at end of file +8 \ No newline at end of file diff --git a/firmware/esp8266/firmware.bin b/firmware/esp8266/firmware.bin index 5b02e34..5f2f296 100644 Binary files a/firmware/esp8266/firmware.bin and b/firmware/esp8266/firmware.bin differ diff --git a/firmware/esp8266/version.txt b/firmware/esp8266/version.txt index 62f9457..301160a 100644 --- a/firmware/esp8266/version.txt +++ b/firmware/esp8266/version.txt @@ -1 +1 @@ -6 \ No newline at end of file +8 \ No newline at end of file