Prvá doska NodeMCU vznikla krátko po predstavení čipu ESP8266 firmy Espressif Systems 30. decembra 2013. Do povedomia Európy sa čip dostal až v auguste 2014 či už ako samostatný kus alebo integrovaný v NodeMCU. NodeMCU je open-source platforma, ktorá umožňuje vytvárať interaktívne projekty najmä automatizácie či iné projekty zamerané na prepojenie s internetom/inými zariadeniami.
ESP8266 je možné nazvať aj System on a Chip (Soc). Ponúka všetko, čo bežný vývojár potrebuje od širokých možností programovania cez hardvérové vybavenie po možnosti pretaktovania procesora.
Hardvérová špecifikácia
ESP8266 – srdce NodeMCU obsahuje jednojadrový 32bitový procesor Xtensa LX 106 s inštrukčnou sadou RISC a taktom 80 MHz, pričom je ho možné pretaktovať až na 160 MHz.
Doska sa stala veľmi populárnou kvôli obrovskej pamäti na program. Do dosky je možné nahrať až 1 MB skompilovaného kódu, pre porovnanie Arduino Uno iba 32 kB, NodeMCU je vybavené 4MB flash pamäťou.
NodeMCU ponúka až 11 GPIO pinov, pričom všetky okrem okrem GPIO16 je možné PWM modulovať. Výstupný prúd GPIO pinov je 12 mA pri 3,3 V. Piny nie sú 5 V tolerantné, i keď niektoré zdroje uvádzajú, že sú. Pri dlhodobom zaťažení na 5V dôjde k prehriatiu čipu ESP8266 a jeho následnej poruche, resp. zničeniu. Na doske sa nachádza iba jeden analógový pin. Štandardne ESP8266 vie pin využívať v rozmedzí 0–1 V, avšak vďaka NodeMCU súčiastkam pracuje v rozmedzí 0–3,3 V. ESP8266 v sebe združuje aj implementáciu wifi štandardu 802.11 na 2,4 GHz v pásmach b/g/n, pričom v pásme b má garantovaný najlepší zisk 25 dB.
Softvérová špecifikácia a možnosti programovania
NodeMCU podporuje štandardné rozhrania ako OneWire, I2C, SPI, UART, ADC… Prvotná verzia NodeMCU dosiek mala nový firmware a spôsob programovania. Prvé dosky mali NON-OS SDK pre ESP8266, čo umožňovalo interpretovať jazyk Lua, v ktorom boli tieto čipy programované. Syntax jazyka Lua je veľmi podobná Wiringu.
Blink v jazyku Lua:
-- Blink using timer alarm -- timerId = 0 dly = 1000 -- use D4 ledPin = 4 -- set mode to output gpio.mode(ledPin,gpio.OUTPUT) ledState = 0 -- timer loop tmr.alarm( timerId, dly, 1, function() ledState = 1 - ledState; -- write state to D4 gpio.write(ledPin, ledState) end)
O niekoľko týždňov po vydaní však uzrel svetlo sveta projekt Arduino core vo verzii 0.0.1. Začala sa etapa dostupnosti programovania dosiek cez ArduinoIDE klasickými Arduino príkazmi tak, ako sme boli naučení.
Čipy ESP8266 boli veľmi populárne u Arduinistov najmä pre konektivitu do internetu a hlavne kvôli cene a ľahkej implementácii do projektu. Toto Arduino core riešenie, ktoré sa postupne vyvíjalo, posunulo popularitu dosiek NodeMCU ešte viac do popredia.
Blink v jazyku Wiring (Arduino) pre NodeMCU:
int led=2; void setup() { // inicializácia pinu 2 ako výstupu, realny pin D4 - pozri pinout pinMode(led, OUTPUT); } // nekonečná slučka void loop() { digitalWrite(led, LOW); // dioda teraz svieti. Integrovana dioda na NodeMCU je active LOW! delay(1000); // pockat sekundu digitalWrite(led, HIGH); // dioda teraz nesvieti. Integrovana dioda na NodeMCU je active LOW! delay(1000); // pockat sekundu }
Verzia Arduino Core je už dnes vo verzii 2.4.0. Projekt umožňuje plnohodnotne dosku programovať ako klasické Arduino vrátane web časti.
Doska dokáže vytvárať HTTP, HTTPS request POST i GET metódou a má plne integrovaný MQTT protokol, čo umožňuje využiť dosku aj na Smart Home riešenia, pričom podporuje aj WEP, WPA/WPA2 PSK šifrovanie.
Arduino Core nie je jediný projekt konverzie dosky na iný jazyk. Dnes je možné dosku programovať aj v Micropython, Javascripte, Lispe a iných. NodeMCU je možné programovať aj cez OTA (On the air) teda bezdrôtovo bez nutnosti pripájať zariadenie k počítaču, v ktorom sa nachádza kód. Toto je jedna z najväčších predností, prečo si dosku NodeMCU zvoliť.
Verzie ESP8266
Vyrobené treťou stranou AI-Thinker, čo umožnilo implementáciu do mnohých iných systémov (nie)len NodeMCU.
Čip ESP8266 sa stal aj wifi modulom pre wifi shield pre Arduino. Cenovo dostupný shield so spoľahlivým modulom sa stal razom najpredávanejším shieldom pre Arduino.
Popularite pridal aj fakt, že ESP8266 zvláda aj HTTPS pripojenia, teda šifrovanie. Najpoužívanejší Ethernet shield pre Arduino W5100 šifrovanie nepodporuje.
S rozmachom Let's Encrypt certifikátov prešlo mnoho webov na HTTPS bezplatne, čo neumožnilo ďalej využívať Ethernet shield Wiznet W5100 ale otvorilo cestu ESP-čku.
Verzie NodeMCU
Pinout NodeMCU dosiek
V1 – Prvotný projekt o vydanie NodeMCU dosky, veľmi dobré ohlasy, vďaka prevodníku CH340 nebol problém s inštaláciou ovládača pre klientský počítač.
V2 – Druhá verzia priniesla viacero GPIO pinov oproti predchádzajúcej verzii a získala nový čip ESP8266–12E. Kvôli problémom s ovládačmi pre prevodník CP2102 sa táto verzia nestala príliš populárnou.
V3 Lolin – Hlavným prínosom bola možnosť využiť 5V výstup z dosky pre napájanie externých prístrojov, vďaka prevodníku CH340 sa opäť stala obľúbenou vďaka prevodníku.
Shieldy a dosky k NodeMCU
V3 – Base kit – rozšírujúca doska pre piny NodeMCU, pričom sú GPIO piny rozšírené o 3 a ľavá strana NodeMCU o 1 pin + Výstupné piny GND, 5V. Base kit má integrovaný regulátor, vďaka čomu je možné NodeMCU napájať až na 24 voltov.
Rozdiel medzi V2 a V3
Nakoľko je možné zakúpiť dosku V2 aj s prevodníkom CH340 je možné si ho zmýliť s V3 Lolin. V3 je väčšia ako V2 a má na sebe viditeľný nápis Lolin. V2 má na spodnej strane obrovský nápis Amica.
Dosiek V2 s prevodníkom CH340 je veľmi málo, čiže na ňu štandardne ani nenarazíte, najčastejšie vývojári siahnu po V3 Lolin spoločne s Base kitom pre Lolin pre možnosť montáže do krabičky. Pre NodeMCU v3 hraje aj možnosť využívať 5V výstup z USB napájania. Tento pin je pod napätím iba pri napájaní z USB, ak sa napája cez adaptér prostredníctvom Base kitu, pin je bez napätia a tým pádom nie je možné využiť napájanie pre 5V moduly pripojené k doske.
Dobre vedieť
Dosky NodeMCU a ESP8266 čipy mávajú obecne spotrebu v klude < 10 µA, pri vykonávaní cyklického programu s výpočtovou náročnosťou okolo 60–80 mA.
Problémom sú ale nárazové špičky, kedy spotreba vyskočí pri odosielaní dát a pripájaní na wifi sieť aj cez 230 mA.
V prípade použitia samostatného čipu ESP8266 je nutné využiť kondenzátor. V opačnom prípade sa bude čip neustále reštartovať.
Druhým najčastejším problémom je využitie procesora po dlhú dobu. Nakoľko sa procesorový čas delí medzi výpočtovú a wifi časť, je nutné, aby wifi časť nezamrzla.
V prípade, že ostane bez procesora po určitú dobu, čip sa sám reštartuje. Tento čas je v pár ms. V prípade jednoduchšieho projektu na tento problém takmer nenarazíte.
Odkazy na zaujímavé NodeMCU projekty
- NodeMCU ovládané cez Amazon Alexa dot – Projekt Alexa a NodeMCU
- NodeMCU MQTT na Thingspeak – Thingspeak projekt
- NodeMCU ovláda svetlá cez aplikáciu Blynk – Blynk projekt
- NodeMCU MQTT – Smart Home – Smart Home
- NodeMCU Wifi rušička – Wifi rušička s web prostredím