SantyagoSantyago
YouTube RSS Google+ Facebook GitHub

Newsletter Arduino

Zapisz się do Newslettera, aby otrzymać informację o nowych wpsiach w dziale Arduino!

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Sprzęt dostarczają

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Popularne wpisy

Facebook

Google+

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

NodeMCU v2 - idealna płytka dla IoT

NodeMCU v2 jest płytką, która wykorzystuje cieszący się zasłużoną sławą układ ESP8266. Jeśli przyjrzymy się mu bliżej zauważymy, że wykorzystuje on najnowszą jego wersję w postaci 22 pinowego moduł ESP12E z wbudowanym 32-bitowym układem RISC taktowanym zegarem 80MHz. W odróżnieniu od standardowej wersji ESP12 wyróżnia się 10 portami GPIO, 2 portami UART oraz jednym 10-bitowym wejściem ADC. Każdy z portów GPIO może być wykorzystany jako PWM, I2c, SPI lub 1-Wire. NodeMCU v2 który otrzymałem do testów dzięki uprzejmości sklepu elty.pl można kupić za cenę 60 zł.

Jeśli nie znacie jeszcze rodziny układów ESP8266, to pewnie nie robi na Was większego wrażenia, dlatego musicie jeszcze wiedzieć, że układ ten posiada sporo niespodzianek. Najważniejszą jego cechą jest obsługa sieci Wi-Fi w standardach 802.11 b/g/n pracujących z częstotliwością 2,4 GHz. Posiada również wbudowany stos TPC/IP i  może działać w trybach AP (Access Point), STA (standalone) oraz AP+STA. Dodatkowo dostajemy również wbudowany czujnik temperatury oraz wsparcie dla CCMP, TKIP, WEP, CRC, WPA/WPA2 i WPS.

Maksymalny pobór prądu podczas pracy w sieci Wi-Fi zależy od wersji w której pracuje. Kolejno są to: 215mA (b), 197mA (g) oraz 135ma (n). Obowiązuje tutaj logika na poziomie 3.3V, a maksymalne obciążenie I/O to 12mA.

Moduł NodeMCU v2 został wyposażony w stabilizator napięcia 3.3V oraz konwerter USB-to-UART CP2120, dzięki czemu jest możliwe zasilenie i programowanie płytki bezpośrednio z portu USB.

Programowanie płytki może odbywać się za pomocą języka skryptowego Lua lub za pomocą Arduino IDE. Domyślnie płytka dostarczana jest z wgranym firmware w wersji 0.9.5 dla tego pierwszego. Dlatego w pierwszej kolejności zajmiemy się właśnie tym sposobem.

Aktualizacja firmware:

Na początek zaktualizujemy sobie firmware. Możemy pobrać do tego całe drzewo repozytorium nodemcu-firmware.git lub pobrać plik samodzielnie: nodemcu_20150216.bin (0.9.6)

  1. github clone https://github.com/nodemcu/nodemcu-firmware.git
  2. cd nodemcu-firmware.git
  3. tools/esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 32m -ff 40m 0x00000 pre_build/0.9.6/nodemcu_20150216.bin

NodeMCU v2 automatycznie przejdzie w tryb aktualizacji firmware i rozpocznie się proces wgrywania. Gdyby tak się jednak nie działo, zalecane jest przed wgraniem firmware przytrzymanie przycisku FLASH i naciśnięcie RESET.

Connecting...
Erasing flash...
Writing at 0x0004f800... (62 %)

Użytkownicy systemu Windows, mogą skorzystać z dedykowanej aplikacji nodemcu-flasher

Po tym zabiegu, będziemy mogli połączyć się dowolną konsolą szeregową do naszego NodeMCU - na przykład korzystając z programu minicom.

  1. minicom -D /dev/ttyUSB0 -b 9600

Po wydaniu polecenia node.restart() powinniśmy ujrzeć komunikat o wersji oraz informację o braku skryptu init.lua, który jest wykonywany przy uruchomieniu.

;

Spróbujmy czegoś prostego. Podepniemy pod timer wyświetlanie tekstu "test" co jedną sekundę. Wpisujemy z "palca":

  1. tmr.alarm(0, 1000, 1, function()
  2. print("test")
  3. end)

Wynikiem będzie cykliczne wyświetlanie tekstu "test".

Spróbujmy czegoś ciekawszego - połączymy się z siecią Wi-FI:

  1. wifi.setmode(wifi.STATION)
  2. wifi.sta.config("SSID","HASLO")
  3. print(wifi.sta.getip())

