Przejdź do głównej zawartości

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:

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ń
  2. Bardzo dobry wpis. Czekam na kolejne. Pozdrawiam :)
    ___________________
    Niskie ceny

    OdpowiedzUsuń
  3. Niestety obecnie coś im się chyba popsuło, bo nie działa float, zresztą oba pliki mają taką samą wielkość zarówno integer jak i float :-/

    OdpowiedzUsuń
  4. Anonimowy7.6.20

    Bardzo dobry wpis. Pozdrawiam serdecznie.

    OdpowiedzUsuń

Prześlij komentarz

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany. Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Płytka prototypowa na bazie ESP8266 (ESP-01)

To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266 . Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family . No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi . Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT , które budujemy w zaciszu domowych laboratoriów (i nie tylko). Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne

Programowanie AVR cz.8: Przetwornik analogowo-cyfrowy oraz modulacja szerokości impulsu.

Dziś kolejny wgląd w wyposażenie mikrokontrolera ATmega48P - tym razem przyglądamy się wbudowanemu w układ przetwornikowi analogowo-cyfrowemu oraz - dostępnej również w modelach ATtiny - modulacji szerokości impulsu realizowanej przez timery. Artykuł ten jest w pewnym sensie wstępem do następnego, który pojawi się już wkrótce, a którego tematykę zdradziłem na końcu. Przetwornik A-C (skrót spotykany w anglojęzycznej literaturze to ADC od Analog to Digital Converter ) to układ pozwalający na zamianę wartości napięcia (elektrycznego sygnału analogowego ;-)) na liczbę. W przypadku mojej ATmegi przetwornik ma rozdzielczość 10-bitową, co oznacza, że wartość napięcia podawanego na wejście przetwornika może być po konwersji zapisana jako liczba z przedziału od 0 do 1023 (musimy użyć zmiennej word do zapamiętania tej liczby). Jeśli jesteśmy w posiadaniu mikrokontrolera w obudowie PDIP 28-wyprowadzeniowej, to mamy do dyspozycji sześć kanałów (niezależnych wejść) przetwornika A-C, przyporzą