NodeMCU – aktualizacje OTA

Wyobraźcie sobie sytuację, w której kończycie projekt na NodeMCU, pakujecie go w ładną obudowę i montujecie tam, gdzie ma być używany. Po jakimś czasie okazuje się, że coś działa nie tak jak powinno lub chcielibyście dodać nową funkcjonalność do oprogramowania. Trzeba wtedy zdemontować urządzenie, wyjąć z obudowy, podłączyć do komputera i wgrać nowy flash. Takim sytuacjom zapobiec może tryb aktualizacji OTA (ang. over the air), o którym będzie dzisiejszy artykuł.

Co to OTA?

Aktualizacja OTA polega na wgraniu nowego firmware poprzez WiFi. Jeżeli nasze urządzenie na NodeMCU jest połączone do tej samej sieci bezprzewodowej, co my oraz ma wgrany odpowiedni firmware umożliwiający aktualizację OTA to możemy bez trudu wgrać na niego nowy soft bez demontowania całego układu.

Gdzie jest haczyk?

Żeby nie było zbyt idealnie to jest też pewna wada stosowania aktualizacji OTA. Aby wszystko przebiegło pomyślnie nasz szkic musi być nie większy niż połowa oferowanej przez NodeMCU pojemności. To dlatego, że przy takiej aktualizacji najpierw nowe oprogramowanie zapisywane jest do pamięci, a następnie zmieniany jest adres w pamięci z którego bootloader esp8266 ma wczytywać program. Powoduje to, że nasza pamięć musi pomieścić w pewnym momencie aż 2 pełne programy.

Jak przygotować się do aktualizacji

Mikrokontroler

Jeżeli chodzi o przygotowanie mikrokontrolera to wystarczy wgrać szkic BasicOTA z menu PlikPrzykładyArduino OTA, a następnie dopisać do niego swój program (przy czym należy pamiętać, żeby funkcja loop() nie była nigdzie blokowana żadnymi delay’ami).

Komputer

Python

Odpowiednio przygotowany musi być także komputer z którego będziemy dokonywali aktualizacji. Po pierwsze musimy mieć zainstalowanego Pythona z gałęzi 2.x (Python 3.x nie jest wspierany). Na komputerze z linuxem / macOSem python powinien być już preinstalowany. Jeżeli mamy Windowsa, to instalator możemy pobrać stąd.

Należy pamiętać, aby podczas instalacji dodać pythona do zmiennej PATH.

Żeby sprawdzić, czy python zainstalował się poprawnie wystarczy w cmd wpisać polecenie python.

Obsługa mDNS

NodeMCU będzie rozgłaszało swoją nazwę poprzez usługę mDNS, dlatego też nasz komputer musi ją obsługiwać. Ponownie na komputeraz z macOS oraz linux nie będzie problemu, gdyż na tych pierwszych obsługa mDNS jest wbudowana w system, a na drugich zwykle jest preinstalowany pakiet avahi. Jeżeli jesteśmy użytkownikami Windowsa, to możemy zainstalować program o nazwie Bonjour stąd.

Proces aktualizacji

Aby rozpocząć aktualizację należy wybrać z menu Narzędzia Port nasze esp8266, a następnie wcisnąc przycisk flashowania tak jakbyśmy wgrywali program normalnie przez USB.

Zostaniemy zapytani o hasło. Jeżeli nie ustalaliśmy żadnego hasła to zostawimy pole puste i wybieramy OK.

Po wszystkim nowy program zostanie załądowany na płytkę:

Jak widać po logu miałem pewne problemy z autoryzacją. Po kilku próbach udało się jednak poprawnie autoryzować i wgrać program (kolejne flashowania nie sprawiały już żadnych problemów).

Ważna uwaga: Przy wygrywaniu nowego oprogramowania należy pamiętać, żeby ten nowy firmware także obsługiwał aktualizację OTA. Możemy co prawda wgrać zwykły program, ale stracimy wtedy możliwośc aktualizacji softu przez WiFi.