# Firmware OTA Carpeta de binarios compilados. Cuando el coche arranca, cada placa consulta su `version.txt`, lo compara con la versión en el código, y descarga `firmware.bin` si hay novedad. ## Estructura ``` firmware/ ├── esp32cam/ │ ├── version.txt ← número entero (1, 2, 3…) │ └── firmware.bin ← binario compilado └── esp8266/ ├── version.txt └── firmware.bin ``` ## Publicar nueva versión ### 1 · Compilar el binario En Arduino IDE: **Sketch → Exportar binario compilado** (o `Ctrl+Alt+S`) El `.bin` aparece en la carpeta del sketch: - `Esp32Cam/Esp32Cam.ino.bin` - `ESP8266/ESP8266.ino.bin` ### 2 · Copiar al repo ```bash # ESP32-CAM cp Esp32Cam/Esp32Cam.ino.bin firmware/esp32cam/firmware.bin # ESP8266 / Wemos D1 cp ESP8266/ESP8266.ino.bin firmware/esp8266/firmware.bin ``` ### 3 · Incrementar version.txt Edita el archivo de la placa que has cambiado. El número debe ser **mayor** que el anterior — solo el entero: ``` 2 ``` ### 4 · Subir al repo ```bash git add firmware/ git commit -m "firmware: v2 — descripción del cambio" git push ``` Las placas actualizarán en el próximo arranque automáticamente. --- ## Primera vez (configuración inicial) ### Config en el código Antes de flashear por primera vez, edita en cada `.ino`: | Variable | Dónde | Valor | |----------------|------------------|--------------------------------| | `GITEA_HOST` | Ambos `.ino` | `http://IP-DE-TU-GITEA:3000` | | `GITEA_OWNER` | Ambos `.ino` | Tu usuario Gitea | | `GITEA_REPO` | Ambos `.ino` | Nombre del repositorio | | `WIFI_SSID` | `ESP8266.ino` | Nombre de tu WiFi | | `WIFI_PASS` | `ESP8266.ino` | Contraseña WiFi | ### Partición ESP32-CAM (importante) El OTA necesita **dos particiones de app**. El `partitions.csv` ya está actualizado, pero la primera vez hay que flashear por USB para que el IDE grabe la nueva tabla de particiones. A partir de ese flash inicial, las actualizaciones son 100% OTA. ### Subir el primer firmware.bin Compila cada sketch, copia los `.bin` a sus carpetas y haz push. La `version.txt` inicial vale `1` (ya está puesta). --- ## Repo privado en Gitea Si el repo es privado, añade tu token al HOST en el código: ```cpp #define GITEA_HOST "http://TOKEN@IP:3000" ``` O usa la URL completa con token en la query: ```cpp String base = String("http://IP:3000/owner/repo/raw/branch/main/firmware/esp32cam/") + "?token=TU_TOKEN"; ```