Innehållsförteckning:
- Steg 1: Vad du behöver
- Steg 2: Skapa ett arkiv för binära firmware
- Steg 3: Skapa binärfilerna
- Steg 4: Skapa serverflödet
- Steg 5: Lägg till serverlogiken
- Steg 6: Lägg till kod i skissen för att begära en uppdatering
- Steg 7: Slutligen, initiera uppdateringen
Video: Konfigurera en ESP8266 automatisk uppdateringsserver: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:47
Många människor använder nu ESP8266 i dess många skepnader (ESP-01S, Wemos D1, NodeMCU, Sonoff etc) för hemautomatiseringssystem. Om du skriver din egen kod (som jag gör) blir det lite tråkigt att uppdatera var och en av dem separat även via OTA (över luften).
Mitt eget system, till exempel har 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV och en NodeMCU som delar en gemensam kodbas, så det är totalt 33 enheter att uppdatera när jag gör en enkel kod förändra.
Men det finns ett enklare sätt: En "uppdateringsserver". Den utmärkta Arduino IDE + ESP8266 -kärnan har ett bibliotek för att göra det mesta (ESP8266httpUpdate), men du måste veta hur du konfigurerar din egen server för att få det att fungera.
Denna instruktion visar dig hur du använder en NODE-RED-server, men samma logik gäller för vilken serverteknik som helst, t.ex. Apache + PHP etc.
Steg 1: Vad du behöver
- Arduino IDE
- ESP8266 kärna
- Alla ESP8266 dev -kort med 1M eller mer flashminne
- En webbserver (även en ödmjuk hallon Pi kommer att göra - det är vad jag använder)
- (valfritt) mkspiffs-verktyg om du vill uppdatera en SPIFFS-filsystembild automatiskt
Steg 2: Skapa ett arkiv för binära firmware
På min server har jag en mapp som heter/home/pi/trucFirmware som innehåller de olika enhetens firmware och SPIFFS -bilder
Jag behåller en separat binär för varje hårdvarutyp (från en enda källfil med några #defines) och när en ny version är klar använder jag Arduino IDE "sketch/Export compiled Binary" menykommando för varje målenhet. Observera att även även om det finns fem olika hårdvarutyper finns det bara två SPIFFS -binärer: en 1M och en 4M version - konstruerad med mkspiffs -verktyget - eftersom alla enheter har antingen 1M eller 4M blixt.
Steg 3: Skapa binärfilerna
Med hjälp av menyalternativet Arduino IDE sketch/Export Compiled Binary skapar du den inbyggda programvaran som laddas upp till enheten när den begär det från uppdateringsservern.
Om du behöver en SPIFFS -binär måste du installera mkspiffs -verktyget.
När du väl har det är det enkelt att bygga SPIFFS -binären. Jag har en enradig batchfil för 1M-versionen som tar versionsnumret som en parameter (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
och en annan för 4M -versionen:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Jag kopierar sedan alla de sammanställda binärfilerna och SPIFFS.binära filerna över till förvaret
Steg 4: Skapa serverflödet
Jag använder NODE-RED, men den enkla logiken kommer att vara densamma på vilken serverteknik / språk som helst.
a) Definiera en webbadress som kommer att lyssna efter begäran ESP8266httpUpdate. Min raspberryPi serevr är på 192.168.1.4 och lyssnar på port 1880 för /uppdatera med maskinvarutypen som bifogas. Så om jag ska begära en binär för en Wemos D1 Mini så hamnar webbadressen som:
192.168.1.4:1880/update/d1_mini
b) Skapa kod för att hantera följande logik:
ESP8266: "Hej, jag kör firmware -version a.b.c, har du en nyare version?" Server: "Låt mig se … ah ja jag har a.b.d - här kommer det …"
Om det finns en nyare version skickar servern den bara som en mängd binär data i http -svaret. ESP8266httpUpdate -klassen gör den knepiga delen av att kopiera binären till minnet, ändra firmware -startadressen till den nya koden än (om så önskas) starta om enheten för att köra den nya koden.
Om det däremot inte finns någon högre version, svarar den med ett http 304 -fel som faktiskt säger: "Jag har ingenting för dig" och din kod fortsätter att fungera som vanligt.
Steg 5: Lägg till serverlogiken
Den första noden i flödet "lyssnar" efter en http -begäran för att url https://192.168.1.4:1880/update med enhetstypen som bifogad. Den överför detta till funktionskoden "Konstruera sökväg" som har följande javascript -kod:
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"; } annat {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } returmeddelande;
Detta ställer bara in lämplig sökväg med jokertecken för sys -funktionen som följer, som helt enkelt körs
ls - r
Utmatningen matas sedan till funktionnoden "Jämför versioner":
var f = msg.payload.split ("\ n") [0]; msg.filnamn = f;
if (msg.mode == "skiss") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } annat {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.replace (/_ / dM \.bin/, ""); }
if (msg.version <f) {
node.warn ("uppgradering krävs");
node.warn ("returnerar"+msg.filnamn); returmeddelande; } node.warn ("ingen uppgradering"); msg.statusCode = 304; msg.payload = ;
returmeddelande;
Kopplingsnoden säkerställer sedan att antingen 304 "ingen uppdatering behövs" -meddelande skickas eller att den faktiska nya binären returneras och skickas tillbaka till enheten.
Steg 6: Lägg till kod i skissen för att begära en uppdatering
Skissen måste ha följande kod inkluderad i den så att den uppdateras automatiskt nästa gång du ökar versionsnumret:
#omfatta
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE ställs in tidigare beroende på olika kompileringstidsdefinitioner // som så småningom definierar hw-typen, t.ex. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // detta är min hallon Pi-server, 1880 är standard NODE-RED-port // /uppdatering är webbadressen jag valde för servern att "lyssna" efter, följt av enhetstypen … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); if (sketch) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // ***************** Detta är raden som "gör affären"} annars {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
återvända sant; } annat {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Uppgradering misslyckades");
}}} returnera false; }
Steg 7: Slutligen, initiera uppdateringen
Vid starttid, eller kanske som svar på ett MQTT -meddelande (som jag gör) kör följande kod:
if (_actualUpdate (true)) ESP.restart ();
// eller för SPIFFS …
if (_actualUpdate (false)) ESP.restart ();
Enheten uppdaterar sig själv och startar om med den senaste koden från servern. Det är mycket enklare för mig än att manuellt uppdatera 33 enheter!
Mycket mer användbar information om Hemautomation, IOT och programmering av ESP8266 finns på Min blogg
Rekommenderad:
Konfigurera Raspberry Pi 4 via bärbar dator/dator med Ethernet-kabel (ingen bildskärm, ingen Wi-Fi): 8 steg
Konfigurera Raspberry Pi 4 via bärbar dator/dator med Ethernet-kabel (ingen bildskärm, ingen Wi-Fi): I detta ska vi arbeta med Raspberry Pi 4 Model-B med 1 GB RAM för installationen. Raspberry-Pi är en enda kortdator som används för utbildningsändamål och DIY-projekt till en överkomlig kostnad, kräver en strömförsörjning på 5V 3A
Konfigurera Linux för Windows !: 12 steg
Konfigurera Linux för Windows !: Välkommen till instruktionsuppsättningen för att konfigurera Linux för Windows! Denna instruktionsuppsättning ska hjälpa nybörjare att kommandoraden konfigurera ett Ubuntu Linux-system på sin Windows-maskin och ansluta sina Windows-filer till sitt Linux-system. Linux subsys
Installera och konfigurera Shinken Network Monitor på Raspberry Pi: 14 steg
Installera och konfigurera Shinken Network Monitor på Raspberry Pi: OBS: shinken uppdaterades senast i mars 2016 till en stabil version av 2.4.3. Så för flera år sedan gick jag vidare till andra sätt att övervaka hemnätverk. Dessutom verkar php5 inte vara tillgänglig. Så använd inte denna instruerbara! Installera en
Konfigurera Raspberry Pi med Azure IoT Hub: 5 steg
Konfigurera Raspberry Pi med Azure IoT Hub: Syftet med denna instruerbara är att få praktisk praktisk exponering för möjligheterna i Azure IoT Hub. Artikeln omfattar registrering av Azure IoT Hub, konfigurering av en Raspberry Pi och anslutning av Pi med Azure IoT Hub för att skicka telemetri
Konfigurera webbinnehållsfiltrering i 4 steg med Ubuntu: 5 steg
Konfigurera webbinnehållsfiltrering i 4 steg med Ubuntu: Som IT -kille är en av de vanligaste sakerna som kollegor frågar mig hur de kan styra vilka webbplatser deras barn kan komma åt online. Detta är mycket enkelt att göra och gratis med Ubuntu linux, dansguardian och tinyproxy