Programare NodeMCU ESP8266 în Arduino IDE

 Autor:   Publicat pe:   Actualizat pe:  2019-04-14T10:20:31Z

Adăugare suport pentru ESP8266 în Arduino IDE și programarea unei plăci de dezvoltare NodeMcu.

ESP8266 este un microcontroller cu suport WiFi și TCP/IP produs de Espressif Systems (Shanghai).  Prețul redus al dispozitivului l-a făcut foarte popular, fiind inclus în module, dar și în plăci de dezvoltare pentru aplicații IoT (Internet of Things). ESP8266 conține un procesor pe 32 de biți tactat la 80 MHz, cu 32kB RAM pentru instrucțiuni, respectiv 80kB RAM pentru utilizator. Indicațiile din acest articol se aplică, cu mici modificări, tuturor plăcilor de dezvoltare cu module bazate pe ESP8266.

Una dintre cele mai ieftine plăci de dezvoltare este Lolin NodeMcu. În acest articol am folosit versiunea 3 a acestei plăci. Portul USB al plăcii este folosit pentru programare, fiind doar un convertor USB serial. Integratul USB este diferit la NodeMcu 1.0 (Silabs CP2102) față de NodeMcu 3.0 (WCH CH340G). Acest lucru trebuie avut în vedere la instalarea driver-ului. Placa NodeMcu conține un modul cu ESP8266. Este vorba de modulul ESP-12E sau ESP-12F produs de Ai-Thinker. O memorie flash de 32 Mbit (4 megaocteți) este conectată prin interfața SPI la ESP8266.

Programare NodeMCU ESP8266 în Arduino IDE
Dacă nu ai mai folosit niciodată o astfel de placă, este timpul să instalezi driver-ul urmând unul din linkurile de mai sus. Dacă folosești Linux, driverele sunt incluse în kernel și nu ai nimic de făcut. Instalează Arduino IDE, dacă nu îl ai deja instalat. Lansează-l, și din meniul File accesează Preferences.

Adăugare URL pentru ESP8266 în Arduino IDE
Adăugare URL pentru ESP8266 în Arduino IDE
În câmpul Additional Boards Manager URLs va trebui să adaugi adresa:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Apasă Ok, apoi mergi la Tools – Boards – Boards Manager și așteaptă actualizarea listei de plăci compatibile. În caseta de căutare introdu esp8266 și apasă Install la rezultatul apărut în listă. Cea mai recentă versiune a kitului de dezvoltare va fi descărcată și instalată.

Instalare suport ESP8266 în Arduino IDE
Instalare suport ESP8266 în Arduino IDE
După finalizarea instalării, tot în meniul Tools – Boards vei găsi setul de plăci ESP8266 Boards. Aici trebuie să alegi placa de dezvoltare pe care o folosești. În cazul meu, NodeMcu 3.0 nu există, dar NodeMcu 1.0 este perfect compatibil. Dacă accesezi din nou meniul Tools, vei vedea mai multe configurări apărute pentru această placă de dezvoltare. Să le luăm pe rând.
  • Upload speed: cu cât mai mare, cu atât mai rapidă este procedura de programare. Imediat după resetarea microcontroller-ului (și la pornire), câteva informații sunt trimise prin același port serial cu un baudrade de 74880. Ar trebui să poți programa placa cu 921600. Închide Serial Monitor înainte de programare, mai ales dacă ai setat în el alt baudrate. Am observat că încărcarea programului eșuează în această situație.
  • Flash size: capacitatea memoriei flash este de 4 Megabyți. Nu poți schimba acest lucru, dar poți alege mărimea spațiului alocat pentru sistemul de fișiere. Orice ai alege, kit-ul Arduino pentru ESP8266 limitează programul (schița) la 1 Megabyte. Sistemul de fișiere poate avea până la 3 Megabyți, pe care poți stoca configurări ce nu se pierd la întreruperea alimentării, fișiere de date culese de diverși senzori conectați la placă, dar și imagini, stiluri CSS sau orice alt fișier de care ai nevoie pentru rularea unui server.
  • CPU Frequency: valoarea implicită este 80 MHz. Totuși, ESP8266 poate rula și la 160 MHz.
  • Debug port și Debug level: trimite informații de depanare pe unul din porturile seriale.
  • Restul configurărilor pot fi lăsate la valorile implicite (în afară de portul serial).
