Z różnych układów ESP8266 korzystam od dawna. Od niedawna zacząłem wykorzystywać też nowsze układy ESP32. Dodatkowo od jakiegoś czasu korzystam z Home Assistant, gdzie przenoszę zarządzanie większością elementów tzw. „inteligentnego domu” (sic! ;-)), a więc i wcześniej działające najczęściej na autorskim kodzie układy ESP migruję do ESPHome (poza BrewPiLess i iSpindel, ale to inna bajka). I choć w większości przypadków ta migracja jest nie tylko bezproblemowa, to jeszcze jestem pozytywnie zaskoczony wygoda pracy z ESPHome, nie tylko w połączeniu z Home Assistant (tylko ten nieszczęsny YAML i zabawa ze spacjami… ;-)). Nie oznacza to jednak, że nie pojawiają się problemy wyzwania…
Czyszczenie pamięci ESP8266 i ESP32 i wgrywanie nowego oprogramowania za pomocą programu esptool
I tak kilka dni temu do portfolio moich układów bazujących na ESP8266 dołączyły 3 płytki ESP-01S, oraz 2 płytki bazujące na ESP32, konkretnie ESP32 S2 mini. I wraz z przybyciem tych płytek, zaczęły się schody…
ESP32 S2 mini jakby nie bardzo chciała współpracować z oprogramowaniem wgrywanym przez ESPHome z opcją „arduino”, a znowu zalecane „esp-idf” powodowało błąd kompilacji na Raspberry Pi, na którym stoi ESPHome (Docker), bo system arm64, a jakaś tam biblioteka dostępna tylko w wersji arm32. Do przeskoczenia np. za pomocą wirtualnej maszyny, ale komfort tego na dłuższą metę średni, więc szukałem innej metody.
Oprogramowanie ESPHome dla ESP-01S kompilowało się bez problemów, ale próba wgrywanie (aktualizacja) w ramach mechanizmu OTA (przez sieć WiFi) kończyła się komunikatem:
ERROR Error binary size: Error: ESP has been flashed with wrong flash size. Please choose the correct 'board’ option (esp01_1m always works) and then flash over USB.
Choć układ na pewno ESP-01S, na pewno też z 1 MB pamięć, a nie 512 kB, a do tego w konfiguracji oczywiście „esp01_1m” zdefiniowane.
I tak kombinując, by znaleźć rozwiązania dla niezależnych problemów, z dwoma różnymi układami (ESP8266 i ESP32), na dwóch różnych płytkach (ESP-01S i ESP32 S2 mini) ostatecznie znalazłem jedno, wspólne rozwiązanie, a konkretnie program esptool od espressif, czyli twórców układów ESP, a który jest dostępny na GitHubie.
Z tym że nie sztuką byłoby wgrywać kolejne wersje oprogramowania za pomocą tego programu na płytki ESP, bo to dalekie o wygody, zwłaszcza gdy znajdą się już w gotowych układach. Wtedy jednak chyba tylko aktualizacje przez OTA mają sens. Kilka testów i udało mi się wypracować powtarzalną procedurę działania, po której nie tylko ESPHome na oby układach działa, ale działają też aktualizację przez WiFi (OTA)
Zaczynamy od przełączenia układów w tryb flashowania i podłączenia do komputera (lub podłączenia do komputera i przełączenia w tryb flashowania):
- ESP-01S: łączymy z programatorem TX -> RX, RX -> TX, 3.3V -> 3.3V, GND -> GND, oraz dodatkowo IO0 -> GND, podłączamy do USB
- ESP32 S2 mini: podłączamy do USB, naciskamy i przytrzymujemy przycisk 0 (O), naciskamy i puszczamy RST, puszczamy 0 (O)
Kolejny krok, to sprawdzenie, pod jakim portem szeregowym (COM) układ się zgłosi, można to zrobić np. za pomocą menedżera urządzeń w systemie Windows (tak, Linux to u mnie serwery, codzienna praca to Windows):
Wszystkie 3 sztuki ESP-01S zgłaszały mi się na porcie COM8, a 2 sztuki ESP32 S mini na COM9 (w trybie flashowania).
Gdy port ustalony, program pobrany i rozpakowany, otwieramy wiersz poleceń i zaczynamy od… całkowitego czyszczenia pamięci układu, Brzmi ryzykownie, może brutalnie, ale z testów wyszło, że ten krok jest kluczowy:
esptool -p COM8 erase_flash
Jeśli wszystko jest OK, to po chwili program wyświetli podstawowe informacje na temat podłączonej płytki, oraz przeprowadzi czyszczenie pamięci:
W kolejnym kroku generujemy wsad (oprogramowanie) w ESPHome, wybierając ręczną instalację (manual download) oraz nowy format pliku (modern format):
Najwygodniej wygenerowany i zapisany na komputerze plik przenieść do katalogu z program esptool, ja dla ułatwienia przy okazji zmieniłem nazwę na flash.bin (czasem korzystam ze skryptu BAT), W tym momencie można skorzystać z kolejnego polecenia, tym razem wgrywającego oprogramowanie na płytkę:
esptool -p COM8 write_flash 0x000000 flash.bin
Chwila czekania i oprogramowanie powinno zostać wgrane:
Na koniec nie zostaje nic innego, jak sprawdzić, czy aktualizacje OTA działają:
A po wielu testach na kilku egzemplarzach każdej płytki wiem, że działają, tak samo, jak oprogramowanie. Do tego jest to bardzo prosta, powtarzalna metoda, która u mnie zadziałała w 100%, a zapewniam, że wiedząc, że pewnie powstanie z tego artykuł, przetestowałem naprawdę wiele różnych metod.
No i pamiętaj, że to, że u mnie działa, nie znaczy, że daję Ci gwarancję, że tak będzie też u Ciebie. Dlatego jak to w życiu bywa – wszystko robisz na własną odpowiedzialność, na własne ryzyko… ;-)
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01