4M 4FLASH NodeMcu Lua WIFI Networking Development Board Based ESP8266 Computer Electronic Component 174-08-00441
ID: 254
Kategorie: ESP8266
Menge: 1
Position:

Opis

ModuÅ‚ WiFi oparty na ukÅ‚adzie ESP8266. Posiada wgrane oprogramowanie NodeMCU, który umożliwia programowanie za pomocÄ… jÄ™zyka skryptowego Lua. UkÅ‚ad wyposażony jest w 10 pinów GPIO (każdy z nich może być sterowany sygnaÅ‚em PWM), magistralÄ™ I2C, 1-Wire, 10-bitowy przetwornik analogowo-cyfrowy oraz antenÄ™ PCB. Dodatkowo na pÅ‚ytce umieszczony zostaÅ‚ konwerter USB-UART (CP2102), który umożliwia programowanie bezpoÅ›rednio poprzez port USB z wykorzystaniem Å›rodowiska Arduino IDE.

 

WiÄ™cej szczegóÅ‚ów o oprogramowania NodeMCU można znaleźć w serwisie GitHub.

 

Wymiary modułu to: 49 x 25 mm , raster wyprowadzeń wynosi 2,54 mm

 

Lua jest jÄ™zykiem skryptowym mogÄ…cym dziaÅ‚ać jako samodzielnie lub jako rozszerzenie możliwoÅ›ci innych aplikacji. ZostaÅ‚ on zaimplementowany jako biblioteka jÄ™zyka C. Cechuje siÄ™ prostym kodem, wysokÄ… wydajnoÅ›ciÄ… oraz możliwoÅ›ciÄ… przenoszenia miÄ™dzy platformami. SzczegóÅ‚y na stronie domowej Lua.

 

Przy pierwszym uruchomieniu zalecamy aktualizacjÄ™ firmware wedÅ‚ug tej instrukcji.

 

Specyfikacja

  • ModuÅ‚ oparty na ukÅ‚adzie ESP8266
  • 10 GPIO - każdy może dziaÅ‚ać jako PWM, I2C lub 1-Wire
  • Wbudowane zÅ‚Ä…cze microUSB
  • Konwerter USB-UART CP2102
  • Wbudowana antena PCB
  • Raster wyprowadzeÅ„: 2,54 mm
  • Rozstaw zÅ‚Ä…cz: 23 mm
  • Wymiary moduÅ‚u: 49 x 25 mm

 

Przydatne linki

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-WireNodeMCU 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.