- Potrebni materijali:
- Kako stvari funkcioniraju?
- Programiranje ESP8266-01:
- Povezivanje ESP8266-01 s Arduinom:
- Arduino program i rad:
ESP8266-01 sjajan je modul za utaživanje svih naših žeđi za IOT projektima. Od svog objavljivanja razvio je snažnu zajednicu i razvio se u jednostavan, jeftin i moćan Wi-Fi modul. Još jedna mnogo popularnija platforma s otvorenim kodom je Arduino, koja već ima na tone projekata izgrađenih oko sebe. Kombinacija ove dvije platforme otvorit će vrata mnogim inovativnim projektima, pa ćemo u ovom vodiču naučiti kako povezati modul ESP8266-01 s Arduinom. Na taj ćemo način moći slati ili primati podatke između Arduina i Interneta.
U svrhu ovog vodiča očitat ćemo vrijeme, datum, temperaturu i vlažnost s Interneta pomoću API-ja s ESP8266-01. Zatim pošaljite ove vrijednosti na ploču Arduino i prikažite ih na LCD zaslonu 16 * 2. Zvuči cool !! Pa krenimo.
Potrebni materijali:
- Arduino ploča (bilo koja verzija)
- ESP8266-01
- FTDI ploča programera s opcijom 3.3V
- LCD 16x2
- Potenciometar
- Pritisnite tipku
- Spajanje žica
- Breadboard
Kako stvari funkcioniraju?
Prije nego što zaronimo, važno je znati kako će zapravo ta stvar funkcionirati. U osnovi moramo početi s modulom ESP8266-01. Koristit ćemo Arduino IDE za programiranje ESP8266, a kôd će biti napisan za korištenje API-ja za čitanje JSON datoteke putem http zahtjeva. Tada ćemo ovu JSON datoteku sročiti kako bismo iz cijele JSON datoteke izdvojili samo potrebne podatke.
Nakon što se podaci izraze, ispisat ćemo ih pomoću serijske komunikacije. Te serijske linije tada će biti povezane s Arduinom, kako bi Arduino mogao čitati informacije poslane s ESP8266. Jednom kada se podaci pročitaju i obrade, prikazat ćemo ih na LCD zaslonu.
U redu je, ako ovo niste potpuno razumjeli, jer ćemo to učiti i u ostatku ovog vodiča.
Programiranje ESP8266-01:
Ovaj vodič pretpostavlja da imate određeno iskustvo s modulom ESP8266. Ako ne, onda je preporučljivo pročitati sljedeća tri vodiča kako biste o tome u potpunosti razumjeli.
- Početak rada s ESP8266-01
- Programiranje ESP8266-01 pomoću AT naredbi
- Programiranje ESP8266-01 pomoću Arduino IDE-a i bljeskanje njegove memorije
Ovdje možete provjeriti i sve naše projekte ESP8266.
Ovdje ćemo programirati modul ESP8266-01 pomoću Arduino IDE-a. Za hardver koristimo FTDI ploču s 3.3V za programiranje ESP8266, jer će to učiniti hardver mnogo jednostavnijim. Shema spojeva za spajanje vašeg ESP8266 s FTDI pločom prikazana je u nastavku.