Skoro mamy połączenie z siecią, może malutki serwerek?

  1. srv=net.createServer(net.TCP)
  2. srv:listen(80,function(conn)
  3. conn:on("receive",function(conn,payload)
  4. conn:send("<h1>No siema!</h1>")
  5. conn:close()
  6. end)
  7. end)

Po wpisaniu adresu IP naszego NodeMCU w przeglądarce ujrzymy spodziewane powitanie:

A co z GPIO? To również bardzo proste. Spróbujemy zapalić niebieską diodę modułu. podłączoną do D4:

  1. gpio.mode(4,gpio.OUTPUT)
  2. gpio.write(4,gpio.LOW)

Analogicznie możemy odczytać stan podanego pinu:

  1. gpio.mode(4,gpio.INPUT)
  2. print(gpio.read(4))

Jak wspomniałem wcześniej, podczas uruchamiania, automatycznie wykonywany jest pliki init.lua. Musimy go zatem utworzyć i zapisać do niego nasz program. Np.: print("Boot!")

  1. file.open("init.lua","w")
  2. file.writeline([[print("Boot!")]])
  3. file.close()
  4. node.restart()

Po restarcie za pomocą polecnia node.restart() przy każdym włączeniu będzie pojawiał się komunikat "Boot!"

Plik możemy usunąć poleceniem file.remove("init.lua") lub sformatować pamięć poleceniem file.format(), usuwając tym samym wszystkie pliki.

Lua daje ogromne możliwości, a pełne API znajdziecie tutaj: https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_en

ESPlorer - wygodne IDE w Java lub Luatool

Pisanie programów za pomocą konsoli szeregowej jest oczywiście mało wygodne, dlatego z pomocą przyjdzie nam program ESPlorer. Działa na każdej platformie z zainstalowanym pakietem Java.

Dzięki niemu możemy wgrać program metodą "linia po linii" lub przesłać cały edytowany plik o podanej nazwie. Przykładowo program mrugający diodą co 500ms:

  1. gpio.mode(4,gpio.OUTPUT)
  2.  
  3. state = 0
  4.  
  5. tmr.alarm(0, 500, 1, function()
  6.     if (state==0) then
  7.         state = 1
  8.         gpio.write(4, gpio.HIGH)
  9.         else
  10.         state = 0
  11.         gpio.write(4, gpio.LOW)     
  12.     end
  13. end)

Alternatywnie możemy skorzystać z prostego narzędzia luatool: https://github.com/4refr0nt/luatool

  1. ./luatool.py --port /dev/ttyUSB0 --src file.lua --dest main.lua --baud 9600

Arduino IDE dla tradycjonalistów

NodeMCU v2 możemy również programować za pomocą Arduino IDE i znanej nam doskonale składni. W tym celu musimy zaopatrzyć się IDE w wersji >=1.6.4, gdzie wywołując okno ustawień "File > Preferences" wpisujemy dodatkowy adres URL dla menadżera płytek:

  1. http://arduino.esp8266.com/staging/package_esp8266com_index.json

Następnie z menu "Board > Boards Manager" instalujemy pakiet dla płytek zgodnych z esp8266:

Teraz wystarczy już tylko wybrać płytkę NodeMCU 1.0, częstotliwość 80MHz (lub podwojoną 160MHz), prędkość UART 115200 i wgrać nasz program. Tutaj mapowanie pinu niebieskiej diody jest trochę inne:

Skoro już tu jesteśmy, sprawdzimy jak radzi sobie nasz mały benchmark do kalkulacji liczby Pi przy milionie iteracji:

  1.     #define ITERATIONS 1000000L    // number of iterations
  2.     #define FLASH 10000            // blink LED every 1000 iterations
  3.      
  4.     void setup() {
  5.       pinMode(2, OUTPUT);         // set the LED up to blink every 1000 iterations
  6.       Serial.begin(115200);
  7.     }
  8.      
  9.     void loop() {
  10.      
  11.       unsigned long start, time;
  12.       unsigned long niter=ITERATIONS;
  13.       int LEDcounter = 0;
  14.       boolean alternate = false;
  15.       unsigned long i, count=0;
  16.       float x = 1.0;
  17.       float temp, pi=1.0;
  18.      
  19.       Serial.print("Beginning ");
  20.       Serial.print(niter);
  21.       Serial.println(" iterations...");
  22.       Serial.println();
  23.      
  24.       start = millis();  
  25.       for ( i = 2; i < niter; i++) {
  26.         x *= -1.0;
  27.         pi += x / (2.0f*(float)i-1.0f);
  28.         if (LEDcounter++ > FLASH) {
  29.           LEDcounter = 0;
  30.           if (alternate) {
  31.             digitalWrite(2, HIGH);
  32.             alternate = false;
  33.           } else {
  34.             digitalWrite(2, LOW);
  35.             alternate = true;
  36.           }
  37.           delay(1);
  38.         }
  39.       }
  40.       time = millis() - start;
  41.      
  42.       pi = pi * 4.0;
  43.      
  44.       Serial.print("# of trials = ");
  45.       Serial.println(niter);
  46.       Serial.print("Estimate of pi = ");
  47.       Serial.println(pi, 10);
  48.      
  49.       Serial.print("Time: ");
  50.       Serial.print(time);
  51.       Serial.println(" ms");
  52.      
  53.       delay(10000);
  54.     }

