Spisu treści:
- Krok 1: Czego potrzebujesz
- Krok 2: Utwórz repozytorium do przechowywania binarnego oprogramowania układowego
- Krok 3: Utwórz pliki binarne
- Krok 4: Utwórz przepływ serwera
- Krok 5: Dodaj logikę serwera
- Krok 6: Dodaj kod do szkicu, aby poprosić o aktualizację
- Krok 7: Na koniec zainicjuj aktualizację
Wideo: Skonfiguruj serwer automatycznej aktualizacji ESP8266: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:33
Wiele osób używa obecnie ESP8266 w wielu wersjach (ESP-01S, Wemos D1, NodeMCU, Sonoff itp.) w systemach automatyki domowej. Jeśli napiszesz swój własny kod (tak jak ja) aktualizowanie każdego z nich osobno nawet przez OTA (over the air) staje się nieco nużące.
Mój własny system, na przykład, ma 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV i NodeMCU, które mają wspólną bazę kodów, więc to w sumie 33 urządzenia do aktualizacji, gdy wykonuję prosty kod reszta.
Ale jest prostszy sposób: „serwer aktualizacji”. Znakomity rdzeń Arduino IDE + ESP8266 ma bibliotekę do wykonywania większości pracy (ESP8266httpUpdate), ale musisz wiedzieć, jak skonfigurować własny serwer, aby działał.
Ta instrukcja pokazuje, jak korzystać z serwera NODE-RED, ale ta sama logika dotyczy dowolnej wybranej technologii serwerowej, np. Apache + PHP itp
Krok 1: Czego potrzebujesz
- IDE Arduino
- ESP8266 rdzeń
- Dowolna płyta deweloperska ESP8266 z 1M lub więcej pamięcią flash RAM
- Serwer WWW (nawet skromny Raspberry Pi - tego używam)
- (opcjonalnie) narzędzie mkspiffs, jeśli chcesz automatycznie zaktualizować obraz systemu plików SPIFFS
Krok 2: Utwórz repozytorium do przechowywania binarnego oprogramowania układowego
Na moim serwerze mam folder o nazwie /home/pi/trucFirmware, który zawiera różne oprogramowanie sprzętowe i obrazy SPIFFS
Utrzymuję osobny plik binarny dla każdego typu sprzętu (z jednego pliku źródłowego z kilkoma #definicjami), a kiedy nowa wersja jest gotowa, używam polecenia menu Arduino IDE „sketch/Export compiled Binary” dla każdego urządzenia docelowego. chociaż istnieje 5 różnych typów sprzętu, istnieją tylko dwa pliki binarne SPIFFS: wersja 1M i 4M - skonstruowane za pomocą narzędzia mkspiffs - ponieważ wszystkie urządzenia mają pamięć flash 1M lub 4M.
Krok 3: Utwórz pliki binarne
Korzystając z opcji menu Arduino IDE szkic/Eksportuj skompilowany plik binarny, utwórz oprogramowanie układowe, które zostanie przesłane do urządzenia, gdy zażąda tego z serwera aktualizacji.
Jeśli potrzebujesz pliku binarnego SPIFFS, musisz zainstalować narzędzie mkspiffs.
Kiedy już to zrobisz, zbudowanie pliku binarnego SPIFFS jest proste. Mam jednowierszowy plik wsadowy dla wersji 1M, który przyjmuje numer wersji jako parametr (%1)
mkspiffs -c dane/ spiffs_%1_1M.bin
i kolejny dla wersji 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c dane/ spiffs_%1_4M.bin
Następnie kopiuję wszystkie skompilowane pliki binarne i pliki SPIFFS.binary do repozytorium
Krok 4: Utwórz przepływ serwera
Używam NODE-RED, ale prosta logika będzie taka sama na każdej technologii/języku serwera.
a) Zdefiniuj adres URL, który będzie nasłuchiwał żądania ESP8266httpUpdate. Mój serwer raspberryPi jest na 192.168.1.4 i nasłuchuje na porcie 1880 dla /update z dołączonym typem sprzętu. Więc jeśli mam zamiar poprosić o plik binarny dla Wemos D1 Mini, adres URL kończy się jako:
192.168.1.4:1880/update/d1_mini
b) Utwórz kod do obsługi następującej logiki:
ESP8266: „Cześć, używam oprogramowania w wersji a.b.c, czy masz nowszą wersję?”
Jeśli nowsza wersja istnieje, serwer po prostu wysyła ją jako ładunek danych binarnych w odpowiedzi http. Klasa ESP8266httpUpdate wykonuje trudną część kopiowania pliku binarnego do pamięci, zmiany adresu rozruchowego oprogramowania układowego na nowy kod niż (jeśli jest to wymagane) ponownego uruchomienia urządzenia w celu uruchomienia nowego kodu.
Jeśli z drugiej strony nie ma wyższej wersji, odpowiada on błędem http 304, który skutecznie mówi: „Nie mam nic dla ciebie”, a Twój kod nadal działa normalnie.
Krok 5: Dodaj logikę serwera
Pierwszy węzeł w przepływie „nasłuchuje” żądania http na adres URL https://192.168.1.4:1880/update z dołączonym typem urządzenia. Przekazuje to do węzła funkcji „Construct search path”, który ma następujący kod javascript:
msg.type=msg.req.params.type;var h=msg.req.headers; msg.version=h["x-esp8266-wersja"];
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"; } zwróć wiadomość;
To po prostu ustawia odpowiednią ścieżkę z symbolem wieloznacznym dla następującej funkcji sys, która po prostu działa
ls - r
Dane wyjściowe są następnie przekazywane do węzła funkcji „Porównaj wersje”:
var f=msg.payload.split("\n")[0];msg.nazwapliku=f;
if(msg.mode=="szkic"){
f=f.replace("/home/pi/trucFirmowe/truc_", ""); f=f.replace(.ino."+msg.type+".bin", ""); } else { f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.zamień(/_\dM\.bin/, ""); }
if(wersja.komunikatu <f){
node.warn("wymagana aktualizacja");
node.warn("zwróci "+msg.filename); wiadomość zwrotna; } node.warn("bez aktualizacji"); msg.statusCode=304; msg.payload=;
wiadomość zwrotna;
Węzeł przełączający zapewnia następnie, że albo komunikat 304 „nie wymaga aktualizacji” albo zostanie zwrócony i odesłany z powrotem do urządzenia aktualny nowy plik binarny.
Krok 6: Dodaj kod do szkicu, aby poprosić o aktualizację
Szkic musi zawierać następujący kod, aby automatycznie aktualizował się przy następnym zwiększeniu numeru wersji:
#włączać
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// TO URZĄDZENIE jest ustawiane wcześniej w zależności od różnych definicji czasu kompilacji // które ostatecznie określają typ hw, np. #define THIS_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // to jest mój serwer raspberry Pi, 1880 to domyślny port NODE-RED // /update to adres URL, który wybrałem dla serwera do „nasłuchiwania”, a następnie typ urządzenia… bool currentUpdate(bool sketch=false) { Komunikat tekstowy; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(false); if(szkic){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** To jest wiersz, który „zajmuje się biznesem” } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf("AKTUALIZACJA UDAŁA SIĘ");
zwróć prawdę; } else { if(ret==HTTP_UPDATE_FAILED){
Serial.printf("Aktualizacja nie powiodła się");
} } } return false; }
Krok 7: Na koniec zainicjuj aktualizację
W czasie rozruchu, a może w odpowiedzi na komunikat MQTT (tak jak ja) uruchom następujący kod:
if(_actualUpdate(true)) ESP.restart();
// lub dla SPIFFS…
if(_actualUpdate(false)) ESP.restart();
Urządzenie zaktualizuje się i zrestartuje, uruchamiając najnowszy kod z serwera. To dla mnie o wiele prostsze niż ręczne aktualizowanie 33 urządzeń!
Dużo więcej przydatnych informacji na temat automatyki domowej, IOT i programowania ESP8266 można znaleźć na moim blogu
Zalecana:
Śledzenie aktualizacji Covid-19 za pomocą ESP8266: 9 kroków
Covid-19 Update Tracker za pomocą ESP8266: Jest to projekt pokazujący aktualne dane dotyczące epidemii koronawirusa w różnych miastach stanów Indii w czasie rzeczywistym na wyświetlaczu OLED. Ten monitor stanu na żywo pomaga monitorować w czasie rzeczywistym aktualizację covid-19 w Twojej dzielnicy. Ten projekt jest całkowicie b
Skonfiguruj własny serwer śledzenia GPS na Raspberry Pi: 8 kroków
Skonfiguruj swój własny serwer śledzenia GPS na Raspberry Pi: W tym projekcie pokażę ci, jak skonfigurować własny serwer śledzenia GPS na Raspberry Pi. Nie musi to być Raspberry pi, ponieważ oprogramowanie, którego będziemy używać do serwera śledzącego, jest dostępne również dla systemów Windows i Linux
Inteligentny system automatycznej analizy objętości: 4 kroki
Inteligentny system automatycznej analizy objętości: Celem jest stworzenie prototypu, który może analizować i identyfikować dwa różne kształty oraz wyświetlać ich objętość. Tutaj wybieramy sześcian i cylinder jako dwa różne kształty. Potrafi samodzielnie wykrywać kształty, analizować i obliczać objętość.Praca
System automatycznej blokady komputera: 4 kroki
System automatycznej blokady komputera: W tym samouczku zbadamy bezpieczeństwo blokady ekranu komputera. Systemy operacyjne mają konfigurowalny limit czasu, który blokuje ekran, jeśli użytkownik nie dotknął myszy lub klawiatury. Zwykle wartość domyślna wynosi około jednej minuty
Skonfiguruj swój własny serwer internetowy!: 12 kroków
Skonfiguruj swój własny serwer WWW!: Czy kiedykolwiek chciałeś mieć miejsce, w którym możesz przechowywać swoje pliki i mieć do nich dostęp wszędzie tam, gdzie masz połączenie z Internetem? Załóżmy, że chcesz mieć dostęp do swojej biblioteki muzycznej na wypadek, gdybyś chciał podarować piosenkę jednemu ze swoich znajomych, a może chciał