Obsah:

Nastavení serveru automatické aktualizace ESP8266: 7 kroků
Nastavení serveru automatické aktualizace ESP8266: 7 kroků

Video: Nastavení serveru automatické aktualizace ESP8266: 7 kroků

Video: Nastavení serveru automatické aktualizace ESP8266: 7 kroků
Video: Vzdálená správa. Jak přistupovat vzdáleně k počítači pomoci RAC Serveru. Krok 1. 2024, Červenec
Anonim
Nastavte server automatické aktualizace ESP8266
Nastavte server automatické aktualizace ESP8266

Mnoho lidí nyní používá ESP8266 v mnoha podobách (ESP-01S, Wemos D1, NodeMCU, Sonoff atd.) Pro systémy domácí automatizace. Pokud napíšete svůj vlastní kód (stejně jako já), bude aktualizace každého z nich samostatně i prostřednictvím OTA (bezdrátově) trochu zdlouhavé.

Můj vlastní systém má například 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV a NodeMCU, které sdílejí společnou kódovou základnu, takže celkem 33 zařízení se aktualizuje, když vytvořím jednoduchý kód změna.

Existuje však jednodušší způsob: „Aktualizační server“. Vynikající jádro Arduino IDE + ESP8266 má knihovnu pro většinu práce (ESP8266httpUpdate), ale potřebujete vědět, jak nastavit vlastní server, aby fungoval.

Tento Instructable vám ukáže, jak používat server NODE-RED, ale stejná logika platí pro jakoukoli serverovou technologii podle vašeho výběru, např. Apache + PHP atd

Krok 1: Co potřebujete

  1. Arduino IDE
  2. Jádro ESP8266
  3. Jakákoli deska ESP8266 pro vývojáře s 1M nebo více flash RAM
  4. Webový server (i skromný malinový Pi to udělá - to používám)
  5. (volitelně) nástroj mkspiffs, pokud chcete automaticky aktualizovat bitovou kopii systému souborů SPIFFS

Krok 2: Vytvořte úložiště pro uložení binárních firmwaru

Vytvořte úložiště pro uložení binárních firmwaru
Vytvořte úložiště pro uložení binárních firmwaru

Na mém serveru mám složku s názvem/home/pi/trucFirmware, která obsahuje různé firmwary zařízení a obrázky SPIFFS

Pro každý typ hardwaru udržuji samostatný binární soubor (z jednoho zdrojového souboru s několika #definicemi) a když je připraveno nové vydání, pro každé cílové zařízení použiji příkaz nabídky Arduino IDE „sketch/Export compiled Binary“. Všimněte si toho, že i přestože existuje 5 různých typů hardwaru, existují pouze dva binární soubory SPIFFS: 1M a 4M verze - vytvořená pomocí nástroje mkspiffs - protože všechna zařízení mají buď 1M nebo 4M flash.

Krok 3: Vytvořte binární soubory

Pomocí možnosti skica/Exportovat kompilovaný binární soubor z nabídky Arduino IDE vytvořte firmware, který bude nahrán do zařízení, když o to požádá aktualizační server.

Pokud potřebujete binární soubor SPIFFS, budete muset nainstalovat nástroj mkspiffs.

Jakmile to máte, sestavení binárního souboru SPIFFS je jednoduché. Mám jednořádkový dávkový soubor pro verzi 1M, který bere číslo parametru jako parametr (%1)

mkspiffs -c data/ spiffs_%1_1M.bin

a další pro verzi 4M:

mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin

Poté zkopíruji všechny zkompilované binární soubory a soubory.binary SPIFFS do úložiště

Krok 4: Vytvořte tok serveru

Vytvořte tok serveru
Vytvořte tok serveru

Používám NODE-RED, ale jednoduchá logika bude stejná pro jakoukoli serverovou technologii / jazyk.

a) Definujte URL, která bude naslouchat žádosti ESP8266httpUpdate. Můj raspberryPi serevr je na 192.168.1.4 a naslouchá na portu 1880 pro /aktualizaci s připojeným typem hardwaru. Pokud tedy budu požadovat binární soubor pro Wemos D1 Mini, adresa URL skončí takto:

192.168.1.4:1880/update/d1_mini

b) Vytvořte kód pro zpracování následující logiky:

ESP8266: „Ahoj, používám verzi firmwaru a.b.c, máš novější verzi?“Server: „Ukaž… ah ano, mám a.b.d - tady to přichází…“

Pokud existuje novější verze, server ji odešle jako zátěž binárních dat v odpovědi http. Třída ESP8266httpUpdate provádí složitou část kopírování binárního souboru do paměti a mění spouštěcí adresu firmwaru na nový kód, než (je -li požadováno) restartováním zařízení pro spuštění nového kódu.

Pokud na druhé straně neexistuje vyšší verze, odpoví chybou http 304, která efektivně říká: „Nemám pro tebe nic“a váš kód pokračuje v normálním provozu.

Krok 5: Přidejte logiku serveru

První uzel v toku „naslouchá“požadavku http na adresu URL https://192.168.1.4:1880/update s připojeným typem zařízení. Předává to funkčnímu uzlu „Vytvořit vyhledávací cestu“, který má následující kód 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 = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } vrátit zprávu;

Tím se nastaví příslušná cesta se zástupnými znaky pro následující funkci sys, která se jednoduše spustí

ls - r

Výstup je poté veden do funkčního uzlu „Porovnat verze“:

var f = msg.payload.split ("\ n") [0]; msg.filename = f;

if (msg.mode == "sketch") {

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 („nutná aktualizace“);

node.warn ("vrátí"+msg.filename); vrátit zprávu; } node.warn („žádný upgrade“); msg.statusCode = 304; msg.payload = ;

vrátit zprávu;

Přepínací uzel pak zajistí, že buď bude odeslána zpráva 304 „není nutná aktualizace“, nebo bude vrácen a odeslán zpět do zařízení skutečný nový binární soubor.

Krok 6: Přidejte kód do skici a požádejte o aktualizaci

Skica musí obsahovat následující kód, aby se automaticky aktualizoval při příštím zvýšení čísla verze:

#zahrnout

#define TRUC_VERSION "0_4_99"

#define SPIFFS_VERSION "0_5_0"

// THIS_DEVICE je nastaven dříve v závislosti na různých definicích času kompilace // které nakonec definují typ hw, např. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // toto je můj Raspberry Pi server, 1880 je výchozí NODE-RED port // /update je url, který jsem si vybral pro server "poslouchat", následovaný typem zařízení … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); if (skica) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // ***************** Toto je řádek, který "dělá byznys"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

return true; } else {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Upgrade se nezdařil");

}}} return false; }

Krok 7: Nakonec spusťte aktualizaci

Při spuštění nebo snad v reakci na zprávu MQTT (jako já) spusťte následující kód:

if (_actualUpdate (true)) ESP.restart ();

// nebo pro SPIFFS …

if (_actualUpdate (false)) ESP.restart ();

Zařízení se samo aktualizuje a restartuje spuštěním nejnovějšího kódu ze serveru. Je to pro mě mnohem jednodušší než ruční aktualizace 33 zařízení!

Spoustu dalších užitečných informací o domácí automatizaci, IOT a programování ESP8266 najdete na mém blogu

Doporučuje: