NodeMCU ESP-12E - osnove
Jedan krajnje zanimljiv modul vam sada predstavljam. NodeMCU je modul
koji na sebi ima ugrađen Wi-Fi primopredajnik zasnovan na čipu ESP8266
koji mu omogućava bežično povezivanje sa manje-više svim i svačim. Čip
ESP8266 se sastoji iz varijante Tensilica L106 32-bitnog MCU-a (micro
controler unit) i radi na 80Mhz (overklok do 160Mhz). Ima sopstvenu
memoriju, malu (96KB data RAM + 64KB instruction RAM), ali sasvim
dovoljnu za svoje potrebe. Podržava IEEE802.11 b/g/n i TCP/IP protokole a
antena je štampana na PCB-u. Modul radi na 2,4Ghz i ima sigurnosne
WPA/WPA2 modove. Podržani protokoli su UART,HSPI, I2C, I2S, PWM, GPIO i
IR daljinsko upravljanje. Možemo reći da je ESP8266 SoC koji daje dosta
mogućnosti za izuzetno malu cenu.
ESP-12E je modul na koga je
ESP8266 zalemljen i koji ima još 4096 kilobajta sopstvene memorije. Ovaj
modul ima pinove sa razmakom od 0,1" i pogodan je za prototipsku ploču.
Uz njega dolazi i firmver NodeMCU pa otuda i naziv. NodeMCU ima podršku
za programski jezik LUA, koji je dosta sličan
JavaScriptu i oni koji su se bavili web programiranjem će primetiti
sličnosti. Modul koji sam ja uzeo ima CP2102 kontroler, zadužen za
komunikaciju sa računarom preko USB/UART interfejsa.
Red
je da se latimo mikroskopa i vidimo šta sve ima na ovom malenom modulu.
Centralno mesto zauzima ESP8266 sa odštampanom antenom i jasno se vidi
da je u pitanju modul koji je zalemljen na drugi. Na drugom kraju je
mikro USB port sa dva malena tastera oko njega, reset i flash. Između
USB porta i Wi-Fi modula se još našlo mesta za AMS117
regulator, dobro poznat u svetu mikro računara. NodeMCU radi nazivno na
5V, do ovog regulatora. Na dalje je sve 3,3V, što će reći da su i svi
izlazni pinovi 3,3V. Tu je i pomenuti CP2102 kontroler. Ovde ide
napomena da postoji i modul sa CH340G kontrolerom. Tu su još i par LED i
nešto elektronike. Na obodima su dva puta po 15 pinova a rekao sam da
su 0,1" razmaka i da su pogodni za prototipsku ploču.
Pinout
NodeMCU modula je malo čudan. Najveće greške prilikom povezivanja ovog
modula se prave pogrešnim odabirom pinova. Počeću sa levom stanom:
- Vin - 5V (4,5V-9V)
- GND - Ground
- RST - Reset ESP12
- EN - Chip Enable
- 3V3 - 3,3V
- GND - Ground
- CLK - SPI CLK (clock)
- SD0 - SPI MISO (master input slave output)
- CMD - CS
- SD1 - SPI MOSI (master output slave input)
- SD2 - GPIO9
- SD3 - GPIO10
- RSV - Reserved
- RSV - Reserved
- A0 - Analog
- 3V3 - 3,3V
- GND - Ground
- TX(D10) - UART Output/GPIO01
- RX(D9) - UART Input/GPIO03
- D8 - GPIO15
- D7 - GPIO13
- D6 - GPIO12
- D5 - GPIO14
- GND - Ground
- 3V3 - 3,3V
- D4 - GPIO2
- D3 - GPIO0
- D2 - GPIO4
- D1 - GPIO5
- D0 - GPIO16
Na GitHub-u se pored slike koju sam preuzeo može naći kompletan devkit i uputstvo za flešovanje NodeMCU-a. Već sam napomenuo da često dolazi do grešaka prilikom povezivanja ovog modula a par objašnjenja i uputstava imate ovde i ovde.
Prvo povezivanje modula sa računarom ide preko mikro USB kabla. Mala plava LED će se nakratko upaliti i potom ugasiti. Plava LED će trepnuti i ako se pritisne RST (reset) dugme. Ukoliko računar ne prepozna modul, potrebno je preuzeti drajver za CP2102 koji imate ovde. Nakon toga bi trebalo skeniranjem dostupnih Wi-Fi signala da se modul prijavi, u mom slučaju kao ESP_06E569.
Sledeće je dodavanje modula u Arduino IDE, tako što idemo na File->Preferences->Settings tab i u polje Additional Board Manager URLs kucamo http://arduino.esp8266.com/stable/package_esp8266com_index.json. Na ovaj način će IDE prikupiti potrebne drajvere za NodeMCU sa esp8266.com sajta. Dalje idemo na ok. Zatim idemo na Tools->Board->Boards Manager i tu pod Type biramo Contributed gde će se između ostalih izlistati i esp8266 by ESP8266 Community. A možemo i ako u polje za pretragu pored kucamo esp. Biramo našu novu ploču i instaliramo najnoviju verziju drajvera. Instalacija može da potraje. Nakon toga idemo opet Tools->Board->NodeMCU 1.0(ESP-12E Module), tj. biramo ploču sa kojom će Arduino IDE imati komunikaciju a koju smo upravo dodali. Dalje biramo Upload Speed (Tools) i stavljamo 9600 Bauda jer je tako po specifikaciji za moj modul a to piše na strani gde su pinovi. Takođe biramo Port (Tools) u mom slučaju je COM12. CPU frequency ostavljamo na 80MHz a postoji opcija za overclock.
Na kraju da testiramo naš NodeMCU i vidimo da li sve radi kako treba. Probaćemo da pustimo integrisanu LED na modulu da trepće tako što idemo na File->Examples->ESP8266->Blink. Otvara se novi skeč sa već ispisanim kodom. Kompajliramo ga i prebacujemo na modul. Plava LED pored same "odštampane" antene (sistemska LED) će treptati za vreme uploada a kada se proces završi počeće da trepće ugrađena plava LED do samog naponskog regulatora.
So far, so good. Sada je na redu da uposlimo sam ESP8266. Na Codebender.cc preuzimamo skeč i tu menjamo SSID i pasword iz naše lokalne mreže. Menjamo Upload Speed na 115200 Bauda. Kompajliramo i prebacujemo na modul. Idemo na Serial Monitor i tu bi trebalo da nam izađe IP adresa modula. Adresu kucamo u adresnu liniju našeg omiljenog pregledača i ... Zdravo Svete!!!! Na žalost, IP adresi možemo na ovaj način pristupiti samo iz lokalne mreže.
Igramo se i dalje...
Rekao sam da NodeMCU ima GPIO pinove. Ako je tako onda bi trebalo da se mogu koristiti na identičan način kao i oni na Arduinu? Da probamo da nateramo LED da trepće preko GPIO pina, recimo D8. Rukovodeći se prema šemi, to je GPIO15 i u skeču ćemo ulogu izlaza dati digitalnom pinu 15. Povezivanje po Fritzing šemi ispod. Anoda, duži krak LED ide na plus (D8) a katoda, kraći krak ide na minus (GND).
---------------------------------------
void setup() {
pinMode(15, OUTPUT);
}
void loop() {
digitalWrite(15, HIGH);
delay(1000);
digitalWrite(15, LOW);
delay(1000);
digitalWrite(15, HIGH);
delay(500);
digitalWrite(15, LOW);
delay(500);
}
-----------------------------------------
Skeč je prilično prost. U setup funkciji dodeljujemo pinu 15 izlaz. U loop funkciji digitalnim upisom stavljamo pin 15 na HIGH, nakon 1 sekunde, vraćamo na LOW, pa opet na HIGH. LED će se naizmenično paliti i gasiti.
Ovo je samo vrh ledenog brega mogućnosti NodeMCU-a. Svakako najzanimljiviji deo je upravljanje modulom putem web pregledača. Postoji dosta aplikacija za mobilne telefone koji mnogo pojednostavljauju proces, ali na taj način se neće naučiti ništa. A bez muke nema nauke.