- Reikalingos medžiagos:
- Kaip viskas veikia?
- ESP8266-01 programavimas:
- ESP8266-01 prijungimas prie „Arduino“:
- „Arduino“ programa ir darbas:
ESP8266-01 buvo puikus modulis, malšinantis visus mūsų troškulius dėl IOT projektų. Nuo pat išleidimo ji sukūrė stiprią bendruomenę ir tapo lengvai naudojamu, pigiu ir galingu „ Wi-Fi“ moduliu. Kita atvirojo kodo platforma, kuri yra daug populiaresnė, yra „Arduino“, aplink ją jau pastatyta daugybė projektų. Sujungus šias dvi platformas, atsivers durys daugeliui novatoriškų projektų, todėl šioje pamokoje sužinosime, kaip susieti ESP8266-01 modulį su „Arduino“. Tokiu būdu galėsime siųsti ar gauti duomenis tarp „Arduino“ ir interneto.
Šioje pamokoje mes perskaitysime laiką, datą, temperatūrą ir drėgmę iš interneto naudodami API su ESP8266-01. Tada nusiųskite šias vertes į „Arduino“ plokštę ir parodykite jas 16 * 2 skystųjų kristalų ekrane. Skamba šauniai! Taigi pradėkime.
Reikalingos medžiagos:
- „Arduino“ lenta (bet kokia versija)
- ESP8266-01
- FTDI programuotojo plokštė su 3,3 V parinktimi
- 16x2 LCD ekranas
- Potenciometras
- Paspauskite mygtuką
- Jungiamieji laidai
- Bandomoji Lenta
Kaip viskas veikia?
Prieš neriant svarbu žinoti, kaip iš tikrųjų veiks šis dalykas. Iš esmės turime pradėti nuo ESP8266-01 modulio. Mes bus naudojant Arduino IDE užprogramuoti ESP8266 ir kodas bus parašyta naudoti API skaityti JSON failą per HTTP užklausa. Tada mes suformuluosime šį JSON failą, kad iš viso JSON failo išgautume tik reikiamą informaciją.
Kai informacija bus suformuluota, mes ją išspausdinsime naudodami nuoseklųjį ryšį. Tada šios serijos linijos bus sujungtos su „Arduino“, kad „Arduino“ galėtų perskaityti informaciją, atsiųstą iš ESP8266. Kai informacija bus perskaityta ir apdorota, mes ją parodysime LCD ekrane.
Gerai, jei to nesate iki galo supratę, nes to paties mokysimės ir likusioje šios pamokos dalyje.
ESP8266-01 programavimas:
Šioje pamokoje daroma prielaida, kad turite šiek tiek patirties su ESP8266 moduliu. Jei ne, rekomenduojama perskaityti šias tris pamokas, kad galėtumėte apie tai visiškai suprasti.
- Darbo su ESP8266-01 pradžia
- ESP8266-01 programavimas naudojant AT komandas
- ESP8266-01 programavimas naudojant „Arduino IDE“ ir jos atminties mirksėjimas
Čia taip pat galite patikrinti visus mūsų ESP8266 projektus.
Čia mes ketiname užprogramuoti ESP8266-01 modulį naudodami „Arduino IDE“. Aparatinei įrangai mes naudojame FTDI plokštę su 3,3 V, kad programuotume ESP8266, nes tai aparatūrą padarys daug paprastą. ESP8266 prijungimo prie FTDI plokštės schema parodyta žemiau.
Įsitikinkite, kad laikomasi šių sąlygų
1. ESP8266-01 toleruoja tik 3,3 V, nenaudokite 5 V. Taigi nustatykite FTDI tik 3,3 V režimu.
2. GPIO_0 turi būti pagrįstas programavimo režimu
3. Atstatymo kaištis turi būti prijungtas per mygtuką prie įžeminimo kaiščio. Šį mygtuką reikia nuspausti prieš pat įkeliant kodą. Kiekvieną kartą paspaudus mygtuką ESP8266-01 modulio mėlynas šviesos diodas pakils aukštai, rodydamas, kad modulis nustatytas iš naujo.
Atlikę ryšius atidarykite „Arduino IDE“ ir patikrinkite, ar sėkmingai galite įkelti pavyzdinę programą. Jei nesate tikri, kaip naudoti „Arduino IDE“, norint įkelti programą į ESP8266, atlikite „ESP8266“ programavimą su „Arduino“, kad sužinotumėte. Šiuo metu darau prielaidą, kad sėkmingai įkėlėte mirksėjimo programą.
. Visa programa pateikiama šio puslapio pabaigoje toliau, aš juos paaiškinu kaip mažus fragmentus. Programai taip pat reikia kompiliuoti „Arduino JSON“ biblioteką, taigi, jei dar nepridėjote bibliotekos prie „Arduino IDE“, pridėkite ją atsisiųsdami iš „Arduino JSON“ bibliotekos iš „Github“.
ESP8266 turi prisijungti prie interneto, kad gautų duomenis apie datą, laiką, temperatūrą ir drėgmę. Taigi jūs turite leisti jam prisijungti prie jūsų „Wi-Fi“, įrodydami SSID ir slaptažodį žemiau esančiose eilutėse
const char * ssid = "JIO-Fi"; // Įveskite savo „Wi-Fi“ SSID const char * password = "Pas123"; // Įveskite „Wi-Fi“ slaptažodį
Funkcijos setup () viduje mes patikriname, ar ESP sugeba prisijungti prie „Wi-Fi“, jei ne, jis lauks ten amžinai, tiesiog spausdamas „Connecting..“ ant nuoseklaus monitoriaus.
while (WiFi.status ()! = WL_CONNECTED) {// Palaukite, kol bus prijungtas „Wi-Fi“ vėlavimas (1000); Serial.print („Jungiasi..“); // Spausdinti prisijungimą.. kol bus užmegztas ryšys }
Kitas žingsnis yra labai svarbus žingsnis. Jei „Wi-Fi“ ryšys yra sėkmingas, turime iškviesti „http get“ užklausą, kad skaitytumėte JSON failą iš interneto. Šioje pamokoje aš naudoju wunderground.com pateiktą API. Taigi, jei planuojate naudoti tą patį, galite prisijungti ir užsiregistruoti gauti nemokamą API raktą arba naudoti bet kurią pasirinktą API. Baigę naudoti savo API, toliau rasite nuorodą, panašią į šią
Pastaba: Pakeičiau šios nuorodos API raktą, todėl tai neveiks. Laikykite API raktą apsaugotą ir nebendrinkite.
Mano API čia naudojama norint gauti Chennai orų duomenis. Galite naudoti bet kurią API. Bet kai įkeliate API į bet kurią naršyklę, ji turėtų grąžinti JSON failą. Pavyzdžiui, mano API grąžina šį JSON failą
Jūsų gali grąžinti failą su skirtingais duomenimis. Mes galime patikrinti, ar šį JSON failą taip pat gavo mūsų ESP8266, perskaitydami jį ir spausdindami JSON serijiniame monitoriuje naudodami šias eilutes
int httpCode = http.GET (); // perduoti užklausą, jei (httpCode> 0) {// Patikrinkite grąžinamą kodą // naudingoji apkrova = http.getString (); // Vertę įrašykite į „ varibale“ naudingąjį krovinį derinimui // Serial.println (naudingoji apkrova); // Spausdinkite derinimo naudingąją apkrovą, kitaip komentuokite abi eilutes
Aš pakomentavau šias eilutes, nes jos reikalingos tik testavimui. Įsitikinę, kad ESP8266 sugeba gauti JSON duomenis, laikas suformuluoti duomenis. Kaip matote, šie duomenys yra didžiuliai ir dauguma verčių yra nenaudingos, išskyrus tas, kurios mums reikalingos, pvz., Datą, laiką, temperatūrą ir drėgmę.
Taigi mes naudojame „JSON Arduino“ biblioteką, kad atskirtume mums reikalingas vertes ir išsaugotume ją kintamajame. Tai įmanoma, nes JSON failo reikšmės priskiriamos kaip vardo vertės poros. Taigi šis vardas yra eilutė, kuri išlaikys mums reikalingą vertę.
Norėdami tai padaryti, turime persikelti į svetainę, kuri analizuos JSON failą ir suteiks mums „Arduino“ kodą. Taip, taip lengva. Eikite į https://arduinojson.org/assistant/ ir įklijuokite JSON failą, kurį įkėlėme į savo naršyklę, ir paspauskite Enter. Kai viskas bus padaryta, žemiau atrodė kažkas panašaus
Šiek tiek slinkite žemyn, kad pamatytumėte frazavimo programą, kuri sukurta automatiškai
Viskas, ką jums reikia padaryti, tai pasirinkti norimą kintamąjį, nukopijuoti juos ir įklijuoti į „Arduino IDE“, kaip aš padariau čia
/ * Duomenų formulavimas naudojant JSON biblioteką * / // Naudokite https://arduinojson.org/assistant/, kad gautumėte savo JSON eilutės formulavimo reikšmes 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 ()); / * Duomenų frazavimo pabaiga * / // Nurodykite sin reikšmę norimiems kintamiesiems JsonObject & current_observation = root; // po dabartine_pastaba JsonObject & current_observation_observation_location = current_observation; // po stebėjimo_vieta const char * current_observation_station_id = current_observation; // „ICHENNAI1“ // gaukite detalizavimo vietas const char * current_observation_local_time_rfc822 = current_observation; // Vietinis laikas // gaukite vietinį laiką const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // gaukite temperatūros vertę const char * current_observation_relative_humidity = current_observation; "73%" // gaunama drėgmės vertė
Ką tik nukopijavau kintamuosius current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string ir current_observation_relative_humidity . Kadangi mes planuojame savo LCD ekrane rodyti tik tuos keturis duomenis.
Galiausiai mes turime reikalingus duomenis iš interneto ir išsaugojome juos kaip kintamąjį, kurį galime patogiai naudoti. Norėdami išsiųsti šiuos duomenis „Arduino“, mes tiesiog parašėme juos nuosekliai per „Serial“ monitorių. Šios eilutės atliks tą patį
// Spausdinkite kintamuosius per serijinį monitorių Serial.print (current_observation_station_id); // išsiųsti vietos informaciją „Arduino delay“ (100); // stabilumo vėlavimas Serial.print (current_observation_local_time_rfc822); // išsiųskite vietinio laiko informaciją „Arduino delay“ (100); // stabilumo uždelsimas Serial.print (current_observation_temperature_string); // išsiųskite išsamią temperatūros informaciją „Arduino delay“ (100); // stabilumo uždelsimas Serial.print (current_observation_relative_humidity); // išsiųskite drėgmės detales į „Arduino delay“ (100); // stabilumo vėlavimas
Atkreipkite dėmesį, kad naudojau „ Serial.print“ (), o ne „„ Serial.println “(), nes komanda„ Serial.println “) pridės a / n ir / r kartu su mums nereikalingais duomenimis. Mes taip pat pridėjome 10 sekundžių vėlavimą, kad ESP šias vertes „Arduino“ išsiųstų tik 10 sekundžių intervalu.
ESP8266-01 prijungimas prie „Arduino“:
Iki šiol esame užprogramavę ESP8266-01 10 sekundžių intervalu perskaityti reikalingus duomenis iš interneto ir išsiųsti juos nuosekliai. Dabar mes turime susieti ESP su „Arduino“, kad galėtume perskaityti šiuos serijinius duomenis. Taip pat prie „Arduino“ turime pridėti 16 * 2 skystųjų kristalų ekraną, kad galėtume rodyti duomenis, gautus iš ESP8266 modulio. Jungimo schema, kad vartotojo sąsają, skirtą ESP8266 modulis su Arduino yra parodyta žemiau
Įsitikinkite, kad GPIO_0 kaištis liko laisvas, maitinkite modulį tik su 3,3 V „Arduino“ kaiščiu ir paspauskite mygtuką, kad ESP modulis būtų įdėtas į valdymo modulį. Dabar programa, kurią įkėlėme į ESP, turėjo pradėti veikti, o modulis duomenis turėtų siųsti serijiniu kaiščiu į „Arduino“. Šie serijiniai kaiščiai yra prijungti prie „Arduino“ kaiščių numerių 6 ir 7. Taigi, norėdami nuskaityti šiuos serijinius duomenis iš kaiščių, galime naudoti „Arduino“ programinės įrangos serijos parinktį.
„Arduino“ programa ir darbas:
Visa „ Arduino“ programa taip pat pateikiama kartu su ESP kodu šio puslapio pabaigoje. Galite slinkti žemyn, kad peržiūrėtumėte programą, arba skaitykite toliau, jei norite suprasti programą.
Sąsajos programa yra gana paprasta, mes tiesiog turime naudoti programinės įrangos nuosekliąją biblioteką, kad galėtume nuskaityti duomenis iš 6 ir 7 kontaktų ir parodyti juos LCD ekrane. Kadangi gaunami duomenys yra eilutės formatu, mes turime naudoti substringo parinktį, kad naudingoji apkrova atitiktų mūsų reikalavimus arba, jei reikia, net konvertuotų ją į sveiką skaičių. Taigi mes pradedame apibrėžti kaiščius, prie kurių prijungtas LCD ekranas.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Smeigtukai, prie kurių prijungtas LCD ekranas LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Kadangi mes sujungėme ESP8266 „Rx“ ir „Tx“ kaiščius su 6 ir 7 -uoju „Arduino“ kaiščiu, turime inicijuoti šių kaiščių programinės įrangos seriją , kad galėtume iš jų gauti nuoseklius duomenis. Turiu tai pavadinti kaip ESP_Serial, galite pavadinkite jiems viską, ko norite
„SoftwareSerial“ ESP_Serial (6,7); // Tx, Rx
Funkcijos setup () viduje mes inicijuojame nuoseklųjį nuoseklaus monitoriaus ir programinės įrangos nuoseklųjį ryšį. Jei galėtumėte prisiminti, mes padarėme ESP programą norėdami bendrauti 9600 baudos greičiu, todėl programinės įrangos nuosekliajam prievadui turime naudoti tą patį perdavimo greitį. Taip pat 2 sekundes LCD ekrane rodome nedidelį įvadinį pranešimą.
negaliojanti sąranka () {lcd.begin (16, 2); // Mes naudojame 16 * 2 skystųjų kristalų ekraną lcd.print ("Arduino & ESP"); // Rodyti įvadinį pranešimą Serial.begin (115200); ESP_Serial.begin (9600); vėlavimas (2000); lcd.clear (); }
Funkcijos main loop () viduje turime patikrinti, ar ESP8266 nieko siunčia. Jei taip, tada mes perskaitėme eilutę iš ESP8266 ir išsaugome ją kintamajame, vadinamame naudingoji apkrova. Kintamasis naudingoji apkrova yra „String“ tipo ir joje bus visa informacija, išsiųsta iš ESP8266 modulio.
while (ESP_Serial.available ()> 0) {naudingoji apkrova = ESP_Serial.readString ();
Dabar mes turime suskaidyti šią eilutę į mažus gabalėlius, kad galėtume juos naudoti savo tikslams, šiuo atveju turime juos padalyti, kad būtų rodomi LCD ekrane. Tai galima lengvai padaryti naudojant „ Subdu“ funkciją „Arduino“. Norėdami naudoti šią eilutės funkciją, turite žinoti kiekvieno simbolio padėtį. Galite sužinoti naudingąją apkrovą serijiniame monitoriuje, kad žinotumėte simbolių padėtį, ir naudodamiesi jais suskirstykite pogrupius, kaip parodyta žemiau
vietinis_datas = naudingoji apkrova.pakopa (14, 20); vietinis_ laikas = naudingoji apkrova. pakopa (26, 31); temperatūra = naudingoji apkrova. pakaitalas (48, 54); Drėgmė = naudingoji apkrova. Pakopa (55, 60);
Dabar galiu naudoti šiuos kintamuosius, norėdamas juos atsispausdinti ant nuoseklaus monitoriaus arba tiesiog atspausdinti LCD ekrane. Tačiau jų spausdinimas ant nuoseklaus monitoriaus padės mums patikrinti, ar teisingai suskirstytos apatinės eilutės. Tada mes juos tiesiog atspausdiname LCD ekrane, naudodami šias eilutes
lcd.clear (); lcd.setCursor (1, 0); lcd.print (vietinis_datas); lcd.setCursor (8, 0); lcd.print (vietinis_ laikas); lcd.setCursor (1, 1); lcd.print (temperatūra); lcd.setCursor (10, 1); lcd.print (drėgmė);
Įkelkite programą į „Arduino“ ir įsitikinkite, kad jungtys yra tokios, kaip parodyta aukščiau pateiktoje grandinės schemoje. Koreguokite LCD ekrano kontrastą, kol aiškiai matysite dalykus. Skystųjų kristalų ekrane turėtumėte pamatyti „Intro“ pranešimą, o po kelių sekundžių LCD ekrane turėtų būti rodoma tokia informacija kaip data, laikas, temperatūra ir drėgmė, kaip parodyta žemiau.
Taip pat galite pastebėti, kad mėlyna lemputė ESP8266 mirksi kiekvieną kartą, kai įeina duomenys. Jei to nematote, tai reiškia, kad ESP nėra programavimo režime, pabandykite paspausti mygtuką Atstatyti ir patikrinkite jungtis.
Panašiai kaip ir jūs galite naudoti bet kurią API, kad gautumėte reikalingus duomenis iš interneto ir juos perduotumėte „Arduino“ bei apdorotumėte savo darbą su „Arduino“. Internete yra daugybė API, o su visais galite sukurti neribotą skaičių projektų. Tikiuosi, kad supratote projektą ir patiko jį kurti. Jei susidūrėte su kokia nors problema, paskelbkite jas žemiau esančiame komentarų skyriuje arba mūsų forumuose.
Visus su ESP8266 susijusius projektus galite rasti čia.