Provjerite jesu li ispunjeni sljedeći uvjeti
1. ESP8266-01 tolerira samo 3,3 V, nemojte koristiti 5 V. Dakle, postavite FTDI samo u način rada 3,3 V.
2. GPIO_0 mora biti uzemljen za način programiranja
3. Pin za resetiranje trebao bi biti povezan gumbom s uzemljenjem. Ovaj gumb treba pritisnuti neposredno prije prijenosa koda. Svaki put kad se pritisne tipka, plava LED na modulu ESP8266-01 postat će visoka, što znači da je modul resetiran.
Nakon što su veze gotove, otvorite Arduino IDE i provjerite možete li uspješno prenijeti uzorak programa. Ako niste sigurni kako koristiti Arduino IDE za prijenos programa na ESP8266, slijedite Programiranje ESP8266 s Arduinom da biste ga naučili. U ovom trenutku pretpostavljam da ste uspješno prenijeli program za treptanje.
. Kompletni program dan je na kraju ove stranice dalje u nastavku. Objašnjavam ih kao male isječke. Program također zahtijeva kompajliranje Arduino JSON knjižnice, pa ako već niste dodali knjižnicu u svoj Arduino IDE, dodajte je preuzimanjem iz Arduino JSON knjižnice s Github-a.
ESP8266 se mora povezati s internetom kako bi dobio podatke o datumu, vremenu, temperaturi i vlažnosti. Dakle, morate mu omogućiti povezivanje s Wi-Fi mrežom dokazivanjem SSID-a i lozinke u donjim redovima
const char * ssid = "JIO-Fi"; // Unesite svoj Wi-Fi SSID const char * password = "Pas123"; // Unesite svoju lozinku za Wi-Fi
Unutar postava () funkciju možemo provjeriti da li je ESP može se povezati s Wi-Fi, ako ne i on će čekati tamo zauvijek samo tiskanjem „Povezivanje..” na serijski monitor.
while (WiFi.status ()! = WL_CONNECTED) {// Pričekajte dok se Wi-Fi ne poveže odgoda (1000); Serial.print ("Povezivanje.."); // Ispis povezivanja.. dok se veza ne uspostavi }
Sljedeći korak je vrlo važan korak. Ako je Wi-Fi veza uspješna, moramo pozvati http zahtjev za čitanje datoteke JSON s interneta. U ovom uputstvu koristim API koji pruža wunderground.com. Dakle, ako planirate koristiti isti, možete se povezati i prijaviti za besplatni API ključ ili koristiti bilo koji API po vašem izboru. Nakon što završite s API-jem, na kraju ćete dobiti vezu poput ove u nastavku
Napomena: Promijenio sam API ključ ove veze pa ovo neće raditi. Neka vaš API ključ bude osiguran i ne dijelite ga.
Moj se API ovdje koristi za dobivanje vremenskih podataka Chennaija. Možete koristiti bilo koji API. Ali kada učitate API u bilo kojem pregledniku, trebao bi vratiti JSON datoteku. Na primjer, moj API vraća sljedeću JSON datoteku
Vaš bi mogao vratiti datoteku s različitim podacima. Možemo li provjeriti prima li ovu JSON datoteku i naš ESP8266 čitanjem i ispisivanjem JSON-a na našem serijskom monitoru pomoću sljedećih redaka
int httpCode = http.GET (); // prosljeđivanje zahtjeva za dobivanje if (httpCode> 0) {// Provjera povratnog koda // payload = http.getString (); // Spremimo vrijednost na varijabla korisnog tereta za otklanjanje pogrešaka // Serial.println (korisni teret); // Ispis korisnog tereta za otklanjanje pogrešaka, inače komentirajte oba retka
Komentirao sam ove retke jer su potrebni samo za testiranje. Nakon što se uvjerite da ESP8266 može dobiti JSON podatke, vrijeme je za fraziranje podataka. Kao što vidite, ovi su podaci ogromni i većina vrijednosti je beskorisna, osim onih koje su nam potrebne, poput datuma, vremena, temperature i vlažnosti.
Dakle, koristimo JSON Arduino knjižnicu da odvojimo vrijednosti potrebne za nas i pohranimo je u varijablu. To je moguće jer su vrijednosti u JSON datoteci dodijeljene kao parovi vrijednosti imena. Dakle, ovo je ime niz koji će sadržavati vrijednost potrebnu za nas.
Da bismo to učinili, moramo preći na web mjesto koje će analizirati JSON datoteku i dati nam Arduino kôd. Da, lako je to. Idite na https://arduinojson.org/assistant/ i zalijepite JSON datoteku koju smo učitali u naš preglednik i pritisnite enter. Kad su završili, moje je izgledalo otprilike ovako u nastavku

Pomaknite se prema dolje da biste vidjeli program za izradu fraza koji se automatski kreira

Sve što trebate učiniti je odabrati željenu varijablu, kopirati ih i zalijepiti na svoj Arduino IDE, kao što sam to učinio ovdje
/ * Podaci o fraziranju pomoću JSON knjižnice * / // Upotrijebite https://arduinojson.org/assistant/ da biste dobili vrijednosti fraziranja za vaš JSON niz 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 ()); / * Kraj fraziranja podataka * / // Adresa vrijednosti sinhronizira na željene varijable JsonObject & current_observation = root; // pod current_observation JsonObject & current_observation_observation_location = current_observation; // pod nadzorom_lokacija const char * current_observation_station_id = current_observation; // "ICHENNAI1" // dobivanje podataka o lokaciji const char * current_observation_local_time_rfc822 = current_observation; // Lokalno vrijeme // dobivamo lokalno vrijeme const char * current_observation_temperature_string = current_observation; // "32,7 C (90,7 F)" // dobivamo vrijednost temperature const char * current_observation_relative_humidity = current_observation; // "73%" // dobije se vrijednost vlage
Upravo sam kopirao varijable current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string i current_observation_relative_humidity . Budući da na našem LCD zaslonu planiramo prikazati samo ta četiri podataka.
Napokon, podatke koji su nam potrebni dobili smo s interneta i spremili smo ih kao varijablu koju možemo ugodno koristiti. Da bismo te podatke poslali Arduinu, jednostavno ih serijski zapisujemo putem serijskog monitora. Sljedeći redovi učinit će potpuno isto
// Ispis varijabli kroz serijski monitor Serial.print (current_observation_station_id); // slanje podataka o lokaciji na Arduino delay (100); // odgoda stabilnosti Serial.print (current_observation_local_time_rfc822); // pošaljite podatke o lokalnom vremenu u Arduino delay (100); // odgoda stabilnosti Serial.print (current_observation_temperature_string); // podatke o temperaturi pošaljite na Arduino delay (100); // kašnjenje stabilnosti Serial.print (current_observation_relative_humidity); // poslati podatke o vlažnosti na Arduino delay (100); // kašnjenje stabilnosti
Imajte na umu da sam koristio Serial.print (), a ne Serial.println () jer će naredba Serial.println () dodati a / n i / r zajedno s podacima koji za nas nisu potrebni. Također smo dodali kašnjenje od 10 sekundi tako da će ESP poslati ove vrijednosti Arduinu samo u intervalu od 10 sekundi.
Povezivanje ESP8266-01 s Arduinom:
Do sada smo programirali naš ESP8266-01 za čitanje potrebnih podataka s interneta u razmaku od 10 sekundi i njihovo serijsko slanje. Sada moramo povezati ESP s Arduinom kako bismo mogli čitati ove serijske podatke. Također, Arduinu moramo dodati LCD zaslon 16 * 2 kako bismo mogli prikazivati podatke primljene od modula ESP8266. Shema spoja za povezivanje modula ESP8266 s Arduinom prikazana je u nastavku

Provjerite je li pino GPIO_0 ostao slobodan, napajajte modul samo 3,3 V pinom Arduina i pritisnite gumb da biste stavili ESP modul u operativni modul. Sada je program koji smo prenijeli na ESP trebao početi raditi, a modul bi trebao podatke slati serijskim pinom u Arduino. Ti su serijski pinovi povezani s pinovima 6 i 7 na Arduinu. Tako možemo koristiti serijsku opciju softvera na Arduinu za čitanje ovih serijskih podataka s igla.

Arduino program i rad:
Kompletan Arduino Program također se daje zajedno s ESP kodom na kraju ove stranice. Možete se pomaknuti prema dolje da biste pogledali program ili čitali dalje ako želite razumjeti program.
Program povezivanja prilično je jednostavan, samo moramo koristiti serijsku biblioteku softvera za čitanje podataka s pinova 6 i 7 i njihovo prikazivanje na LCD zaslonu. Budući da su podaci koji se primaju u formatu niza, moramo upotrijebiti opciju podniza za razbijanje korisnog tereta prema našem zahtjevu ili čak pretvaranje u cijeli broj ako je potrebno. Dakle, započinjemo definiranjem pinova na koje je povezan LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pribadače na koje je povezan LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Budući da smo spojeni na igle RX i TX od ESP8266 sa 6 i 7 -og pin od Arduino moramo inicijalizacija Software serijski za one igle, tako da možemo primiti serijski podatke iz njih.i imaju imena to kao ESP_Serial, možete dajte im imena kako god želite
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Unutar funkcije setup () iniciramo serijsku komunikaciju za serijski monitor, a također i za serijsku verziju softvera. Ako se sjećate, napravili smo ESP program za komunikaciju brzinom od 9600 baudova, tako da moramo koristiti istu brzinu prijenosa za serijski port softvera. Također prikazujemo malu uvodnu poruku na LCD-u tijekom 2 sekunde.
void setup () {lcd.begin (16, 2); // Koristimo lcd.print LCD zaslona 16 * 2 ("Arduino & ESP"); // Prikazivanje uvodne poruke Serial.begin (115200); ESP_Serial.begin (9600); kašnjenje (2000); lcd.clear (); }
Unutar funkcije glavne petlje () moramo provjeriti šalje li ESP8266 nešto. Ako jest, tada čitamo niz iz ESP8266 i spremamo ga u varijablu koja se naziva korisni teret. Varijabla korisnog tereta je tipa String i sadržavat će sve podatke poslane iz modula ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Sada ovaj niz moramo podijeliti na male dijelove kako bismo ih mogli koristiti u svoje svrhe, u ovom slučaju moramo ih podijeliti za prikaz na LCD zaslonu. To može biti učinjeno jednostavno pomoću podniza funkciju u Arduino. Morate znati položaj svakog znaka da biste koristili ovu funkciju podniza . Nosivost možete ispisati na serijski monitor da biste znali položaj znakova i pomoću njih kategorizirali podnizove kao što je prikazano dolje
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperatura = korisni teret.supstring (48, 54); Vlaga = korisni teret.podstava (55, 60);
Sada mogu naprijed i upotrijebiti ove varijable ili za ispis na serijski monitor ili samo za ispis na LCD. Međutim, njihov ispis na serijskom monitoru pomoći će nam da provjerimo jesu li podnizovi ispravno podijeljeni. Dalje ih samo ispisujemo na LCD zaslon pomoću sljedećih redaka
lcd.clear (); lcd.setCursor (1, 0); lcd.print (lokalni_datum); lcd.setCursor (8, 0); lcd.print (lokalno_ vrijeme); lcd.setCursor (1, 1); lcd.ispis (temperatura); lcd.setCursor (10, 1); lcd.print (vlaga);
Prenesite program na Arduino i provjerite jesu li veze kao što je prikazano na gornjoj shemi spojeva. Podesite kontrast LCD zaslona dok stvari ne vidite jasno. Trebali biste vidjeti uvodnu poruku na LCD-u, a zatim bi se nakon nekoliko sekundi detalji poput datuma, vremena, temperature i vlage trebali prikazati na LCD zaslonu kao što je prikazano dolje.

Također možete primijetiti plavu led na ESP8266 kako trepće svaki put kad uđu podaci. Ako ovo ne možete vidjeti, znači da ESP nije u modu programiranja, pokušajte pritisnuti tipku za poništavanje i provjeriti veze.
Slično ovome možete koristiti bilo koji API za dobivanje potrebnih podataka s Interneta i njihovo slanje u Arduino i obradu vašeg rada s Arduinom. Na internetu je dostupno mnoštvo API-ja, a sa svima njima možete napraviti neograničen broj projekata. Nadam se da ste razumjeli projekt i uživali u njegovoj izradi. Ako ste se suočili s bilo kojim problemom, objavite ih u odjeljku za komentare u nastavku ili na našim forumima.
Sve naše projekte povezane s ESP8266 možete pronaći ovdje.
