- Potrebné materiály:
- Ako veci fungujú?
- Programovanie ESP8266-01:
- Pripojenie ESP8266-01 k Arduinu:
- Program Arduino a práca:
ESP8266-01 bol skvelý modul na uhasenie všetkých našich túžob po projektoch IOT. Od svojho uvedenia si vyvinul silnú komunitu a vyvinul sa v ľahko použiteľný, lacný a výkonný modul Wi-Fi. Ďalšou oveľa populárnejšou open-source platformou je Arduino, ktorá už má okolo seba vybudované množstvo projektov. Kombinácia týchto dvoch platforiem otvorí dvere mnohým inovatívnym projektom, preto sa v tomto tutoriále dozvieme, ako prepojiť modul ESP8266-01 s Arduino. Takto budeme môcť odosielať alebo prijímať údaje medzi Arduinom a internetom.
Pre účely tohto tutoriálu budeme čítať čas, dátum, teplotu a vlhkosť z internetu pomocou API s ESP8266-01. Potom pošlite tieto hodnoty na dosku Arduino a zobrazte ich na 16 * 2 LCD obrazovke. Znie to dobre, dobre !! Tak poďme na to.
Potrebné materiály:
- Doska Arduino (ľubovoľná verzia)
- ESP8266-01
- Programátorská doska FTDI s možnosťou napájania 3,3 V.
- 16x2 LCD
- Potenciometer
- Stlačte tlačidlo
- Pripojovacie vodiče
- Nepál
Ako veci fungujú?
Predtým, ako sa ponoríme, je dôležité vedieť, ako to v skutočnosti bude fungovať. V zásade musíme začať s modulom ESP8266-01. Na programovanie ESP8266 budeme používať Arduino IDE a kód sa napíše tak, aby používal API na čítanie súboru JSON prostredníctvom požiadavky http. Potom tento súbor JSON sformulujeme, aby sme z celého súboru JSON extrahovali iba požadované informácie.
Po formulovaní informácií ich pomocou sériovej komunikácie vytlačíme. Tieto sériové linky sa potom pripoja k Arduinu, aby Arduino mohlo čítať informácie odoslané z ESP8266. Po prečítaní a spracovaní informácií ich zobrazíme na obrazovke LCD.
Je v poriadku, ak ste tomu úplne nerozumeli, pretože to isté sa naučíme aj vo zvyšku tohto tutoriálu.
Programovanie ESP8266-01:
Tento výukový program predpokladá, že máte nejaké skúsenosti s modulom ESP8266. Ak nie, odporúča sa prečítať si nasledujúce tri návody, aby ste tomu úplne porozumeli.
- Začíname s ESP8266-01
- Programovanie ESP8266-01 pomocou AT príkazov
- Programovanie ESP8266-01 pomocou Arduino IDE a blikanie jeho pamäte
Môžete si tiež skontrolovať všetky naše projekty ESP8266 tu.
Tu budeme programovať modul ESP8266-01 pomocou Arduino IDE. Pre hardvér používame na programovanie ESP8266 dosku FTDI s napätím 3,3 V, pretože to výrazne zjednoduší hardvér. Schéma zapojenia pre pripojenie vášho ESP8266 k doske FTDI je uvedená nižšie.
Uistite sa, že sú splnené nasledujúce podmienky
1. ESP8266-01 je len 3,3V tolerantný, nepoužívajte 5V. FTDI teda nastavte iba v režime 3,3V.
2. GPIO_0 musí byť uzemnený pre režim programovania
3. Resetovací kolík by sa mal pripojiť pomocou tlačidla k uzemňovaciemu kolíku. Toto tlačidlo by ste mali stlačiť tesne pred nahraním kódu. Po každom stlačení tlačidla sa modrá LED na module ESP8266-01 rozsvieti vysoko, čo znamená, že sa modul resetoval.
Akonáhle sú pripojenia hotové, otvorte Arduino IDE a skontrolujte, či ste schopní úspešne nahrať ukážkový program. Ak si nie ste istí, ako použiť IDE Arduino na nahranie programu na ESP8266, naučte sa to podľa Programovania ESP8266 s Arduinom. V tomto okamihu predpokladám, že ste úspešne nahrali program blikania.
. Celý program je uvedený na konci tejto stránky ďalej. Vysvetľujem ich ako malé úryvky. Program tiež vyžaduje kompiláciu knižnice Arduino JSON, takže ak ste knižnicu do svojho Arduino IDE už nepridali, pridajte ju stiahnutím z knižnice Arduino JSON z Githubu.
ESP8266 sa musí spojiť s internetom, aby získal údaje o dátume, čase, teplote a vlhkosti. Musíte mu teda povoliť pripojenie k sieti Wi-Fi preukázaním identifikátora SSID a hesla v nasledujúcich riadkoch
const char * ssid = "JIO-Fi"; // Zadajte svoje Wi-Fi SSID const char * heslo = "Pas123"; // Zadajte svoje heslo Wi-Fi
Vnútri setup () funkcie sme zistiť, či ESP je možné sa pripojiť pomocou Wi-Fi, ak nie, bude tam čakať večne len vytlačením "Connecting.." na sériovom monitore.
while (WiFi.status ()! = WL_CONNECTED) {// Počkajte s oneskorením pripojenia Wi-Fi (1000); Serial.print ("Pripája sa.."); // Tlačiť Pripojenie.. až do nadviazania spojenia }
Ďalším krokom je veľmi dôležitý krok. Ak je pripojenie Wi-Fi úspešné, musíme vyvolať požiadavku http get na načítanie súboru JSON z internetu. V tomto tutoriále používam API poskytované wunderground.com. Takže ak plánujete použiť to isté, môžete sa dostať do odkazu a registrácie bezplatného kľúča API alebo použiť ľubovoľné API podľa vášho výberu. Po dokončení pomocou rozhrania API skončíte s odkazom, ako je tento, nižšie
Poznámka: Zmenil som kľúč API tohto odkazu, takže to nebude fungovať. Udržujte svoj kľúč API zabezpečený a nezdieľajte ho.
Moje API sa tu používa na získanie údajov o počasí v Chennai. Môžete použiť akékoľvek API. Keď však načítate API do ľubovoľného prehľadávača, mal by vrátiť súbor JSON. Napríklad moje API vracia nasledujúci súbor JSON
Váš môže vrátiť súbor s rôznymi údajmi. Môžeme skontrolovať, či tento súbor JSON prijíma aj náš ESP8266, a to tak, že si ho prečítame a vytlačíme JSON na náš sériový monitor pomocou nasledujúcich riadkov
int httpCode = http.GET (); // odovzdať požiadavku na získanie if (httpCode> 0) {// Skontrolujte návratový kód // payload = http.getString (); // Uložte hodnotu na varibale užitočné zaťaženie pre ladenie // Serial.println (užitočné zaťaženie); // Vytlačí užitočné zaťaženie na odladenie, inak okomentujte oba riadky
Tieto riadky som okomentoval, pretože sú potrebné iba na testovanie. Keď sa uistíte, že ESP8266 je schopný získať údaje JSON, je čas na frázovanie údajov. Ako vidíte, tieto údaje sú obrovské a väčšina hodnôt je zbytočná, okrem tých, ktoré sú pre nás požadované, ako sú dátum, čas, teplota a vlhkosť.
Preto používame knižnicu JSON Arduino na oddelenie požadovaných hodnôt a uloženie do premennej. Je to možné, pretože hodnoty v súbore JSON sú priradené ako páry názvov hodnota. Toto meno je teda reťazec, ktorý bude obsahovať požadovanú hodnotu.
Aby sme to dosiahli, musíme prejsť na webovú stránku, ktorá bude analyzovať súbor JSON a dá nám Arduino kód. Áno, je to také ľahké. Prejdite na stránku https://arduinojson.org/assistant/ a vložte súbor JSON, ktorý sme načítali do nášho prehliadača, a stlačte kláves Enter. Keď bude hotové, dole vyzeralo asi takto niečo
Posunutím trochu nadol zobrazíte program vytvárania fráz, ktorý sa vytvára automaticky
Musíte len zvoliť požadovanú premennú, skopírovať ich a vložiť do vášho Arduino IDE, ako som to urobil tu
/ * Dáta frázovania pomocou knižnice JSON librarey * / // Použite https://arduinojson.org/assistant/ na získanie hodnôt frázovania pre váš reťazec 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 ()); / * Koniec dát frázovania * / // Hodnotu sin adresujte požadovaným premenným JsonObject & current_observation = root; // pod current_observation JsonObject & current_observation_observation_location = current_observation; // pod pozorovacím_miestením const char * current_observation_station_id = current_observation; // „ICHENNAI1“ // získanie informácií o polohe const char * current_observation_local_time_rfc822 = current_observation; // Miestny čas // získanie miestneho času const char * current_observation_temperature_string = current_observation; // „90,7 F (32,6 C)“ // získať hodnotu teploty const char * current_observation_relative_humidity = current_observation; // „73%“ // získa hodnotu vlhkosti
Práve som skopíroval premenné current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string a current_observation_relative_humidity . Pretože plánujeme na našej LCD obrazovke zobraziť iba tieto štyri údaje.
Nakoniec sme z internetu získali údaje, ktoré potrebujeme, a uložili sme ich ako premennú, ktorú môžeme pohodlne použiť. Aby sme mohli tieto údaje poslať do Arduina, stačí ich zapísať sériovo cez sériový monitor. Nasledujúce riadky urobia presne to isté
// Tlač premenných cez sériový monitor Serial.print (current_observation_station_id); // pošle podrobnosti o polohe na Arduino delay (100); // oneskorenie stability Serial.print (current_observation_local_time_rfc822); // pošle podrobnosti miestneho času na Arduino delay (100); // oneskorenie stability Serial.print (current_observation_temperature_string); // pošle údaje o teplote na Arduino delay (100); // oneskorenie stability Serial.print (current_observation_relative_humidity); // pošle podrobnosti o vlhkosti na Arduino delay (100); // oneskorenie stability
Všimnite si, že som použil Serial.print () a nie Serial.println (), pretože príkaz Serial.println () pripojí a / n a / r spolu s údajmi, ktoré pre nás nie sú potrebné. Pridali sme tiež oneskorenie 10 sekúnd, aby ESP tieto hodnoty odosielal do Arduina iba v intervale 10 sekúnd.
Pripojenie ESP8266-01 k Arduinu:
Doteraz sme programovali náš ESP8266-01 tak, aby načítal požadované dáta z internetu v intervale 10 sekúnd a sériovo ich odosielal. Teraz musíme prepojiť ESP s Arduinom, aby sme mohli načítať tieto sériové údaje. Taktiež musíme do Arduina pridať 16 * 2 LCD displej, aby sme mohli zobrazovať údaje prijaté z modulu ESP8266. Schéma zapojenia rozhrania pre ESP8266 modul s Arduino je uvedené nižšie
Uistite sa, že kolík GPIO_0 zostáva voľný, napájajte modul iba s kolíkom 3,3 V Arduino a stlačením tlačidla vložte modul ESP do operačného modulu. Teraz mal program, ktorý sme nahrali do ESP, začať pracovať a modul by mal posielať dáta cez sériový pin do Arduina. Tieto sériové piny sú pripojené k pinom číslo 6 a 7 na Arduine. Na načítanie týchto sériových údajov z pinov teda môžeme použiť softvérovú sériovú voľbu na Arduine.
Program Arduino a práca:
Kompletné Arduino Program je tiež uvedený spolu s kódom na konci tejto stránky ESP. Môžete sa posúvať nadol, aby ste program prehliadli, alebo si prečítať ďalšie, ak chcete programu porozumieť.
Program prepojenia je dosť jednoduchý, musíme len použiť softvérovú sériovú knižnicu na načítanie údajov z pinov 6 a 7 a ich zobrazenie na obrazovke LCD. Pretože prijímané údaje sú vo formáte reťazca, musíme použiť voľbu podreťazec, aby sme užitočné zaťaženie rozdelili podľa našich požiadaviek alebo v prípade potreby dokonca previedli na celé číslo. Tak sme sa začať tým, že definuje kolíky, ku ktorému je pripojená LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Kolíky, ku ktorým je pripojený LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Pretože sme spojení s Rx a Tx kolíky ESP8266 sa 6. a 7. ročník pin z Arduino musíme inicializácii sériového softvéru pre tých piny, takže môžeme prijímať sériová dáta z nich.I majú názvy to ako ESP_Serial, môžete pomenujte ich, ako len chcete
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Vo vnútri funkcie setup () inicializujeme sériovú komunikáciu pre Serial monitor a tiež pre softvérové sériové rozhranie. Ak si spomeniete, vytvorili sme program ESP tak, aby komunikoval s prenosovou rýchlosťou 9600, takže musíme používať rovnakú prenosovú rýchlosť aj pre softvérový sériový port. Na 2 sekundy tiež zobrazíme malú úvodnú správu na LCD displeji.
void setup () {lcd.begin (16, 2); // Používame 16 * 2 LCD displej lcd.print ("Arduino a ESP"); // Zobraziť úvodnú správu Serial.begin (115200); ESP_Serial.begin (9600); meškanie (2000); lcd.clear (); }
Vo vnútri funkcie main loop () musíme skontrolovať, či ESP8266 niečo neposiela. Ak je, potom načítame reťazec z ESP8266 a uložíme ho do premennej s názvom užitočné zaťaženie. Variabilné užitočné zaťaženie je typu String a bude obsahovať úplné informácie odoslané z modulu ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Teraz musíme tento reťazec rozdeliť na malé kúsky, aby sme ich mohli použiť na vlastné účely, v takom prípade ich musíme rozdeliť, aby sa zobrazili na obrazovke LCD. To možno vykonať jednoducho pomocou podreťazec funkcie v Arduino. Ak chcete používať túto funkciu podreťazca, musíte poznať polohu každého znaku. Môžete tlačiť užitočné zaťaženie na sériový monitor, aby ste poznali polohu znakov, a použiť ich na kategorizáciu podreťazcov, ako je uvedené nižšie
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); teplota = užitočné zaťaženie. reťazec (48, 54); Vlhkosť = užitočné zaťaženie.substring (55, 60);
Teraz môžem pokračovať a použiť tieto premenné buď na ich vytlačenie na sériovom monitore, alebo iba na ich vytlačenie na LCD. Ich tlač na Sériový monitor nám však pomôže o skontrolovať, či sú podreťazce správne rozdelené. Ďalej ich už len vytlačíme na LCD displeji pomocou nasledujúcich riadkov
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.tlač (teplota); lcd.setCursor (10, 1); lcd.print (vlhkosť);
Nahrajte program do Arduina a skontrolujte, či sú pripojenia uvedené v schéme zapojenia vyššie. Upravte kontrast LCD displeja tak, aby ste veci videli zreteľne. Na LCD by ste mali vidieť úvodnú správu a potom by sa po niekoľkých sekundách mali na obrazovke LCD zobraziť podrobnosti ako dátum, čas, teplota a vlhkosť, ako je to znázornené nižšie.
Môžete si tiež všimnúť, že modrá LED na ESP8266 bliká zakaždým, keď prichádzajú dáta. Ak to nevidíte, znamená to, že ESP nie je v programovacom režime, skúste stlačiť tlačidlo Reset a tiež skontrolovať spojenia.
Podobne môžete použiť akékoľvek API na získanie požadovaných údajov z internetu a ich prenos do Arduina a na spracovanie vašej práce s Arduinom. Na internete je k dispozícii veľa rozhraní API a so všetkými môžete vytvoriť neobmedzený počet projektov. Dúfam, že ste pochopili projekt a páčilo sa vám jeho zostavenie. Ak ste narazili na akýkoľvek problém, uverejnite ich v sekcii komentárov nižšie alebo na našom fóre.
Tu nájdete všetky naše projekty spojené s ESP8266.