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… ;-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
Wdrożenie Omnibusa w sklepie na WooCommerce
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
WordPress: Pierwsze kroki
Patryk