Wyniki dla 80MHz:

Wyniki dla 160Mhz:

Jest moc? :) Porównamy jeszcze z innymi płytkami:

Płytka Czas Uwagi
IntelGalileo Gen2 396 ms czytaj więcej
NodeMCU v2 @ 160MHz 3176 ms  
Linkit ONE 4239 ms czytaj więcej
NodeMCU v2 @ 80MHz 6251 ms  
Arduino Zero 19661 ms czytaj więcej
Arduino Uno 57389 ms  

Wsparcie dla Arduino jest bardzo dobre - cały czas rozszerza się lista kompatybilnych funkcji i dedykowanych modułów, czujników i układów. Jeśli więc myślisz o małym urządzeniu pracującym w sieci Wi-FI, nic chyba lepszego dziś nie dostaniemy.



Udpstępnij dalej!

http://www.jarzebski.pl/arduino/arduino-i-klony/nodemcu-v2-esp8266-lua.html

Reklama

Komentarze Komentarze
Avatar 1
Andrzej Mac OS X / Safari 537.36
20 lipiec 2015 - 10:58 Warszawa

Świetny tekst! Masz nosa do ciekawych układów i ich zastosowań :)

Od siebie mogę dorzucić, że ESP8266/Arduino można programować również przy pomocy rewelacyjnego CLion dzięki PlatformIO ( http://platformio.org/ ).

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
20 lipiec 2015 - 17:35 Bytom

Nie znałem :) Chętnie sprawdzę

Avatar 1
Hannibal Linux x86_64 / Safari 537.36
20 lipiec 2015 - 13:20 Brak informacji

>Jeśli więc myślisz o małym urządzeniu pracującym w sieci Wi-FI, nic chyba lepszego dziś nie dostaniemy.

To jest chyba lepsze: http://www.acmesystems.it/arietta

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
20 lipiec 2015 - 17:36 Bytom

Nie miałem jeszcze okazji - znalazło się na mojej liście :)

Avatar 1
Tomek Windows 7 / Mozilla Firefox 43.0
26 grudzień 2015 - 14:06 Brak informacji

Za 1 szt ariettay masz 20szt esp.

Avatar 1
Luke Windows 7 / Mozilla Firefox 39.0
23 styczeń 2016 - 19:10 Warszawa

Gdyby był w tej samej cenie to tak. Wolę kupić 5 modułów lua :)

Avatar 1
Marcin Windows / Safari 537.36
21 lipiec 2015 - 00:11 Warszawa

Wpis super i za to dzięki. Ale kody na Twoim blogu do czytania to masakra... Mówię o tych dolnych i górnych indeksach. Bardzo to utrudnia czytanie. Przynajmniej mi.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
21 lipiec 2015 - 01:14 Bytom

:) dzięki - możesz podesłać screenshota na blog at jarzebski dot pl ?

Avatar 1
j4c0b Windows 7 / Mozilla Firefox 39.0
21 lipiec 2015 - 14:27 Warszawa

trafiłem tu kiedyś przez przypadek i teraz jestem dosyc czestym gościem w poszukiwaniu ciekawostek jak właśnie prezentowane nodemcu.
mam kilka pytanek odnośnie tego sprzętu.
ile to ma ramu? nigdzie nie znajduję tej informacji.
dwa jak przełączać MHz?(80<->160)
trzy jaki zasięg po wifi - ile metrów od AP?

pozdrawiam.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
21 lipiec 2015 - 23:16 Bytom

Jeśli chodzi o zasięg polecam to:

Na pewno ma 4mbit pamięci flash, ale RAM nie wiem, sprawdzę to

