Kupując układ ESP8266 otrzymujemy w zależności od źródła zakupu wgrane różne wersje firmware. Czasami jest to starsza wersja, która nie ma zaimplementowanych wszystkich wymaganych (przez nas) komend AT, innym razem sprzedawca wgrywa oprogramowanie testowe, które pozwala nam stwierdzić, że zakupiony układ działa prawidłowo. Niezależnie od okoliczności często zdarza się, że będziemy musieli wymienić firmware znajdujący się w układzie. Nie jest to operacja trudna, ale warto wiedzieć jak to wykonać prawidłowo. 

Na wielu stronach internetowych możemy odnaleźć dłuższe, lub krótsze opisy aktualizacji firmware do ESP8266. Tekst poniżej wniesie niewiele do ogólnej wiedzy z sieci, ale umieszczam go, bo chciałbym w jednym miejscu zebrać jak najwięcej przydatnych informacji o naszym układzie. To co jest istotne, to musimy się liczyć z ewentualnością uszkodzenia układu podczas aktualizacji oprogramowania. Zdarza się to bardzo rzadko, ale jednak przy złożeniu kilku okoliczności może nam się udać uszkodzić posiadany układ. Z tego powodu tradycyjnie przypominam, że wszystkie działania wykonujecie na własną odpowiedzialność.

W zależności od wykorzystywanego systemu operacyjnego aktualizacji możemy dokonać na kolka sposobów. W sieci można odnaleźć wiele narzędzi do wgrania nowego firmware. Jest również możliwość wykonania aktualizacji z poziomu komend AT. Nie polecam tego sposobu, ponieważ jest on zawodny i może najszybciej doprowadzić do zablokowania układu. Na wielu stronach przestrzegają przed tym sposobem wgrywania oprogramowania. Mi osobiście udało się raz zmodyfikować oprogramowanie układu ESP-01 z wykorzystaniem komend AT, a raz "udało się" taki układ bezpowrotnie uszkodzić... Z tego powodu nie będę poniżej opisywał procedury aktualizacji z wykorzystaniem komend AT.

Zanim przystąpimy do aktualizacji firmware należy zaopatrzyć się w jego najnowszą wersję. Możemy wgrać oprogramowanie umożliwiające korzystanie z ESP8266 z wykorzystaniem komend AT, które możemy pobrać z Espressif Systems - GitHub, lub bezpośrednio z Espressif Systems (z nieznanych i przyczyn na GitHub nie ma już najnowszej wersji). Drugim przydatnym oprogramowaniem może być NodeMCU. Pierwszy link prowadzi do plików .bin, które są niezbędne do wgrania, drugi to generator niezbędnych plików przesyłanych na adres mailowy. Dodatkowo w sieci możemy odnaleźć różne modyfikacje firmware. Niezależnie od rodzaju firmware musimy dysponować oprogramowaniem narzędziowym, które umożliwi wgranie danych do naszego układu. Jak już pisałem powyżej możliwości jest wiele, poniżej przedstawię trzy z nich. Wgrywane przykładowe pliki pochodzą z GitHub (należy zawsze sprawdzać plik readme, w którym autorzy podają adresy do wgrania poszczególnych plików).

ESP Flash Download Tool

Użytkownicy systemów operacyjnych rodziny Windows mogą skorzystać z programu ESP Flash Download Tool. W pierwszej kolejności ściągamy program progran ze strony Espressif. Po rozpakowaniu i uruchomieniu zobaczymy program gotowy do pracy. Następnie ściągamy interesujący nas firmware. W przypadku Espressif Systems będą to pliki:

  • boot_v1.1.bin
  • user1.bin
  • esp_init_data_default.bin
  • blank.bin

dodatkowo należy przeczytać plik readme.txt, w którym podano adresy pod jakie należy wgrać poszczególne pliki .bin.

Dysponując plikami oraz wiedzą o adresach możemy przejść do konfiguracji parametrów programu. Wskazujemy lokalizację poszczególnych plików (jak pokazano na rysunku poniżej), a dla każdego z nich ustawiamy adres od którego ma zostać wgrany (w przypadku przykładowego firmware plik boot_v1.1.bin offset 0x00000, user1.bin offset 0x01000, esp__init_data_default.bin offset 0x7C000, blank.bin offset 0x7E000). Ustawiamy port szeregowy, do którego podłączony jest układ ESP i możemy rozpocząć wgrywanie firmware poprzez naciśnięcie przycisku START.

... i ... nic się nie wydarzyło... musimy jeszcze zaznaczyć haczyki po lewej stronie nazw wybranych plików do wgrania. W tym momencie od strony programu wszystko jest już ustawione prawidłowo. Pozostał jeszcze jeden mały drobiazg po stronie sprzętowej. Wgranie nowego oprogramowania do układu jest możliwe po zwarciu pinu GPIO0 do masy. W zależności od wersji układu ESP należy to wykonać na płytce, nacisnąć odpowiedni przycisk, lub zostanie to wykonane automatycznie. W przypadku układów, do których mam dostęp (ESP-01, ESP-12E) należało wykonać takie połączenie samodzielnie. Układ testowy oznaczony jako NodeMCU posiada natomiast przycisk wlutowany w płytkę. Teraz możemy nacisnąć przycisk START w programie i wgrać zawartość plików do układu ESP jak pokazano na rysunku poniżej.

Jeżeli wszystkie czynności zostały wykonane prawidłowo po chwili dysponujemy układem ESP8266 z wgranym nowym oprogramowaniem.

