- Potrebni materiali:
- Kako stvari delujejo?
- Programiranje ESP8266-01:
- Povezovanje ESP8266-01 z Arduino:
- Program in delovanje Arduino:
ESP8266-01 je odličen modul za potešitev vse naše žeje po IOT projektih. Od izdaje je razvil močno skupnost in se razvil v preprost, poceni in zmogljiv Wi-Fi modul. Druga odprtokodna platforma, ki je veliko bolj priljubljena, je Arduino, ki že ima zgrajene tone projektov. Kombinacija teh dveh platform bo odprla vrata številnim inovativnim projektom, zato se bomo v tej vadnici naučili, kako povezati modul ESP8266-01 z Arduino. Tako bomo lahko pošiljali ali prejemali podatke med Arduino in Internetom.
Za namen te vadnice bomo z interneta prebrali čas, datum, temperaturo in vlažnost z API-jem z ESP8266-01. Nato te vrednosti pošljite na ploščo Arduino in jih prikažite na 16 * 2 LCD zaslonu. Sliši se v redu !! Začnimo torej.
Potrebni materiali:
- Arduino Board (katera koli različica)
- ESP8266-01
- Programska plošča FTDI z možnostjo 3.3V
- 16x2 LCD
- Potenciometer
- Pritisni gumb
- Priključne žice
- Breadboard
Kako stvari delujejo?
Preden se potopimo, je pomembno vedeti, kako dejansko bo ta stvar delovala. V bistvu moramo začeti z modulom ESP8266-01. Za programiranje ESP8266 bomo uporabili Arduino IDE, koda pa bo napisana tako, da bo uporabila API za branje datoteke JSON prek http zahteve. Nato bomo to datoteko JSON postavili tako, da iz celotne datoteke JSON izvlečemo samo zahtevane podatke.
Ko so informacije zbrane, jih bomo natisnili s serijsko komunikacijo. Te serijske linije bodo nato povezane z Arduinom, tako da bo Arduino lahko prebral informacije, poslane iz ESP8266. Ko bodo podatki prebrani in obdelani, jih bomo prikazali na LCD zaslonu.
V redu je, če tega niste popolnoma razumeli, saj se bomo tega naučili tudi v nadaljevanju te vaje.
Programiranje ESP8266-01:
Ta vadnica predpostavlja, da imate nekaj izkušenj z modulom ESP8266. V nasprotnem primeru je priporočljivo prebrati naslednje tri vaje, da boste o njih popolnoma razumeli.
- Uvod v ESP8266-01
- Programiranje ESP8266-01 z uporabo ukazov AT
- Programiranje ESP8266-01 z uporabo Arduino IDE in utripanje njegovega pomnilnika
Vse naše projekte ESP8266 si lahko ogledate tudi tukaj.
Tukaj bomo programirali modul ESP8266-01 z uporabo Arduino IDE. Za strojno opremo uporabljamo ploščo FTDI s 3,3 V za programiranje ESP8266, saj bo olajšala strojno opremo. Shema vezja za povezavo vašega ESP8266 s ploščo FTDI je prikazana spodaj.
Prepričajte se, da so izpolnjeni naslednji pogoji
1. ESP8266-01 je odporen le na 3,3 V, ne uporabljajte 5 V. Torej nastavite FTDI samo v načinu 3,3 V.
2. GPIO_0 mora biti ozemljen za način programiranja
3. Ponastavitveni zatič je treba z gumbom priključiti na ozemljitveni zatič. Ta gumb je treba pritisniti tik pred nalaganjem kode. Vsakič, ko pritisnete gumb, se modra lučka na modulu ESP8266-01 sveti visoko, kar pomeni, da je modul ponastavljen.
Ko so povezave končane, odprite Arduino IDE in preverite, ali lahko uspešno naložite vzorčni program. Če niste prepričani, kako uporabiti Arduino IDE za nalaganje programa na ESP8266, sledite Programiranju ESP8266 z Arduino, da se ga naučite. Na tej točki predvidevam, da ste uspešno naložili program za utripanje.
. Celoten program je podan na koncu te strani spodaj. Razlagam jih kot majhne delčke. Program tudi zahteva, da se prevede knjižnica Arduino JSON, tako da, če knjižnice še niste dodali v svoj Arduino IDE, jo dodajte tako, da jo prenesete iz knjižnice Arduino JSON iz Github-a.
ESP8266 se mora povezati z internetom, da dobi podatke o datumu, času, temperaturi in vlažnosti. Torej mu morate dovoliti povezavo z Wi-Fi-jem tako, da v spodnjih vrsticah dokažete SSID in geslo
const char * ssid = "JIO-Fi"; // Vnesite svoj Wi-Fi SSID const char * password = "Pas123"; // Vnesite geslo za Wi-Fi
Znotraj setup () funkcijo smo preveriti, če je ESP je sposoben povezati z omrežjem Wi-Fi, če ne bo tam dočakali le s tiskanjem "Povezovanje.." na serijski monitor.
while (WiFi.status ()! = WL_CONNECTED) {// Počakajte, da se Wi-Fi poveže zamik (1000); Serial.print ("Povezovanje.."); // Print Connecting.. do vzpostavitve povezave }
Naslednji korak je zelo pomemben korak. Če je povezava Wi-Fi uspešna, moramo za branje datoteke JSON iz interneta poklicati zahtevo http za pridobitev. V tej vadnici uporabljam API, ki ga ponuja wunderground.com. Torej, če nameravate uporabiti isto, lahko vstopite v povezavo in se prijavite za brezplačni ključ API ali uporabite kateri koli API po vaši izbiri. Ko končate z API-jem, boste dobili spodnjo povezavo
Opomba: Spremenil sem ključ API te povezave, zato to ne bo delovalo. Ključ API naj bo zavarovan in ga ne delite z drugimi.
Tukaj uporabljam moj API, da dobim vremenske podatke v Čenaju. Uporabite lahko kateri koli API. Toda ko naložite API v kateri koli brskalnik, mora vrniti datoteko JSON. Moj API na primer vrne naslednjo datoteko JSON
Vaša lahko vrne datoteko z drugačnimi podatki. Ali je to datoteko JSON prejel tudi naš ESP8266, lahko preverimo tako, da jo preberemo in natisnemo JSON na naš serijski monitor z uporabo naslednjih vrstic
int httpCode = http.GET (); // posredujemo zahtevo za pridobitev, če (httpCode> 0) {// Preveri povratno kodo // payload = http.getString (); // Shranimo vrednost v variabilni tovor za razhroščevanje // Serial.println (koristni tovor); // Natisni koristno tovor za odpravljanje napak, sicer komentiraj obe vrstici
Te vrstice sem komentiral, saj so potrebne samo za testiranje. Ko se prepričate, da lahko ESP8266 pridobi podatke JSON, je čas za fraziranje podatkov. Kot lahko vidite, je teh podatkov ogromno in večina vrednosti je neuporabna, razen tistih, ki so za nas potrebne, kot so datum, čas, temperatura in vlažnost.
Torej uporabljamo knjižnico JSON Arduino za ločevanje potrebnih vrednosti in shranjevanje v spremenljivko. To je mogoče, ker so vrednosti v datoteki JSON dodeljene kot pari imenskih vrednosti. To ime je torej niz, ki bo vseboval zahtevano vrednost.
Za to se moramo premakniti na spletno mesto, ki bo analiziralo datoteko JSON in nam dalo kodo Arduino. Da, tako enostavno je. Pojdite na https://arduinojson.org/assistant/ in prilepite datoteko JSON, ki smo jo naložili v brskalnik, in pritisnite enter. Po končanem je moj spodaj izgledal nekako takole
Pomaknite se navzdol, da si ogledate program za fraze, ki se ustvari samodejno
Vse, kar morate storiti, je, da izberete spremenljivko, ki jo želite, jih kopirate in prilepite na svoj Arduino IDE, kot sem naredil tukaj
/ * Podatki o fraziranju z uporabo knjižnice JSON * / // Uporabite https://arduinojson.org/assistant/, da dobite vrednosti fraziranja za niz 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 ()); / * Konec fraziranja podatkov * / // Vrednost sin naslovite na želene spremenljivke JsonObject & current_observation = root; // pod current_observation JsonObject & current_observation_observation_location = current_observation; // pod opazovanjem_lokacije const char * current_observation_station_id = current_observation; // "ICHENNAI1" // dobimo lokacijske podatke const char * current_observation_local_time_rfc822 = current_observation; // Lokalni čas // dobimo lokalni čas const char * current_observation_temperature_string = current_observation; // "32,7 C (90,7 F)" // dobimo vrednost temperature const char * current_observation_relative_humidity = current_observation; // "73%" // dobimo vrednost vlažnosti
Pravkar sem kopiral spremenljivke current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string in current_observation_relative_humidity . Ker nameravamo na LCD zaslonu prikazati samo te štiri podatke.
Na koncu smo iz interneta dobili podatke, ki jih potrebujemo, in jih shranili kot spremenljivko, ki jo lahko udobno uporabljamo. Za pošiljanje teh podatkov v Arduino jih moramo samo zapisati serijsko prek serijskega monitorja. Naslednje vrstice bodo storile popolnoma enako
// Natisni spremenljivke skozi serijski monitor Serial.print (current_observation_station_id); // podatke o lokaciji pošljemo na Arduino delay (100); // zakasnitev stabilnosti Serial.print (current_observation_local_time_rfc822); // pošiljanje podrobnosti lokalnega časa na Arduino delay (100); // zakasnitev stabilnosti Serial.print (current_observation_temperature_string); // podatke o temperaturi pošljemo na Arduino delay (100); // zakasnitev stabilnosti Serial.print (current_observation_relative_humidity); // podatke o vlažnosti pošljemo na Arduino delay (100); // zamuda stabilnosti
Upoštevajte, da sem uporabil Serial.print () in ne Serial.println (), saj bo ukaz Serial.println () dodal a / n in / r skupaj s podatki, ki za nas niso potrebni. Dodali smo tudi zakasnitev 10 sekund, tako da bo ESP te vrednosti Arduinu poslal le v intervalu 10 sekund.
Povezovanje ESP8266-01 z Arduino:
Doslej smo svoj ESP8266-01 programirali tako, da v intervalu 10 sekund z interneta bere zahtevane podatke in jih serijsko pošilja. Zdaj moramo ESP povezati z Arduinom, da lahko beremo te serijske podatke. Arduinu moramo dodati tudi LCD zaslon 16 * 2, da bomo lahko prikazovali podatke, prejete iz modula ESP8266. Shema vezja za povezavo modula ESP8266 z Arduinom je prikazana spodaj
Prepričajte se, da je zatič GPIO_0 prost, modul napajajte samo s 3,3-voltnim zatičem Arduino in pritisnite gumb, da vstavite modul ESP v operacijski modul. Zdaj bi moral program, ki smo ga naložili v ESP, začeti delovati, modul pa bi moral podatke pošiljati prek zaporednega zatiča na Arduino. Ti serijski zatiči so povezani s številkama 6 in 7 na Arduinu. Tako lahko za branje teh serijskih podatkov z nožic uporabimo serijsko možnost programske opreme na Arduinu.
Program in delovanje Arduino:
Na koncu te strani je podan tudi celoten program Arduino skupaj s kodo ESP. Če želite program razumeti, se lahko pomaknete navzdol in si ogledate program.
Program povezovanja je precej preprost, uporabiti moramo le serijsko knjižnico programske opreme, da podatke preberemo s pinov 6 in 7 in jih prikažemo na LCD zaslonu. Ker so podatki, ki jih prejemamo, v obliki niza, moramo uporabiti možnost podniz, da razdelimo koristno tovor na našo zahtevo ali jo po potrebi celo pretvorimo v celo število. Za začetek torej določimo nožice, na katere je povezan LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // zatiči, na katere je priključen LCD, LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Ker smo Rx in Tx zatiče ESP8266 povezali s 6 in 7- im zatičem Arduino, moramo serijo programske opreme za te zatiče inicializirati, da bomo lahko prejemali serijske podatke z njih. Imam ta imena kot ESP_Serial, lahko poimenujte jih karkoli želite
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Znotraj funkcije setup () inicializiramo serijsko komunikacijo za Serial monitor in tudi za serijsko programsko opremo. Če se lahko spomnite, smo program ESP komunicirali s hitrostjo 9600 baudov, zato moramo uporabiti enako hitrost prenosa za serijska vrata programske opreme. Za 2 sekundi na LCD-prikazovalniku prikažemo tudi majhno uvodno sporočilo.
void setup () {lcd.begin (16, 2); // uporabljamo lcd.print LCD zaslona 16 * 2 ("Arduino & ESP"); // Prikaži uvodno sporočilo Serial.begin (115200); ESP_Serial.begin (9600); zamuda (2000); lcd.clear (); }
Znotraj funkcije glavne zanke () moramo preveriti, ali ESP8266 kaj pošilja. Če je, potem preberemo niz iz ESP8266 in ga shranimo v spremenljivko, imenovano koristni tovor. Spremenljivka koristnega tovora je tipa String in vsebuje vse informacije, poslane iz modula ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Zdaj moramo ta niz razdeliti na majhne koščke, da jih lahko uporabimo za svoj namen, v tem primeru pa jih moramo razdeliti, da jih prikažemo na LCD zaslonu. To lahko enostavno storite z uporabo funkcije podniz v Arduinu. Če želite uporabljati to funkcijo podnizov, morate poznati položaj vsakega znaka. Tovor lahko natisnete na serijski monitor, da poznate položaj znakov, in z njimi kategorizirate podnize, kot je prikazano spodaj
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperatura = koristni tovor.podniz (48, 54); Vlažnost = koristni tovor.podlaga (55, 60);
Zdaj lahko nadaljujem s temi spremenljivkami, da jih natisnem na serijski monitor ali pa jih preprosto natisnem na LCD. Vendar pa jih bomo natisnili na serijski monitor in nam pomagali preveriti, ali so podnizi pravilno razdeljeni. Nato jih samo natisnemo na LCD zaslon v naslednjih vrsticah
lcd.clear (); lcd.setCursor (1, 0); lcd.print (lokalni_datum); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.tis (temperatura); lcd.setCursor (10, 1); lcd.print (vlažnost);
Naložite program na Arduino in se prepričajte, da so povezave, kot je prikazano na zgornjem vezju. Prilagodite kontrast LCD zaslona, dokler stvari ne vidite jasno. Na LCD-prikazovalniku bi morali videti uvodno sporočilo, nato pa bi morali po nekaj sekundah na LCD-zaslonu prikazati podrobnosti, kot so datum, čas, temperatura in vlažnost, kot je prikazano spodaj.
Opazite lahko tudi modro led na ESP8266, ki utripa vsakič, ko pridejo podatki. Če tega ne vidite, pomeni, da ESP ni v načinu za programiranje, poskusite s pritiskom na gumb Ponastavi ponastaviti tudi povezave.
Podobno temu lahko s katerim koli API-jem pridobite zahtevane podatke iz interneta in jih posredujete Arduinu ter obdelate svoje delo z Arduinom. V internetu je na voljo veliko API-jev in z vsemi tistimi lahko naredite neomejeno število projektov. Upam, da ste projekt razumeli in ste ga radi zgradili. Če ste naleteli na kakršno koli težavo, jih objavite v spodnjem oddelku za komentarje ali na naših forumih.
Vse naše projekte, povezane z ESP8266, lahko najdete tukaj.