ESP8266, wgrywanie wsadu przez wifi
ArduinoOTA
lub inny mechanizm aktualizacji, a następnie wszystkie kolejne aktualizacje odbywają się już zdalnie po sieci. espota.py
, ESP Web Tools) pozwalające na masowe/batch-owe aktualizacje.Kluczowe punkty
• Pierwszy flash przez UART → kod z ArduinoOTA
.
• Stałe wołanie ArduinoOTA.handle()
w pętli loop()
.
• Urządzenie i komputer muszą być w tej samej podsieci, a port 8266 musi być otwarty.
• Zawsze ustaw hasło OTA lub użyj TLS/HTTPS.
• Rozmiar pliku BIN ≤ (Flash/2 − rez.) – przy 4 MB mamy ~1,8 MB.
ESP8266 posiada w pamięci Flash dwa równorzędne sloty (partition table typu dual-OTA), co umożliwia zapis nowej wersji w „drugiej połowie” pamięci, weryfikację CRC/MD5 i dopiero wtedy zmianę wskaźnika boot-loadera. Dzięki temu w razie przerwania transmisji istnieje możliwość powrotu (rollback) do poprzedniego obrazu.
Diagram uproszczony:
| Bootloader | OTA_0 (running) | OTA_1 (free) | SPIFFS/LittleFS |
↑
nowa wersja .bin
Po restarcie bootloader sprawdza flagę aktualizacji:
• OK → przełącza się na slot OTA_1;
• Błąd → wraca do OTA_0.
Minimalny szkic (wypełnij SSID, hasło i opcjonalnie hasło OTA):
#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>
const char* ssid = "SSID";
const char* pass = "PASSWORD";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
delay(5000); ESP.restart();
}
ArduinoOTA.setHostname("esp-lamp");
ArduinoOTA.setPassword("otaSecret"); // lub ArduinoOTA.setPasswordHash(MD5);
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle();
// normalny kod aplikacji
}
Wgrywanie:
espota.py
i portu 8266/udp.Przy wielu urządzeniach wygodniej jest, aby same pytały serwer o nową wersję, np. co 24 h:
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
void checkForUpdate() {
t_httpUpdate_return ret = ESPhttpUpdate.update(
"https://firmware.myserver.com/esp8266/build.bin");
if (ret == HTTP_UPDATE_OK) {
Serial.println("Update success, rebooting…");
}
}
Plusy: skalowalność i brak konieczności otwierania IDE. Minusy: potrzeba serwera i certyfikatów TLS (lub co najmniej Basic Auth).
platformio.ini
:
[env:nodemcu]
platform = espressif8266
board = nodemcu
framework = arduino
[env:nodemcu_ota]
extends = env:nodemcu
upload_protocol = espota
upload_port = 192.168.0.123
build_flags = -DOTA_PASS="otaSecret"
pio run -t upload -e nodemcu_ota
automatyzuje cały proces; można wywoływać w skryptach CI/CD.
espota.py -i <IP> -p 8266 -f build.bin -a otaSecret
(Python ≥3.7, w pakiecie esp-Arduino-core). setup()
w 8 s – automatyczny rollback.Problem | Przyczyna | Rozwiązanie |
---|---|---|
ESP nie pojawia się w „Portach sieciowych” | mDNS blokowany w routerze, Windows firewall | Otwórz UDP 5353, ewent. wpisz IP ręcznie w upload_port . |
Error[4] Begin Failed |
za mało miejsca w Flash (bin > slot) | Zmniejsz rozmiar FS, w opcjach wybierz FS: 1MB (OTA:~1.5MB) . |
Boot-loop po update | błędna inicjalizacja WiFi.begin() lub setup() |
Testuj kod na płytce deweloperskiej; dodaj „safe mode” GPIO. |
Update przerwany (≈50 %) | niestabilne zasilanie / Wi-Fi | Zasil ESP 3,3 V ≥500 mA, dodać kondensator 470 µF. |
Potencjalne przyszłe kierunki:
• Kompresja LZMA on-the-fly;
• Partycje A/B/C z auto-rollback (podobnie jak w ESP32-S3);
• Standard Open IOT-SAFE dla kluczy sprzętowych.
ArduinoOTA.handle()
nie może być blokowane; w krytycznych sekcjach użyj yield();
lub delay(0);
. ampy put firmware.py
albo mpremote mip install ota_updater
. product-<chipID>
) – upraszcza batch-update. Serial
, MQTT lub Syslog) – w razie zgłoszeń serwisowych masz historię. ESP.getSketchMD5()
i porównuj z serwerem.Źródła rekomendowane do dalszego studiowania:
• https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html
• https://mischianti.org/tag/ota-esp8266/
• rBoot-OTA: https://github.com/raburton/rboot
• Espressif Secure OTA: ESP8266_RTOS_SDK v3.4 docs, sekcja Secure Boot & Flash Encryption.
Aktualizacja ESP8266 przez Wi-Fi opiera się na mechanizmie OTA. Po jednorazowym „zaszczepieniu” kodu z biblioteką ArduinoOTA
możliwe jest bezkablowe wgrywanie kolejnych wersji – z IDE, skryptu CLI lub własnego serwera HTTP(S). Kluczowe jest zachowanie bezpieczeństwa (hasło, TLS, podpis cyfrowy), stabilnego zasilania i odpowiedniej wielkości partycji OTA. Dobrze zaprojektowany proces OTA zmniejsza koszty serwisu, przyspiesza rozwój oprogramowania i zwiększa satysfakcję użytkownika końcowego.