NodeMCU Firmware Programmer

 NodeMCU Firmware Programmer to kolejny program dla użytkowników systemu Windows, który umożliwia wgranie firmware do układów ESP8266. Możemy go pobrać ze strony projektu. W tym programie również należy wskazać lokalizację poszczególnych plików na dysku oraz ich offset, czyli adresy od których mają zostać wgrane. Na rysunku poniżej pokazano wygląd programu wraz z ustawionymi ścieżkami do wgrywanych plików oraz ich adresami w pamięci układu.

Jak widać to również należy zaznaczyć, który ze wskazanych plików ma zostać wgrany poprzez zaznaczenie "X" przy danej pozycji. Korzystając z programu należy również pamiętać o podłączeniu linii GPIO0 do masy, lub naciśnięciu przycisku "FLASH" w programowanym układzie.

W celu zaprogramowania układu wybieramy odpowiedni port szeregowy i naciskamy przycisk "FLASH". Na pasku postępu będziemy mogli obserwować ile pozostało do końca operacji, a przycisk "FLASH" zmieni swój opis na "STOP" do czasu zaprogramowania ESP8266. Poniżej pokazano aplikację w trakcie wgrywania firmware do układu.

Wybór pomiędzy aplikacjami do wgrywania firmware zależy od gustu użytkownika. Testowałem obie i poza wyglądem nie zauważyłem istotnych różnic. Użytkownicy systemów z rodziny Linux mają nieco gorszą sytuację, ponieważ muszą skorzystać z narzędzia, które nie jest tak poręczne jak opisywane powyżej. Na szczęście użytkownicy Linuksa są do takich rozwiązań przyzwyczajeni. :)

ESPTOOL.PY

Esptool to narzędzie napisane w języku Python, które można uruchomić w systemach rodziny Linux, Windows a nawet OS X. Użytkownikom Windows polecam jeden z programów opisanych powyżej. Z OS X nie miałem do czynienia jako użytkownik, który robi w tym systemie coś poważniejszego. Skupię się więc na Linuksie i wykorzystaniu narzędzia esptol w tym systemie. Najprostszą metodą instalacji esptool jest skorzystanie z menedżera pakietów napisanych w języku Python. Menedżer ten nazywa się pip. Instalacja menedżera odbywa się przez wydanie polecenia (oczywiście Debian, Ubuntu i pochodne):

apt-get install python-pip

Dysponując zainstalowanym pakietem pip możemy przejść do instalacji narzędzia esptool. W tym celu wydajemy polecenie:

pip install esptool

Dysponując zainstalowanym pakietem możemy przejść do właściwej części, czyli aktualizacji firmware. Wykonujemy to poprzez wydanie polecenia:

esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 boot_v1.1.bin 0x01000 user1.bin 0x41000 user2.bin 0x7c000 esp_init_data_default.bin 0x7e000 blank.bin

Kilka słów wyjaśnienia dotyczącego składni esptool.py. Tak samo jak w programach graficznych musimy wybrać port, do którego podłączono układ ESP. Oczywiście w przykładzie jest nazwa portu podana w linuksowy sposób, gdyby ktoś uruchomił esptool.py w systemie Windows musiałby zamiast /dev/ttyUSB0 podać COM3 (czy inny COM do którego podłączono układ). Opcja --baud pozwala na ustawienie prędkości przesyłania danych do układu domyślnie 115200bps. Write_flash informuje, że będziemy wgrywać do urządzenia dane, a następnie podajemy pary: offset i nazwa_pliku do wgrania. Linuksiarzom nie powinno się o tym przypominać, bo to oczywiste, ale polecenie musimy wydać z pozycji katalogu, w którym znajdują się pliki do wgrania. Gdybyśmy chcieli wydać polecenie z innej pozycji, to nazwy plików muszą być podane jako ścieżki bezwzględne, lub względne (w stosunku do bieżącego katalogu). Poniżej przedstawię kilka przydatnych dodatkowych możliwości esptool:

esptool.py verify_flash 0x40000 my_app.elf-0x40000.bin  
// weryfikacja wgranego oprogramowania
esptool.py read_mac 
// odczyt adresu MAC układu ESP
esptool.py flash_id 
// odczyt id producenta FLASH
esptool.py dump_mem 0x40000000 65536 iram0.bin 
// zrzut pamięci do pliku

Jak widać z powyższego artykułu mamy wiele możliwości aktualizacji firmware w układach ESP8266. Z którego narzędzia skorzystamy zależy tylko od naszego upodobania.

Ewentualne problemy

A co zrobić, jeżeli firmware nie chce się wgrać? Powodów może być wiele, ale zawsze należy zacząć od sprawdzenia poprawności połączeń. Częstym powodem problemów z wgrywaniem jest przycisk FLASH. Pamiętajmy, że naciśnięcie przycisku FLASH spowoduje przejście do trybu wgrywania tylko podczas uruchomienia układu, lub jego restartu. Co to oznacza w praktyce? Przed rozpoczęciem wgrywania firmware należy nacisnąć przycisk FLASH, a następnie trzymając go nacisnąć i zwolnić przycisk RESET. Dopiero wtedy (ciągle trzymając FLASH) należy rozpocząć wgrywanie oprogramowania. W przypadku układów, gdzie nie ma przycisku FLASH należy zadbać o to, aby linia GPIO0 byłą połączona z masą przed załączeniem zasilania.