Tabla de contenido:
- Paso 1: lo que necesita
- Paso 2: crear un repositorio para almacenar firmware binario
- Paso 3: crea los binarios
- Paso 4: crear el flujo del servidor
- Paso 5: agregue la lógica del servidor
- Paso 6: agregue código al boceto para solicitar una actualización
- Paso 7: finalmente, inicie la actualización
Video: Configurar un servidor de actualización automática ESP8266: 7 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:44
Mucha gente ahora está usando el ESP8266 en sus muchas formas (ESP-01S, Wemos D1, NodeMCU, Sonoff, etc.) para sistemas de automatización del hogar. Si escribe su propio código (como yo), actualizar cada uno de estos por separado incluso a través de OTA (por aire) se vuelve un poco tedioso.
Mi propio sistema, por ejemplo, tiene 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV y un NodeMCU que comparten una base de código común, por lo que son 33 dispositivos en total para actualizar cuando hago un código simple cambio.
Pero hay una forma más sencilla: un "servidor de actualización". El excelente núcleo Arduino IDE + ESP8266 tiene una biblioteca para hacer la mayor parte del trabajo (ESP8266httpUpdate), pero necesita saber cómo configurar su propio servidor para que funcione.
Este Instructable le muestra cómo usar un servidor NODE-RED, pero la misma lógica se aplica a cualquier tecnología de servidor de su elección, p. Apache + PHP, etc.
Paso 1: lo que necesita
- IDE de Arduino
- Núcleo ESP8266
- Cualquier placa de desarrollo ESP8266 con 1M o más de RAM flash
- Un servidor web (incluso una humilde Raspberry Pi servirá; es lo que yo uso)
- (opcional) herramienta mkspiffs si desea actualizar automáticamente una imagen del sistema de archivos SPIFFS
Paso 2: crear un repositorio para almacenar firmware binario
En mi servidor, tengo una carpeta llamada / home / pi / trucFirmware que contiene los distintos firmwares del dispositivo y las imágenes SPIFFS
Mantengo un binario separado para cada tipo de hardware (de un solo archivo fuente con algunas #defines) y cuando una nueva versión está lista, uso el comando de menú Arduino IDE "sketch / Export compiled Binary" para cada dispositivo de destino. aunque hay 5 tipos de hardware diferentes, solo hay dos binarios SPIFFS: una versión 1M y una 4M, construida con la herramienta mkspiffs, ya que todos los dispositivos tienen flash 1M o 4M.
Paso 3: crea los binarios
Usando la opción de menú Arduino IDE sketch / Export Compiled Binary, cree el firmware que se cargará en el dispositivo cuando lo solicite desde el servidor de actualización.
Si necesita un binario SPIFFS, deberá instalar la herramienta mkspiffs.
Una vez que lo tenga, construir el binario SPIFFS es simple. Tengo un archivo por lotes de una línea para la versión 1M que toma el número de versión como parámetro (% 1)
mkspiffs -c datos / spiffs_% 1_1M.bin
y otro para la versión 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c datos / spiffs_% 1_4M.bin
Luego copio todos los binarios compilados y los archivos.binary SPIFFS en el repositorio
Paso 4: crear el flujo del servidor
Estoy usando NODE-RED, pero la lógica simple será la misma en cualquier tecnología / lenguaje de servidor.
a) Defina una URL que escuchará la solicitud ESP8266httpUpdate. Mi servidor raspberryPi está en 192.168.1.4 y escucha en el puerto 1880 para / actualizar con el tipo de hardware adjunto. Entonces, si voy a solicitar un binario para un Wemos D1 Mini, la URL termina como:
192.168.1.4:1880/update/d1_mini
b) Cree código para manejar la siguiente lógica:
ESP8266: "Hola, estoy ejecutando la versión de firmware a.b.c, ¿tienes una versión más reciente?" Servidor: "Déjame ver … ah, sí, tengo a.b.d - aquí viene …"
Si existe una versión más nueva, el servidor simplemente la envía como una carga de datos binarios en la respuesta http. La clase ESP8266httpUpdate hace la parte complicada de copiar el binario en la memoria, cambiar la dirección de arranque del firmware al nuevo código que (si se solicita) reiniciar el dispositivo para ejecutar el nuevo código.
Si, por otro lado, no hay una versión superior, responde con un error http 304 que efectivamente dice: "No tengo nada para ti" y tu código continúa ejecutándose normalmente.
Paso 5: agregue la lógica del servidor
El primer nodo del flujo "escucha" una solicitud http a la URL https://192.168.1.4:1880/update con el tipo de dispositivo adjunto. Pasa esto al nodo de función "Construir ruta de búsqueda" que tiene el siguiente código javascript:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-version"];
msg.mode = h ["x-esp8266-mode"];
if (msg.mode == "sketch") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"; } else {var sz = h ['x-esp8266-chip-size']; msg.payload = "/ inicio / pi / trucFirmware / spiffs _ * _" + (sz / 1048576) + "M.bin"; } return msg;
Esto simplemente configura la ruta apropiada con comodines para la función sys que sigue, que simplemente se ejecuta
ls - r
A continuación, la salida se envía al nodo de función "Comparar versiones":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "sketch") {
f = f.replace ("/ inicio / pi / trucFirmware / truc_", ""); f = f.replace (". ino." + msg.type + ". bin", ""); } else {f = f.replace ("/ home / pi / trucFirmware / spiffs_", ""); f = f.replace (/ _ / dM \.bin /, ""); }
if (msg.version <f) {
node.warn ("requiere actualización");
node.warn ("devolverá" + msg.filename); return msg; } node.warn ("sin actualización"); msg.statusCode = 304; msg.payload = ;
return msg;
El nodo de conmutación asegura entonces que se envía el mensaje 304 "no se necesita actualización" o que se devuelve el nuevo binario real y se envía de vuelta al dispositivo.
Paso 6: agregue código al boceto para solicitar una actualización
El boceto debe tener el siguiente código incluido para que se actualice automáticamente la próxima vez que aumente el número de versión:
#incluir
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE se establece antes dependiendo de varias definiciones de tiempo de compilación // que finalmente definen el tipo de hw, p. Ej. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // este es mi servidor Raspberry Pi, el 1880 es el puerto NODE-RED predeterminado // / update es la URL que elegí para que el servidor "escuche", seguida del tipo de dispositivo … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (falso); if (bosquejo) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Esta es la línea que "hace el negocio"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("ACTUALIZACIÓN EXITOSA");
devuelve verdadero; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Actualización fallida");
} } } falso retorno; }
Paso 7: finalmente, inicie la actualización
En el momento del arranque, o quizás en respuesta a un mensaje MQTT (como yo) ejecute el siguiente código:
if (_actualUpdate (true)) ESP.restart ();
// o para SPIFFS…
if (_actualUpdate (falso)) ESP.restart ();
El dispositivo se actualizará y se reiniciará ejecutando el último código del servidor. ¡Es mucho más simple para mí que actualizar manualmente 33 dispositivos!
Puede encontrar mucha más información útil sobre domótica, IOT y programación del ESP8266 en Mi Blog
Recomendado:
Actualización de firmware de ESP8266: 4 pasos
Parpadeo del firmware de ESP8266: Todos intentaron actualizar el firmware del módulo ESP8266, las instrucciones pueden ayudarlo a actualizar el firmware en ESP8266
Ventilador ESP8266 POV con reloj y actualización de texto de página web: 8 pasos (con imágenes)
Ventilador ESP8266 POV con reloj y actualización de texto de página web: se trata de un ventilador de velocidad variable, POV (persistencia de la visión) que muestra la hora de forma intermitente y dos mensajes de texto que se pueden actualizar `` sobre la marcha ''. también es un servidor web de una sola página que te permite cambiar los dos mensajes de texto
Cómo configurar la dirección automática John Deere: 5 pasos (con imágenes)
Cómo configurar la dirección automática John Deere: John Deere ha creado un sistema de tecnología que se puede utilizar para ahorrar combustible, ahorrar tiempo, ahorrar desgaste en el equipo, ahorrar dinero en costos de insumos y brindar eficiencia a las granjas. Este video enseñará a las personas cómo instalar esta tecnología en un tractor y hacer
Actualización del firmware Esp8266: 7 pasos
Actualización de firmware Esp8266: El módulo ESP8266 es un módulo inalámbrico económico.Tiene SOC (sistema en chip) que es capaz de proporcionar wifi a cualquier microcontrolador / microprocesador.Hay dos formas de utilizar el esp8266.Esp8266 independiente Esp8266 con raspberry pi o arduino o
Cómo configurar Samba (servidor de archivos): 6 pasos
Cómo configurar Samba (servidor de archivos): Este Instructable lo guiará a través de la configuración de Samba Este Instructable se basa en Linux Ubuntu 9.04. Las instrucciones para configurarlo con versiones más nuevas serán prácticamente idénticas. Me centraré en configurar un servidor de archivos en este Instr