piątek, 11 listopada 2016

Aktualizacja oprogramowania układowego w ESP-01 do najnowszej wersji NodeMCU

Oprogramowanie i projekt NodeMCU cieszą się niesłabnącym zainteresowaniem świata konstruktorów urządzeń IoT, zatem co jakiś czas warto odświeżyć sobie firmware w naszych płytkach ESP. Osobiście jestem przeciwnikiem zmienienia czegoś, co dobrze działa, tylko dla zasady czy z chęci cieszenia się świadomością posiadania najnowszej wersji, ale tym razem chodzi jednak o coś innego – zwiększenie funkcjonalności i zapewnienie poprawnego działania oraz kompatybilności z najnowszymi projektami i bibliotekami.

W tytule tego artykułu jest mowa o najprostszych płytkach z układem ESP8266ESP-01. To właśnie w oparciu o ten model opracowałem płytkę prototypową, o której pisałem w poprzednim rozdziale. Dotychczas wszystkie moje płytki ESP miały na pokładzie oprogramowanie NodeMCU w wersji 0.9.5. Zorientowani choć trochę w temacie od razu zauważą (Google? Bing?), że wersja ta ma już co najmniej dwa lata... Najwyższy czas zatem na aktualizację.
Do aktualizacji trzeba się oczywiście przygotować, zatem:
  • płytkę ESP-01 łączymy z konwerterem USB-Serial tak, aby umożliwić bezproblemową komunikację przez port szeregowy (na krzyż TxD z RxD i wyrównujemy masy);
  • do ESP-01 podłączamy zasilanie z osobnego źródła, w miarę wydajnego – ja stosuję przetwornicę DC-DC dającą na wyjściu 3,3V/2A "napędzaną" zasilaczem stabilizowanym 9V, co stanowi konkretny zapas mocy; niektóre konwertery USB-Serial posiadają możliwość zasilania układów napięciem 3,3V i 5V, ale zwykle nie zapewniają odpowiedniej wydajności prądowej (liczby miliamperów);
  • wyprowadzenie CH_PD płytki ESP-01 podłączamy do zasilania (3,3V, inaczej: podajemy stan wysoki), zaś GPIO0 (G0) do masy.
W następnej kolejności pobieramy sobie dwa pliki: pierwszy, esp_init_data_default.bin (init data block – bardzo ważny!), ze strony https://github.com/espressif/ESP8266_AT/tree/master/bin. Kolejny plik to już właściwe oprogramowanie układowe NodeMCU. I tutaj mógłby być problem, ponieważ twórcy NodeMCU przestali publikować binarne wsady, co skazywałoby nas na walkę z przygotowaniem sobie środowiska do budowy pakietów oprogramowania dla ESP8266, jednak pojawił się ciekawy projekt – na stronie https://nodemcu-build.com/index.php mamy możliwość "zamówienia" sobie skompilowanej wersji najnowszego oprogramowania NodeMCU, zawierającego wszystkie moduły, na których nam zależy.
Podajemy więc nasz adres email, na który wysłane zostaną linki do binarnych wsadów i zaznaczamy pakiety (moduły), które chcemy mieć wkompilowane w oprogramowanie układowe. Do projektu mojej płytki prototypowej zalecam wybranie modułów (z gałęzi "master" projektu): file, GPIO, I2C, net, node, PWM, timer, UART i WiFi. Nie należy przesadzać z modułami, bo rozmiar wsadu może znacznie przekraczać pojemność pamięci flash ESP-01 (512kB zaledwie) i z aktualizacji oprogramowanie nic interesującego nie wyjdzie...
Po kilku(nastu) minutach powinniśmy dostać email zawierający linki do gotowych plików. Pobieramy plik nodemcu-*-float.bin.
Przyda nam się teraz oprogramowanie, za pomocą którego wgramy wsad do pamięci flash naszego układu. Osobiście polecam esptool – bardzo wygodne w obsłudze narzędzie uruchamiane z linii poleceń.
Oba pliki *.bin kopiujemy sobie do jednego folderu (dla porządku i wygody wyłącznie), podłączamy konwerter USB-Serial do wolnego gniazda USB w komputerze, włączamy zasilanie płytki ESP-01 (przygotowanej jak w opisie wyżej), sprawdzamy, jaką nazwę ma wirtualny port szeregowy konwertera (u mnie jest to np. /dev/ttyUSB0) i wydajemy polecenie (w przykładzie dostosowane do płytki ESP-01 i nadanych przeze mnie nazw plików), wcześniej resetując ESP-01 (G16 zwieramy na chwilę do masy):

esptool.py --port /dev/ttyUSB0 write_flash -fm qio -fs 4m 0x00000 nodemcu-i2c-float.bin 0x7c000 esp_init_data_default.bin

Po kilku krótkich chwilach oprogramowanie jest wgrane i gotowe do naszych eksperymentów. Żeby się przekonać, że wszystkie moduły (pakiety) zostały zainstalowane według naszych wskazań, wystarczy sprawdzić, co pojawi się w terminalu portu szeregowego na pececie (polecam np. CuteCOM) po wydaniu polecenia:

node.restart()

Pamiętać należy również, że w nowej wersji oprogramowania NodeMCU (numeru nie podaję – wiadomo, zmieni się zapewne wkrótce na wyższy ;)) szybkość transmisji portu szeregowego po stronie PC trzeba ustawić na 115200b/s, a nie jak w wersji NodeMCU 0.9.x – 9600b/s.

I to wszystko! Owocnych prób i udanych projektów – życzy autor :)

Przydatne linki:

2 komentarze:

  1. ESP-01 to mój podstawowy moduł do komunikacji ze światem zewnętrznym w połączeniu z NANO - jako baza dla BLYNK. Chętnie też stosuję D1 mini jako samodzielny procesor z BLYNK. Programuję w Arduino IDE i nie mam doświadczenia z NodeMCU i LUA.
    Jaka jest twoim zdaniem przewaga LUA nad Arduino IDE?
    pozdr
    K
    http://100-x-arduino.blogspot.com/

    OdpowiedzUsuń
    Odpowiedzi
    1. Szczerze mówiąc nie próbowałem nawet programować ESP-01 z poziomu Arduino IDE, więc raczej nie dam rady rzetelnie odpowiedzieć na to pytanie.

      Postanowiłem bawić się modułami NodeMCU korzystając z języka Lua głownie poprzez chęć wdrożenia się w kolejny język programowania. Interesująco wygląda też koncepcja NodeMCU, według której mam w pamięci układu do dyspozycji "przestrzeń dyskową" do przechowywania skryptów i możliwość uruchamiania kodu tych skryptów w dowolnym momencie (w szczególności przy uruchomieniu układu – z poziomu skryptu startowego/inicjującego). Nie sprawdzałem, jak to wygląda w Arduino IDE, ale – z drugiej strony – użycie znanego nam dobrze środowiska i języka programowania, tego samego, w którym programujemy pozostałe nasze płytki, może być bardzo pomocne w utrzymaniu pewnej dyscypliny i konsekwencji projektu.

      Usuń