Skip to content

build: migrar a Arduino core 3.x (ESP-IDF 5) — requiere tests serios en hardware #14

Open

Description

@mcamposv

Contexto

platformio.ini no fijaba la versión de la plataforma (platform = espressif32). Cuando caducó la caché del CI, GitHub Actions se descargó la plataforma más reciente, con Arduino core 3.x / ESP-IDF 5 y C++20, y la compilación se rompió. Como solución temporal, en #13 se fijó espressif32 @ 6.12.0 (core Arduino 2.x), la versión validada en hardware.

Migrar a core 3.x es buena idea a medio plazo: es la rama mantenida, trae ESP-IDF 5, correcciones de seguridad y las nuevas APIs de red. Pero toca red, Ethernet y OTA, que son la base del proxy, así que requiere pruebas serias en hardware antes de llegar a producción.

Errores detectados al compilar con la plataforma nueva

src/i18n/es.hpp:105: invalid conversion from 'const char8_t*' to 'const char*'
src/i18n/de.hpp:105: invalid conversion from 'const char8_t*' to 'const char*'
src/proxy_operativo.hpp: invalid conversion from 'int' to 'eth_phy_type_t'   (ETH.begin)
src/proxy_operativo.hpp: 'ESP_MAC_ETH' was not declared in this scope
src/proxy_operativo.hpp: 'esp_read_mac' was not declared in this scope

Seguramente solo son los primeros: el compilador se detiene en el primer fichero que falla.

Tareas

  • Decidir la plataforma de destino (versión oficial de platformio/espressif32 o el fork pioarduino) y fijar la versión exacta en platformio.ini
  • i18n: los literales u8"..." pasan a ser char8_t en C++20; quitar el prefijo u8 (los fuentes ya son UTF-8) o hacer un cast
  • Ethernet: adaptar ETH.begin(...) a la nueva firma (tipo de PHY eth_phy_type_t, orden de parámetros, LAN8720)
  • MAC: incluir esp_mac.h para esp_read_mac / ESP_MAC_ETH
  • Revisar los eventos de red (WiFi.onEvent / ARDUINO_EVENT_*) y las APIs de WiFi que hayan cambiado
  • Comprobar que las librerías son compatibles: ESP32Ping, Adafruit SH110X, Adafruit GFX, ArduinoOTA, WebServer, DNSServer, Preferences
  • Revisar los logs: esp_log_level_set y que la UART siga en silencio
  • Comparar el tamaño del binario (ahora ~75 % de flash) y la RAM libre

Plan de pruebas en hardware (obligatorio antes de producción)

Primero en el proxy de test (.213) contra el emulador EMMA (.212), y después varios días de funcionamiento continuo antes de tocar producción (.211).

  • Primer flasheo por USB (por si OTA falla, que exista vuelta atrás)
  • NVS: al actualizar desde 6.x se conserva la configuración (red, IP destino, idioma, Test Target)
  • WiFi: IP estática y DHCP; reconexión tras caída del AP
  • Ethernet (LAN8720): IP estática y DHCP; desconectar y reconectar el cable
  • OTA: subida correcta, contraseña, pantalla de progreso en el OLED, y una segunda OTA desde el firmware nuevo
  • Portal de Setup: AP, portal cautivo, escaneo WiFi y guardado
  • Arranque: peaje de ping y Test Target (EMMA, SUN2000, Custom y test desactivado)
  • Proxy: varios clientes a la vez (Home Assistant + scripts), reensamblado de tramas fragmentadas, log y CSV
  • OLED y botones: menú, test ping, test Modbus, escáner, pausa y apagado
  • Estabilidad: 72 h o más sin reinicios ni fugas de memoria (vigilar el heap libre)
  • Vuelta atrás probada: volver a flashear la 6.x por USB y comprobar que la NVS sigue siendo compatible

Riesgos

  • Si cambia el comportamiento de la pila de red o de Ethernet, el proxy puede quedarse sin red y sin forma de recibir OTA. Por eso el primer flasheo va por USB.
  • Cambios de formato en la NVS o en la tabla de particiones podrían obligar a reconfigurar el equipo.

Referencias

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions