- Materiale necesare:
- Cum funcționează lucrurile?
- Programarea ESP8266-01:
- Conectarea ESP8266-01 cu Arduino:
- Programul și funcționarea Arduino:
ESP8266-01 a fost un modul excelent pentru a ne potoli toate setile de proiecte IOT. De la lansare, a dezvoltat o comunitate puternică și a evoluat într-un modul Wi-Fi ușor de utilizat, ieftin și puternic. O altă platformă open-source care este mult mai populară este Arduino, are deja multe tone de proiecte construite în jurul său. Combinarea acestor două platforme va deschide ușile pentru multe proiecte inovatoare, așa că în acest tutorial vom învăța cum să interfațăm modulul ESP8266-01 cu Arduino. Astfel vom putea trimite sau primi date între Arduino și Internet.
În scopul acestui tutorial, vom citi ora, data, temperatura și umiditatea de pe internet folosind un API cu ESP8266-01. Apoi trimiteți aceste valori pe o placă Arduino și afișați-le pe ecranul LCD 16 * 2. Sună bine chiar !! Deci sa începem.
Materiale necesare:
- Placa Arduino (Orice versiune)
- ESP8266-01
- Placă de programare FTDI cu opțiune de 3,3V
- 16x2 LCD
- Potențiometru
- Apasa butonul
- Conectarea firelor
- Breadboard
Cum funcționează lucrurile?
Înainte de a ne arunca cu capul, este important să știm cât de mult va funcționa acest lucru. Practic, trebuie să începem cu modulul ESP8266-01. Vom folosi Arduino IDE pentru a programa ESP8266 și codul va fi scris pentru a utiliza un API pentru a citi un fișier JSON prin cererea http. Apoi vom sintetiza acest fișier JSON pentru a extrage doar informațiile necesare din fișierul JSON complet.
Odată ce informațiile sunt formulate, le vom imprima folosind comunicarea serială. Aceste linii seriale vor fi apoi conectate la Arduino, astfel încât Arduino să poată citi informațiile trimise de la ESP8266. Odată ce informațiile sunt citite și procesate, le vom afișa pe ecranul LCD.
Este în regulă, dacă nu ați înțeles complet acest lucru, pentru că vom învăța la fel în restul acestui tutorial.
Programarea ESP8266-01:
Acest tutorial presupune că aveți o anumită experiență cu modulul ESP8266. Dacă nu, atunci este recomandat să citiți următoarele trei tutoriale pentru a înțelege complet despre asta.
- Noțiuni introductive despre ESP8266-01
- Programarea ESP8266-01 folosind comenzi AT
- Programarea ESP8266-01 folosind Arduino IDE și intermiterea memoriei sale
De asemenea, puteți verifica toate proiectele noastre ESP8266 aici.
Aici vom programa modulul ESP8266-01 folosind Arduino IDE. Pentru hardware folosim placa FTDI cu 3.3V pentru a programa ESP8266, deoarece va face hardware-ul mult mai simplu. Schema circuitului pentru conectarea ESP8266 la placa FTDI este prezentată mai jos.
Asigurați-vă că sunt îndeplinite următoarele condiții
1. ESP8266-01 este tolerant doar 3,3V, nu utilizați 5V. Deci, setați FTDI numai în modul 3.3V.
2. GPIO_0 trebuie să fie legat la pământ pentru modul de programare
3. Pinul de resetare trebuie conectat printr-un buton la pinul de masă. Acest buton ar trebui să fie apăsat chiar înainte de a încărca codul. De fiecare dată când butonul este apăsat, LED-ul albastru de pe modulul ESP8266-01 se va ridica pentru a indica faptul că modulul este resetat.
Odată ce conexiunile sunt încheiate, deschideți IDE-ul Arduino și verificați dacă puteți încărca cu succes un exemplu de program. Dacă nu sunteți sigur cum să utilizați Arduino IDE pentru a încărca programul pe ESP8266, urmați Programarea ESP8266 cu Arduino pentru a-l învăța. În acest moment presupun că ați încărcat cu succes programul de clipire.
. Programul complet este dat la sfârșitul acestei pagini, mai jos. Le explic ca fragmente mici. Programul necesită, de asemenea, biblioteca Arduino JSON pentru a compila, deci dacă nu ați adăugat deja biblioteca la ID-ul dvs. Arduino, adăugați-o descărcând din biblioteca Arduino JSON de pe Github.
ESP8266 trebuie să se conecteze la internet pentru a obține date despre dată, oră, temperatură și umiditate. Deci, trebuie să îi permiteți să se conecteze la Wi-Fi dovedind SSID-ul și parola în liniile de mai jos
const char * ssid = "JIO-Fi"; // Introduceți Wi-Fi SSID const char * password = "Pas123"; // Introduceți parola Wi-Fi
În interiorul configurare () funcția vom verifica dacă ESP este capabil să se conecteze cu Wi-Fi, dacă nu - l va aștepta acolo pentru totdeauna doar prin imprimarea „Conectarea..“ pe monitor de serie.
while (WiFi.status ()! = WL_CONNECTED) {// Așteptați până când Wi-Fi este conectat cu întârziere (1000); Serial.print ("Conectarea.."); // Print Connection.. până la stabilirea conexiunii }
Următorul pas este pasul foarte important. Dacă conexiunea Wi-Fi are succes, trebuie să invocăm o solicitare http get pentru a citi fișierul JSON de pe internet. În acest tutorial folosesc API-ul furnizat de wunderground.com. Deci, dacă intenționați să utilizați același lucru, puteți intra în link și înscrieți-vă pentru cheia API gratuită sau puteți utiliza orice API la alegere. Odată ce ați finalizat cu API-ul dvs., veți ajunge cu un link de genul acesta mai jos
Notă: Am schimbat cheia API a acestui link, astfel încât aceasta să nu funcționeze. Păstrați cheia API securizată și nu partajați.
API-ul meu de aici este folosit pentru a obține datele meteo din Chennai. Puteți utiliza orice API. Dar când încărcați API-ul în orice browser, acesta ar trebui să returneze un fișier JSON. De exemplu, API - ul meu returnează următorul fișier JSON
Al tău ar putea returna un fișier cu date diferite. Putem verifica dacă acest fișier JSON este primit și de ESP8266, citindu-l și imprimând JSON pe monitorul nostru serial folosind următoarele linii
int httpCode = http.GET (); // treceți o cerere de obținere dacă (httpCode> 0) {// Verificați codul de returnare // payload = http.getString (); // Stocați valoarea pe varibale Payload pentru depanare // Serial.println (payload); // Imprimați sarcina utilă pentru depanare, altfel comentați ambele linii
Am comentat aceste linii, deoarece sunt necesare doar pentru testare. Odată ce v-ați asigurat că ESP8266 este capabil să obțină datele JSON, este timpul pentru formularea datelor. După cum puteți vedea, aceste date sunt uriașe și majoritatea valorilor sunt inutile, cu excepția celor care sunt necesare pentru noi, cum ar fi data, ora, temperatura și umiditatea.
Deci, folosim biblioteca JSON Arduino pentru a separa valorile necesare pentru noi și a le stoca într-o variabilă. Acest lucru este posibil deoarece valorile din fișierul JSON sunt atribuite ca perechi de valori de nume. Deci, acest nume este un șir care va deține valoarea necesară pentru noi.
Pentru a face acest lucru, trebuie să ne mutăm pe un site web care va analiza fișierul JSON și ne va da codul Arduino. Da, este la fel de ușor ca asta. Accesați https://arduinojson.org/assistant/ și lipiți fișierul JSON pe care l-am încărcat în browserul nostru și apăsați Enter. Când am terminat, al meu arăta cam așa mai jos
Derulați puțin în jos pentru a vedea programul de formulare creat automat
Tot ce trebuie să faceți este să selectați variabila dorită, să le copiați și să o lipiți pe IDE-ul dvs. Arduino, așa cum am făcut aici
/ * Phrasing Data folosind JSON librarey * / // Utilizați https://arduinojson.org/assistant/ pentru a obține valorile de frazare pentru șirul JSON const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * End of Phrasing Data * / // Adresați valoarea sin la variabilele dorite JsonObject & current_observation = root; // sub current_observation JsonObject & current_observation_observation_location = current_observation; // under observation_location const char * current_observation_station_id = current_observation; // „ICHENNAI1” // obține detalii despre locație const char * current_observation_local_time_rfc822 = current_observation; // Ora locală // obțineți ora locală const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // obțineți valoarea temperaturii const char * current_observation_relative_humidity = current_observation; // „73%” // obține valoarea umidității
Tocmai am copiat variabilele current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string și current_observation_relative_humidity . Întrucât intenționăm să afișăm doar acele patru date pe ecranul nostru LCD.
În cele din urmă, am obținut datele de care avem nevoie de pe internet și le-am salvat ca o variabilă pe care o putem folosi confortabil. Pentru a trimite aceste date către Arduino, trebuie doar să le scriem în serie pe monitorul serial. Următoarele rânduri vor face exact același lucru
// Imprimați variabilele prin monitorul serial Serial.print (current_observation_station_id); // trimite detaliile locației către Arduino delay (100); // întârziere stabilitate Serial.print (current_observation_local_time_rfc822); // trimiteți detaliile orei locale către Arduino delay (100); // întârziere stabilitate Serial.print (current_observation_temperature_string); // trimiteți detaliile temperaturii către Arduino delay (100); // întârziere stabilitate Serial.print (current_observation_relative_humidity); // trimiteți detaliile privind umiditatea către Arduino delay (100); // întârziere stabilitate
Rețineți că am folosit Serial.print () și nu Serial.println () deoarece comanda Serial.println () va adăuga a / n și / r împreună cu datele care nu sunt necesare pentru noi. De asemenea, am adăugat o întârziere de 10 secunde, astfel încât ESP să trimită aceste valori numai la un interval de 10 secunde către Arduino.
Conectarea ESP8266-01 cu Arduino:
Până acum ne-am programat ESP8266-01 pentru a citi datele necesare de pe internet la un interval de 10 secunde și pentru a le trimite în serie. Acum trebuie să interfațăm ESP-ul cu Arduino, astfel încât să putem citi aceste date seriale. De asemenea, trebuie să adăugăm un ecran LCD de 16 * 2 la Arduino, astfel încât să putem afișa datele primite de la modulul ESP8266. Schema de circuit pentru interfața modulului ESP8266 cu Arduino este prezentată mai jos
Asigurați-vă că pinul GPIO_0 este lăsat liber, alimentați modulul numai cu pinul de 3,3 V al Arduino și apăsați butonul pentru a introduce modulul ESP în modulul de operare. Acum, programul pe care l-am încărcat în ESP ar fi trebuit să înceapă să funcționeze și modulul ar trebui să trimită datele prin pinul serial către Arduino. Acești pini seriali sunt conectați la pinii 6 și 7 de pe Arduino. Așadar, putem folosi opțiunea serială a software-ului pe Arduino pentru a citi aceste date seriale din pini.
Programul și funcționarea Arduino:
Programul complet Arduino este de asemenea dat împreună cu codul ESP la sfârșitul acestei pagini. Puteți derula în jos pentru a vizualiza programul sau a citi mai departe dacă doriți să înțelegeți programul.
Programul de interfață este destul de simplu, trebuie doar să folosim biblioteca serială software pentru a citi datele de la pinii 6 și 7 și a le afișa pe ecranul LCD. Deoarece datele primite sunt în format șir, trebuie să folosim opțiunea sub șir pentru a rupe sarcina utilă la cerința noastră sau chiar a o converti în număr întreg, dacă este necesar. Deci, începem prin definirea pinilor la care este conectat ecranul LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pinii la care este conectat ecranul LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Din moment ce ne - am conectat la pinii Rx și Tx ESP8266 cu 6 și 7 - lea PIN - ul de Arduino trebuie să inițializa serial Software - ul pentru acele ace, astfel încât să putem primi datele de serie de la ei.I au nume ca acest ESP_Serial, puteți numiți-le orice doriți
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
În interiorul funcției setup () inițializăm comunicarea serială pentru monitorul serial și, de asemenea, pentru seria software. Dacă ți-ai putea aminti, am creat programul ESP pentru a comunica la 9600 baud rate, deci trebuie să folosim aceeași viteză baud pentru portul serial al software-ului. De asemenea, afișăm un mesaj introductiv pe LCD timp de 2 secunde.
void setup () {lcd.begin (16, 2); // Folosim un ecran LCD de 16 * 2 lcd.print („Arduino & ESP”); // Afișați un mesaj introductiv Serial.begin (115200); ESP_Serial.begin (9600); întârziere (2000); lcd.clear (); }
În funcția buclă principală () trebuie să verificăm dacă ESP8266 trimite ceva. Dacă este, atunci citim șirul din ESP8266 și îl salvăm într-o variabilă numită sarcină utilă. Sarcina utilă variabilă este de tip String și va păstra informațiile complete trimise din modulul ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Acum trebuie să împărțim acest șir în bucăți mici, astfel încât să le putem folosi în scop propriu, în acest caz trebuie să le împărțim pentru a le afișa pe ecranul LCD. Acest lucru se poate face cu ușurință prin utilizarea subsirului funcția în Arduino. Trebuie să știți poziția fiecărui personaj pentru a utiliza această funcție de șir . Puteți imprima încărcătura utilă pe monitorul serial pentru a cunoaște poziția caracterelor și a le utiliza pentru a clasifica șirurile de caractere așa cum se arată mai jos
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperature = loadload.substring (48, 54); Umiditate = loadload.substring (55, 60);
Acum pot merge mai departe și pot folosi aceste variabile fie pentru a le imprima pe monitorul serial, fie pentru a le imprima pe ecranul LCD. Cu toate acestea, imprimarea lor pe monitorul serial ne va ajuta să verificăm dacă șirurile sunt împărțite corect. Apoi le imprimăm doar pe ecranul LCD folosind următoarele rânduri
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (temperatura); lcd.setCursor (10, 1); lcd.print (Umiditate);
Încărcați programul pe Arduino și asigurați-vă că conexiunile sunt așa cum se arată în schema de circuite de mai sus. Reglați contrastul afișajului LCD până când vedeți lucrurile clar. Ar trebui să vedeți mesajul introductiv pe ecranul LCD și apoi, după câteva secunde, detaliile precum data, ora, temperatura și umiditatea ar trebui să fie afișate pe ecranul LCD, așa cum se arată mai jos.
De asemenea, puteți observa ledul albastru de pe ESP8266 clipind de fiecare dată când intră datele. Dacă nu puteți vedea acest lucru, înseamnă că ESP nu este în modul de programare, încercați să apăsați butonul Reset, verificați și conexiunile.
În mod similar, puteți utiliza orice API pentru a obține orice date necesare de pe internet și pentru a le furniza către Arduino și pentru a procesa munca dvs. cu Arduino. Există o mulțime de API disponibile pe internet și cu toate acestea puteți face un număr nelimitat de proiecte. Sper că ați înțeles proiectul și v-a plăcut să îl construiți. Dacă v-ați confruntat cu vreo problemă, postați-o în secțiunea de comentarii de mai jos sau pe forumurile noastre.
Puteți găsi toate proiectele noastre legate de ESP8266 aici.