Taula de continguts:
- Pas 1: el que necessiteu
- Pas 2: creeu un dipòsit per contenir firmware binari
- Pas 3: creeu els fitxers binaris
- Pas 4: creeu el flux de servidor
- Pas 5: afegiu la lògica del servidor
- Pas 6: afegiu codi a l'esbós per sol·licitar una actualització
- Pas 7: Finalment, inicieu l'actualització
Vídeo: Configureu un servidor d'actualitzacions automàtiques ESP8266: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:16
Ara hi ha molta gent que utilitza l’ESP8266 en diverses formes (ESP-01S, Wemos D1, NodeMCU, Sonoff, etc.) per a sistemes domòtics. Si escriviu el vostre propi codi (igual que jo), actualitzar cadascun d’aquests per separat fins i tot mitjançant OTA (per antena) esdevé una mica tediós.
El meu propi sistema, per exemple, té 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV i un NodeMCU que comparteixen una base de codi comuna, de manera que s’actualitzen 33 dispositius quan faig un codi senzill. canvi.
Però hi ha una manera més senzilla: un "servidor d'actualitzacions". L’excel·lent nucli Arduino IDE + ESP8266 té una biblioteca per fer la major part del treball (ESP8266httpUpdate), però heu de saber com configurar el vostre propi servidor perquè funcioni.
Aquest instructiu us mostra com utilitzar un servidor NODE-RED, però la mateixa lògica s'aplica a qualsevol tecnologia de servidor que vulgueu, per exemple. Apache + PHP, etc.
Pas 1: el que necessiteu
- IDE Arduino
- Nucli ESP8266
- Qualsevol placa de desenvolupament ESP8266 amb memòria flash de 1M o més
- Un servidor web (fins i tot un humil gerd Pi farà - és el que faig servir jo)
- (opcional) eina mkspiffs si voleu actualitzar automàticament una imatge del sistema de fitxers SPIFFS
Pas 2: creeu un dipòsit per contenir firmware binari
Al meu servidor, tinc una carpeta anomenada / home / pi / trucFirmware que conté els diversos firmware del dispositiu i les imatges SPIFFS
Mantinc un binari separat per a cada tipus de maquinari (d’un únic fitxer font amb uns quants #defines) i quan estigui llesta una nova versió, faig servir l’ordre de menú Arduino IDE "esbós / exportació binària compilada" per a cada dispositiu de destinació. Tingueu en compte que fins i tot tot i que hi ha cinc tipus de maquinari diferents, només hi ha dos binaris SPIFFS: una versió 1M i una versió 4M, construïda amb l'eina mkspiffs, ja que tots els dispositius tenen flash 1M o 4M.
Pas 3: creeu els fitxers binaris
Mitjançant l’opció de menú Arduino IDE sketch / Export Compiled Binary, creeu el firmware que es carregarà al dispositiu quan ho sol·liciti al servidor d’actualització.
Si necessiteu un binari SPIFFS, haureu d’instal·lar l’eina mkspiffs.
Un cop el tingueu, crear el binari SPIFFS és senzill. Tinc un fitxer per lots d'una línia per a la versió 1M que pren el número de versió com a paràmetre (% 1)
mkspiffs -c data / spiffs_% 1_1M.bin
i un altre per a la versió 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data / spiffs_% 1_4M.bin
Després copio tots els fitxers binaris compilats i els fitxers.binary SPIFFS al dipòsit
Pas 4: creeu el flux de servidor
Estic fent servir NODE-RED, però la lògica simple serà la mateixa en qualsevol idioma o tecnologia de servidor.
a) Definiu una URL que escoltarà la sol·licitud ESP8266httpUpdate. El meu raspberryPi serevr és a 192.168.1.4 i escolta / actualitza el port 1880 amb el tipus de maquinari afegit. Per tant, si vull sol·licitar un binari per a un Wemos D1 Mini, l'URL acabarà com:
192.168.1.4:1880/update/d1_mini
b) Creeu codi per gestionar la lògica següent:
ESP8266: "Hola, estic executant la versió de firmware a.b.c, teniu una versió més recent?" Servidor: "Feu-me veure … ah sí, tinc a.b.d - aquí arriba …"
Si existeix una versió més recent, el servidor només l'envia com a càrrega de dades binàries a la resposta http. La classe ESP8266httpUpdate fa la part complicada de copiar el binari a la memòria, canviant l'adreça d'arrencada del firmware al nou codi que (si se sol·licita) reiniciar el dispositiu per executar el nou codi.
Si per contra no hi ha cap versió superior, respon amb un error http 304 que diu efectivament: "No tinc res per a tu" i el teu codi continua funcionant amb normalitat.
Pas 5: afegiu la lògica del servidor
El primer node del flux "escolta" una sol·licitud http a la URL https://192.168.1.4:1880/update amb el tipus de dispositiu afegit. Passa això al node de funció "Construeix ruta de cerca" que té el codi javascript següent:
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 = "/ home / pi / trucFirmware / spiffs _ * _" + (sz / 1048576) + "M.bin"; } return msg;
Això simplement configura el camí d'accés adequat amb comodí per a la funció sys que segueix, que simplement s'executa
ls - r
La sortida s'alimenta al node de funció "Compare versions":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "esbós") {
f = f.replace ("/ home / 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 ("cal actualitzar");
node.warn ("retornarà" + msg.filename); retorn msg; } node.warn ("sense actualització"); msg.statusCode = 304; msg.payload = ;
retorn msg;
A continuació, el node de commutació assegura que s'envia el missatge 304 "no necessita actualització" o que es torna el binari nou que es torna al dispositiu.
Pas 6: afegiu codi a l'esbós per sol·licitar una actualització
Cal que l’esbós inclogui el codi següent perquè s’actualitzi automàticament la propera vegada que augmenteu el número de versió:
#incloure
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE s’estableix anteriorment en funció de diverses definicions en temps de compilació // que finalment defineixen el tipus hw, p. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // aquest és el meu servidor de raspberry Pi, el 1880 és el port NODE-RED predeterminat // / update és l’URL que he escollit perquè el servidor escolti, seguit del tipus de dispositiu … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (fals); if (sketch) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Aquesta és la línia que "fa el negoci"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("ACTUALITZACIÓ REALITZADA");
tornar cert; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Ha fallat l'actualització");
}}} retornar fals; }
Pas 7: Finalment, inicieu l'actualització
A l’hora d’arrencada, o potser en resposta a un missatge MQTT (com ho faig), executeu el codi següent:
if (_actualUpdate (true)) ESP.restart ();
// o per SPIFFS …
if (_actualUpdate (false)) ESP.restart ();
El dispositiu s'actualitzarà i reiniciarà executant l'últim codi del servidor. Per a mi és molt més senzill que actualitzar 33 dispositius manualment.
Podeu trobar molta més informació útil sobre domòtica, IOT i programació de l’ESP8266 al meu bloc
Recomanat:
Seguidor d’actualitzacions Covid-19 amb ESP8266: 9 passos
Covid-19 Update Tracker amb ESP8266: es tracta d’un projecte que mostra les dades actuals del brot de coronavirus de diverses ciutats dels estats de l’Índia en temps real en pantalla OLED. Aquest rastrejador d’estats en directe us ajudarà a controlar l’actualització covid-19 del vostre districte en temps real. Aquest projecte és completament b
Dissenyeu el vostre PCB mitjançant Sprint Layout 2020 amb noves actualitzacions: 3 passos
Dissenyeu el vostre PCB amb Sprint Layout 2020 amb noves actualitzacions: la majoria dels amants electrònics fabriquen circuits electrònics amb diferents mètodes. de vegades hem de fabricar PCB per obtenir una sortida adequada i reduir els sorolls i un acabat compacte. Avui en dia tenim molts programes per dissenyar PCB propis. Però el problema és més
Configureu el vostre propi servidor de seguiment GPS en un Raspberry Pi: 8 passos
Configureu el vostre propi servidor de seguiment GPS en un Raspberry Pi: en aquest projecte us mostraré com configurar el vostre propi servidor de seguiment GPS en un Raspberry pi. No ha de ser un Raspberry pi, perquè el programari que farem servir per al servidor de seguiment està disponible per a Windows i Linux
Connexió SSH / SCP segura des de Raspberry Pi fins al servidor Cloud per a còpies de seguretat i actualitzacions: 3 passos
Connexió SSH / SCP segura des de Raspberry Pi fins a Cloud Server per a còpies de seguretat i actualitzacions: l’objectiu d’aquest instructiu és mostrar-vos com connectar-vos automàticament i de forma segura des del vostre Raspberry Pi a un servidor de núvol remot (i viceversa) per dur a terme còpies de seguretat i actualitzacions, etc. Per fer-ho, utilitzeu parells de claus SSH que obvia
Configureu el vostre propi servidor web: 12 passos
Configureu el vostre propi servidor web: alguna vegada heu volgut tenir un lloc on guardar els fitxers i accedir-hi des de qualsevol lloc on tingueu connexió a Internet? Digueu que volíeu tenir la vostra biblioteca de música disponible per si volíeu donar una cançó a algun dels vostres amics, o potser no volíeu