Înainte de programare, iată ce mai trebuie să știi despre ESP8266. Este un dispozitiv ce funcționează exclusiv la 3.3V. Niciun pin nu suportă tensiuni mai mari de 3.6V! Excepție face pinul analogic ADC0, intrarea convertorului analog-digital, care nu suportă tensiuni mai mari de 1V. Dacă folosești placa NodeMcu, la intrarea ADC se află un divizor rezistiv 220k/100k, care permite aplicarea de tensiuni până în 3.3V.

Tot la NodeMcu, lângă portul USB se află două butoane, dintre care unul este pentru resetare (RST). Celălalt este marcat FLASH. În modul normal de funcționare pinul GPIO0 este 1 datorită unui rezistor care-l leagă la alimentare. Încărcătorul de sistem citește programul din memoria flash și îl execută în RAM. Dacă GPIO0 este 0 la apăsarea butonului FLASH, avem acces prin portul serial la încărcătorul de sistem. Astfel, putem programa memoria FLASH. Nu va fi nevoie să apeși vreun buton la programare, deoarece este atât cel de resetare cât și acesta sunt conectate la semnalele auxiliare DTR și RTS ale convertorului USB-serial.

Placa de dezvoltare NodeMcu include pini pe ambele laturi. Problema este distanța dintre acești pini. Dacă vrei să o așezi pe un cablaj de test de tip breadboard, nu mai poți conecta altceva la ea, deoarece ocupă toată lățimea plăcii breadboard. Vei avea nevoie, deci, de două plăci de cablare breadboard.

Spre deosebire de alte plăci de dezvoltare, NodeMcu nu are niciun LED. Așadar, încărcarea schiței Blink nu produce niciun rezultat vizibil. Reține că nu poți consuma mai mult de 12 mA de pe un pin. Chiar dacă nu are LED, definiția LED_BUILTIN există și pentru NodeMcu și este 16. Așadar, dacă vei conecta un LED pe GPIO16, acesta se va aprinde intermitent. GPIO16 este pinul D0.

Am aflat în cele din urmă că LED-ul aflat pe modulul ESP8266, lângă antenă este de fapt conectat la GPIO2/TXD1. Deci, dacă editezi schița Blink și modifici pinul din LED_BUILTIN în 2 vei acționa LED-ul de pe modul. Reține că acesta interferă cu comunicarea serială (TXD1).

ESP8266 Lolin NodeMcu 3.0 Pinout
Configurația pinilor plăcii NodeMcu 3.0
Dacă identifici pinii doar pe baza unui număr, acesta este numărul GPIO. Dacă adaugi D (valabil doar de la 1 la 10), vei avea acces la pini așa cum sunt ei numerotați pe placa de circuit. De exemplu, în schița Blink, digitalWrite(LED_BUILTIN, HIGH), digitalWrite(D0, HIGH) și digitalWrite(16, HIGH) acționează același pin. Conectarea LED-ului la placă o vei face obligatoriu prin înserierea cu un rezistor limitator de curent de 300 – 600 ohmi.

Este important să știi că pinii din partea stângă a plăcii (S3, S2, S1, SC, SO, SK) sunt interfața SPI a memoriei flash incorporată în modul și nu îi poți folosi. Prin urmare iată care sunt interfețele hardware oferite de modul:
  • SPI: D5=SCLK, D6=MISO, D7=MOSI, D8=CS
  • PWM: D6, D7, D8
  • IR (interfață senzor infraroșu): D1=Rx, D5=Tx
  • ADC: A0
  • I2C: D4=SDA, D5=SCL
  • UART0: RX, TX, D7=CTS, D8=RTS
  • UART1: D4=TX (doar Tx pentru depanare)
  • I2S: D6=I2SI_DATA, D7=I2SI_BCK, D5=I2SI_WS, D8=I2SO_BCK, RX=I2SO_DATA, D4=I2SO_WS
  • LED: D4
Aceiași pini sunt comuni mai multor interfețe. Din acest motiv, unele biblioteci Arduino pentru ESP8266 folosesc implementări software ale protocoalelor. De exemplu, biblioteca Wire implementează I2C pe pinii D1 și D2.

Link-uri utile (în engleză)

Un comentariu :

Vă recomandăm să citiți regulamentul comentariilor înainte de a scrie un comentariu.