80/160MHz przełączałem podczas wyboru boarda z Arduino IDE

Avatar 1
Krzysztof Windows 7 / Mozilla Firefox 39.0
21 lipiec 2015 - 22:11 Warszawa

Myślę, czy by na tym stacji pogodwej nie zrobić z twoich ostatnich tutoriali. Bateryjka i jazda. Ale bateryjke przez port USB? Ciekawe na ile by to podziałało na takiej baterii.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
21 lipiec 2015 - 23:19 Bytom

Możesz podpiąć się pod pin Vin 5v :)

Avatar 1
Przemo Linux x86_64 / Safari 537.36
17 wrzesień 2015 - 22:15 Brak informacji

Ta płytka nie ma wbudowanego czujnika temperatury :)

Avatar 1
Robert Windows 7 / Mozilla Firefox 40.0
02 październik 2015 - 07:53 Brak informacji

Miganie diodą led = 200kB ?

Avatar 1
podgiewontem Linux x86_64 / Safari 537.36
08 październik 2015 - 19:40 Brak informacji

Samodzielnie wgryzałem się do mojego NodeMCU w. 0.9, a tu wszystko podane na tacy :) Proste rzeczy potrafię już zrobić, ale utknąłem na DS18B20. Na stronie http://nodemcu.com/index_en.html#fr_5475f7667976d8501100000f
jest przykład ale nie potrafię go zastosować. Rozumiem, że NodeMCU potrafi współpracować bezpośrednio z DS18b20 ? Proszę o taki skrypt w lua kt. czyta temp z czujnika i wyrzuca ją na serwer co jakiś czas.

Avatar 1
koyaan Windows / Safari 537.36
05 grudzień 2015 - 16:40 Brak informacji

Halo Houston, mam problem, jak na razie po:
print(wifi.sta.getip())
odpowiada "nil",
możesz pomóc ?

Avatar 1
Piotr Windows / Safari 537.36
25 grudzień 2015 - 22:02 Brak informacji

Trzeba się najpierw zalogować do sieci.

Avatar 1
laurentp Linux / Mozilla Firefox 16.0
20 grudzień 2015 - 16:14 Warszawa

Wie ktoś może, ile można (bezpiecznie!) "wyssać" z wbudowanego LDO 3.3V? Poza potrzebami samego NodeMCU? Bo na zdjęciach w necie jest jakiś spory (0.5A?), a u mnie (też CP2102) jest (chyba) w SOT23-5. W sumie dużo nie potrzebuję, LCD na HD + DS18B20 + LED + pstryczki, ale wolałbym wiedzieć, co mogę.

Avatar 1
S Windows / Mozilla 11.0
22 grudzień 2015 - 11:51 Brak informacji

Mam takie pytanie. Czy wgrywanie programu Arduino podmienia cały firmware? Czy po wgraniu programu Arduino mogę bez problemów wgrać program w Lua czy musze najpierw z powrotem firmware Nodemcu wgrać?

Avatar 1
ponk Windows 7 / Safari 537.36
04 styczeń 2016 - 21:22 Brak informacji

@S tak, podmienia caly firmware. musisz pozniej flashowac firmware zeby wgrac skrypty lua.

Avatar 1
qni Windows / Safari 537.36
13 styczeń 2016 - 22:30 Brak informacji

witam.
jestem akwarystą i mam sterownik na arduino, który kontroluje natężenie led oraz 2 przekaźniki, mierzy temperaturę i pH. Ostatnio kupiłem ESP aby postawić serwer i poprze stronę ustawiać parametry np oświetlenia.
Wpadłem na pomysł że z SD będę ładował HTML do ESP poprzez arduino. Mam wielki kłopot. arduino nie wczytuje mi zawartość pliku tylko zwraca 0/1. czy może mi ktoś pomóc?
Lub pokazać ja sterować włączeni/wyłączenie diod poprzez arduino z EPS

Avatar 1
szikken Windows 7 / Safari 537.36
24 luty 2016 - 12:05 Warszawa

Witam,

znalazłem przypadkiem twój wpis w komentarzach dotyczących NodeMCU. Widziałem, że na arduino uruchomiłeś pomiar pH wody w akwarium. Własnie poszukuję takiego rozwiązania. Czy mógłbym prosić o jakieś wskazówki? Używałeś jakiegoś gotowego modułu do pomiaru pH z opcją podłączenia sondy pH przez BNC? Znalazłem takie płytki na aliexpress z Chin ale nigdzie nie znalazłem do nich dokumentacji niestety i nie wiem czy warto w to inwestować.

Z góry dzięki za wszelki wskazówki.

Pozdrawiam
Marcin

Avatar 1
piknick Windows / Safari 537.36
18 lipiec 2016 - 21:04 Brak informacji

są takie sondy z gotowymi płytkami do których wpinasz sondę (BNC), a z płytki wychodzi Ci analog.

Avatar 1
Jerzy Windows 7 / Safari 537.36
18 luty 2016 - 12:43 Warszawa

Świetny artykuł, zachęcił mnie do eksperymentowania.
Obsłuży moduł microSD, jak do niego podłączyć moduł microSD ?
Na module od karty mam: CS, SCK, MOSI, MISO, VCC, GND.

Avatar 1
Karol Windows 7 / Mozilla Firefox 45.0
31 marzec 2016 - 12:54 Gliwice

Podobna płytka to WeMos D1 Mini
http://www.wemos.cc/Products/d1_mini.html
oparta na tym samym układzie ESP8266, również zgodna z Arduino i NodeMcu. Producent oferuje gotowe płytki, m.in. z popularnymi czujnikami DHT11 czy DHT22, czy też moduł do kart Micro SD
http://www.wemos.cc/Products/mini_shields.html

Avatar 1
Atx Android 4.4 / Safari 537.36
01 czerwiec 2016 - 18:02 Brak informacji

Jak bezpośrednio adresowa porty?

Avatar 1
cbm80 Windows / Mozilla Firefox 47.0
16 czerwiec 2016 - 10:13 Brak informacji

ESP8266 ma calkiem niezla moc obliczeniowa:

Avatar 1
Grzegorz Windows / Safari 537.36
08 lipiec 2016 - 18:45 Brak informacji

Witam,
A ja nie mam pomysły jak się do tego dobrać:(
Próbuje podłączać do portu USB i wgrywać firmware ale płytka ani drgnie. Czy ma ktoś pomysł co z tym zrobić?

Avatar 1
sarian Windows / Safari 537.36
24 sierpień 2016 - 17:09 Brak informacji

Cześć pierw wgraj sterowniki do usb CH 340

Avatar 1
robertp Windows / Safari 537.36
20 październik 2016 - 12:51 Brak informacji

Mam ta sama plytke ale mam problem z pinem TX i RX, w Arduino IDE, programuje je jako SoftwareSerial(21,22) ale RX nie dziala... jakby był nie żywy.. ponadto jesli zmienię pini na inne jak (17,13), to i tak dane wylatuja z poprzedniego TX... tak jakby program w ogóle nie przypisywał serialu do wyznaczonego Pinu...

Avatar 1
DJ Windows 7 / Mozilla Firefox 52.0
18 kwiecień 2017 - 10:31 Brak informacji

Mam ten sam problem, RX TX oraz PN532 NFC

Avatar 1
barth.pl Windows / Safari 537.36
23 październik 2016 - 00:14 Brak informacji

Trafiłem przez przypadek - potem znów i znów - dobrze pozycjonująca się strona - ale i autor ciekawie pisze. Oby tak dalej - bo jesteś pierwszym źródłem polskojęzycznym ciągle TOPIE tworzącym niezłe artykuły. Jarzębski tak trzymaj!

Avatar 1
Shalvan Windows 7 / Safari 537.36
22 grudzień 2016 - 21:29 Warszawa

Witam,

Komuś udało się uruchomić wewnętrzny czujnik temperatury ??? fajna opcja do sterowania wentylatorem przez PWM

Avatar 1
Wojtek Windows / Safari 537.36
07 marzec 2017 - 13:17 Warszawa

Witam.
Mam problem z uruchomieniem serwera.
Mam płytkę chińską LoLin z wgranym nodemcu ze strony nodemcu-build.com z ustawieniami standardowymi.
Przy próbie połączenia z serwerem zrywa połączenie :Połączenie zostało zresetowane.
Gdy usunę linię: "conn:close()" napis "No siema!" się wyświetla, ale połączenie nie zostaje zakończone i kółeczko na karcie cały czas się kręci.
Co może być tego przyczyną?

Avatar 1
bio Windows 7 / Safari 537.36
05 maj 2017 - 23:54 Łódź

Witam, jaki macie pomysł na zainstalowanie płytki esp8266 w Arduino IDE ? bo żaden link odnoszący się do http://arduino.esp8266.com/ nie działa ...może ma ktoś pliki i może mi podesłać ?

Skomentuj wpis