- Nepieciešamie materiāli:
- Kā lietas darbojas?
- ESP8266-01 programmēšana:
- ESP8266-01 savienošana ar Arduino:
- Arduino programma un darbs:
ESP8266-01 ir bijis lielisks modulis, lai remdētu visas mūsu slāpes pēc IOT projektiem. Kopš izlaišanas tā ir izveidojusi spēcīgu kopienu un pārtapusi par viegli lietojamu, lētu un jaudīgu Wi-Fi moduli. Vēl viena atvērtā koda platforma, kas ir daudz populārāka, ir Arduino, tai jau apkārt ir izveidoti daudzi projekti. Apvienojot šīs divas platformas, tiks atvērtas durvis daudziem novatoriskiem projektiem, tāpēc šajā apmācībā mēs uzzināsim, kā saskarni ESP8266-01 ar Arduino. Tādā veidā mēs varēsim nosūtīt vai saņemt datus starp Arduino un internetu.
Šīs apmācības vajadzībām mēs lasīsim laiku, datumu, temperatūru un mitrumu no interneta, izmantojot API ar ESP8266-01. Pēc tam nosūtiet šīs vērtības uz Arduino dēli un parādiet tās 16 * 2 LCD ekrānā. Labi izklausās forši !! Tātad sāksim.
Nepieciešamie materiāli:
- Arduino dēlis (jebkura versija)
- ESP8266-01
- FTDI programmētāja plate ar 3.3V opciju
- 16x2 LCD
- Potenciometrs
- Uzspied pogu
- Savienojošie vadi
- Maizes dēlis
Kā lietas darbojas?
Pirms ienirt, ir svarīgi zināt, kā patiesībā šī lieta darbosies. Būtībā mums jāsāk ar moduli ESP8266-01. Mēs izmantosim Arduino IDE, lai ieprogrammētu ESP8266, un kods tiks rakstīts, lai izmantotu API, lai lasītu JSON failu, izmantojot http pieprasījumu. Tad mēs formulēsim šo JSON failu, lai no visa JSON faila iegūtu tikai nepieciešamo informāciju.
Kad informācija ir formulēta, mēs to izdrukāsim, izmantojot sērijveida sakarus. Pēc tam šīs sērijas līnijas tiks savienotas ar Arduino, lai Arduino varētu nolasīt no ESP8266 nosūtīto informāciju. Kad informācija ir izlasīta un apstrādāta, mēs to parādīsim LCD ekrānā.
Tas ir labi, ja jūs to vēl neesat pilnībā sapratis, jo mēs mācīsimies to pašu arī turpmākajā apmācībā.
ESP8266-01 programmēšana:
Šajā apmācībā tiek pieņemts, ka jums ir zināma pieredze ar moduli ESP8266. Ja nē, ieteicams izlasīt trīs tālāk minētās apmācības, lai par to pilnībā saprastu.
- Darba sākšana ar ESP8266-01
- ESP8266-01 programmēšana, izmantojot AT komandas
- ESP8266-01 programmēšana, izmantojot Arduino IDE, un tā atmiņas mirgošana
Šeit varat arī pārbaudīt visus mūsu ESP8266 projektus.
Šeit mēs ieprogrammēsim moduli ESP8266-01, izmantojot Arduino IDE. Aparatūrai mēs izmantojam FTDI paneli ar 3.3V, lai ieprogrammētu ESP8266, jo tas aparatūru padarīs daudz vienkāršu. Ķēdes shēma ESP8266 savienošanai ar FTDI plāksni ir parādīta zemāk.
Pārliecinieties, vai ir izpildīti šādi nosacījumi
1. ESP8266-01 ir tikai 3.3V tolerants, nelietojiet 5V. Tātad iestatiet FTDI tikai 3,3 V režīmā.
2. Programmēšanas režīmam jābūt iezemētam GPIO_0
3. Atiestatīšanas tapai jābūt savienotai caur pogu ar iezemēto tapu. Šī poga jānospiež tieši pirms koda augšupielādes. Katru reizi, kad tiek nospiesta poga, ESP8266-01 moduļa zilā gaismas diode paaugstināsies, norādot, ka modulis ir atiestatīts.
Kad savienojumi ir pabeigti, atveriet Arduino IDE un pārbaudiet, vai jūs varat veiksmīgi augšupielādēt programmas paraugu. Ja neesat pārliecināts, kā izmantot Arduino IDE, lai augšupielādētu programmu ESP8266, izpildiet Programming ESP8266 ar Arduino, lai to iemācītos. Šajā brīdī pieņemu, ka esat veiksmīgi augšupielādējis mirkšķināšanas programmu.
. Pilna programma ir dota šīs lapas beigās, tālāk es tos izskaidroju kā mazus fragmentus. Programmai ir nepieciešama arī Arduino JSON bibliotēkas kompilēšana, tādēļ, ja bibliotēku jau neesat pievienojis savam Arduino IDE, pievienojiet to, lejupielādējot no Arduino JSON bibliotēkas no Github.
ESP8266 ir jāizveido savienojums ar internetu, lai iegūtu datus par datumu, laiku, temperatūru un mitrumu. Tāpēc jums jāļauj tam izveidot savienojumu ar jūsu Wi-Fi, pierakstot SSID un paroli zemāk esošajās rindiņās
const char * ssid = "JIO-Fi"; // Ievadiet savu Wi-Fi SSID const char * password = "Pas123"; // Ievadiet savu Wi-Fi paroli
Funkcijas setup () iekšpusē mēs pārbaudām, vai ESP spēj izveidot savienojumu ar Wi-Fi, ja nē, tas tur gaidīs uz visiem laikiem, tikai sērijveida monitorā drukājot “Connecting..”.
while (WiFi.status ()! = WL_CONNECTED) {// Pagaidiet, kamēr Wi-Fi ir savienots, aizkave (1000); Serial.print ("Savienojas.."); // Drukāt savienojumu.. līdz savienojums ir izveidots }
Nākamais solis ir ļoti svarīgs solis. Ja Wi-Fi savienojums ir veiksmīgs, mums jāizsauc http get pieprasījums, lai lasītu JSON failu no interneta. Šajā apmācībā es izmantoju API, ko nodrošina wunderground.com. Tātad, ja plānojat izmantot to pašu, varat piekļūt saitei un reģistrēties bezmaksas API atslēgai vai izmantot jebkuru jūsu izvēlēto API. Kad būsiet pabeidzis darbu ar savu API, jūs atradīsit zemāk redzamo saiti
Piezīme. Esmu mainījis šīs saites API atslēgu, tāpēc tas nedarbosies. Saglabājiet savu API atslēgu drošu un nedalieties.
Mana API šeit tiek izmantota, lai iegūtu Chennai laika apstākļu datus. Jūs varat izmantot jebkuru API. Bet, ielādējot API jebkurā pārlūkprogrammā, tam jāatgriež JSON fails. Piemēram, mana API atgriež šo JSON failu
Iespējams, ka atgriezīsit failu ar dažādiem datiem. Mēs varam pārbaudīt, vai šo JSON failu ir saņēmis arī mūsu ESP8266, izlasot to un izdrukājot JSON uz mūsu sērijveida monitora, izmantojot šādas rindas.
int httpCode = http.GET (); // nodot saņemšanas pieprasījumu, ja (httpCode> 0) {// Pārbaudiet atgriežamo kodu // payload = http.getString (); // Saglabājiet vērtību varibale lietderīgajā kravā atkļūdošanai // Serial.println (lietderīgā slodze); // Izdrukājiet atkļūdošanas lietderīgo slodzi, pretējā gadījumā komentējiet abas rindas
Esmu komentējis šīs rindas, jo tās nepieciešamas tikai testēšanai. Kad esat pārliecinājies, ka ESP8266 spēj iegūt JSON datus, ir pienācis laiks izteikt datus. Kā redzat, šie dati ir milzīgi, un lielākā daļa vērtību ir bezjēdzīgi, izņemot tos, kas mums nepieciešami, piemēram, datumu, laiku, temperatūru un mitrumu.
Tāpēc mēs izmantojam JSON Arduino bibliotēku, lai atdalītu mums nepieciešamās vērtības un saglabātu to mainīgajā. Tas ir iespējams, jo JSON faila vērtības tiek piešķirtas kā nosaukuma vērtību pāri. Tātad šis nosaukums ir virkne, kas saturēs mums nepieciešamo vērtību.
Lai to izdarītu, mums jāpārvietojas uz vietni, kurā tiks analizēts JSON fails un piešķirts Arduino kods. Jā, tas ir tikpat viegli kā tas. Pārejiet uz vietni https://arduinojson.org/assistant/ un ielīmējiet mūsu pārlūkprogrammā ielādēto JSON failu un nospiediet taustiņu Enter. Kad tas izdarīts, manējais izskatījās kaut kas līdzīgs šim
Ritiniet mazliet uz leju, lai redzētu frāzēšanas programmu, kas tiek izveidota automātiski
Viss, kas jums jādara, ir atlasīt vajadzīgo mainīgo, nokopēt tos un ielīmēt to savā Arduino IDE, tāpat kā es to esmu darījis šeit
/ * Datu formulēšana, izmantojot JSON bibliotēku * / // Izmantojiet vietni https://arduinojson.org/assistant/, lai iegūtu savas JSON virknes frāzes vērtības 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 ()); / * Datu formulēšanas beigas * / // Vērtībai sin adresēt vēlamos mainīgos JsonObject & current_observation = root; // zem current_observation JsonObject & current_observation_observation_location = current_observation; // zem novērošanas_vieta const char * current_observation_station_id = current_observation; // "ICHENNAI1" // iegūstiet atrašanās vietas detaļām const char * current_observation_local_time_rfc822 = current_observation; // Vietējais laiks // iegūstiet vietējā laika konst char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // iegūstiet temperatūras vērtību const char * current_observation_relative_humidity = current_observation; // "73%" // iegūst mitruma vērtību
Es tikko nokopēju mainīgos current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string un current_observation_relative_humidity . Tā kā mēs plānojam LCD ekrānā parādīt tikai šos četrus datus.
Visbeidzot, mēs esam ieguvuši nepieciešamos datus no interneta un saglabājuši tos kā mainīgo, kuru mēs varam ērti izmantot. Lai nosūtītu šos datus uz Arduino, mēs tos vienkārši rakstām sērijveidā, izmantojot seriālo monitoru. Nākamās rindas darīs tieši to pašu
// Izdrukājiet mainīgos, izmantojot sērijas monitoru Serial.print (current_observation_station_id); // nosūtiet atrašanās vietas datus uz Arduino delay (100); // stabilitātes aizkave Serial.print (current_observation_local_time_rfc822); // nosūtiet vietējā laika informāciju uz Arduino delay (100); // stabilitātes aizkave Serial.print (pašreizējā_novērošanas_temperatūras_stringa); // nosūtiet temperatūras datus uz Arduino delay (100); // stabilitātes kavēšanās Serial.print (pašreizējais_novērošanas_relatīvais_mitrums); // nosūtiet informāciju par mitrumu uz Arduino delay (100); // stabilitātes kavēšanās
Ņemiet vērā, ka esmu izmantojis Serial.print (), nevis Serial.println (), jo komanda Serial.println () pievienos a / n un / r kopā ar datiem, kas mums nav vajadzīgi. Mēs esam pievienojuši arī 10 sekunžu kavēšanos, lai ESP nosūtītu šīs vērtības tikai ar 10 sekunžu intervālu Arduino.
ESP8266-01 savienošana ar Arduino:
Līdz šim mēs esam ieprogrammējuši savu ESP8266-01, lai ar 10 sekunžu intervālu nolasītu nepieciešamos datus no interneta un sērijveidā tos izsūtītu. Tagad mums ir jāsaskaņo ESP ar Arduino, lai mēs varētu nolasīt šos sērijas datus. Mums arī Arduino jāpievieno 16 * 2 LCD displejs, lai mēs varētu parādīt datus, kas saņemti no ESP8266 moduļa. Circuit diagramma uz interfeisa ESP8266 modulis ar Arduino ir parādīts zemāk
Pārliecinieties, ka GPIO_0 tapa ir atstāta bez maksas, barojiet moduli tikai ar Arduino 3,3 V tapu un nospiediet spiedpogu, lai ievietotu ESP moduli vadības modulī. Tagad programmai, kuru augšupielādējām ESP, vajadzēja sākt darboties, un modulim dati jānosūta Arduino, izmantojot sērijas tapu. Šīs sērijas tapas ir savienotas ar Arduino tapu numuriem 6 un 7. Tāpēc mēs varam izmantot programmatūras sērijas opciju Arduino, lai nolasītu šos sērijas datus no tapām.
Arduino programma un darbs:
Šīs lapas beigās ir norādīta arī pilnīga Arduino programma kopā ar ESP kodu. Varat ritināt uz leju, lai skatītu programmu, vai lasīt tālāk, ja vēlaties saprast programmu.
Saskarnes programma ir diezgan vienkārša, mums vienkārši jāizmanto programmatūras sērijveida bibliotēka, lai nolasītu datus no 6. un 7. kontakta un parādītu tos LCD ekrānā. Tā kā saņemtie dati ir virknes formātā, mums jāizmanto apakšvirknes opcija, lai lietderīgo slodzi sadalītu atbilstoši mūsu prasībām vai, ja nepieciešams, pat pārveidotu to par veselu skaitli. Tātad, mēs sākam definēt tapas, kurām LCD ir pievienots.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Piespraudes, kurām ir pievienots LCD, LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Tā kā mēs esam savienoti ar Rx un Tx tapas ESP8266 ar 6. un 7. th pin no Arduino mums inicializētu Software sērijas tiem tapas, lai mēs varētu saņemt sērijas datus no tiem.Es ir nosaukumi to kā ESP_Serial, varat nosauciet viņiem visu, ko vēlaties
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Funkcijas setup () iekšpusē mēs inicializējam sērijveida monitora un arī programmatūras sērijas sakarus. Ja jūs varētu atcerēties, mēs izveidojām ESP programmu saziņai ar 9600 bitu pārraides ātrumu, tāpēc programmatūras sērijas portam mums jāizmanto tas pats bitu ātrums. Mēs arī 2 sekundes uz LCD parādām nelielu ievadziņu.
void setup () {lcd.begin (16, 2); // Mēs izmantojam 16 * 2 LCD displeju lcd.print ("Arduino & ESP"); // Parādīt intro ziņojumu Serial.begin (115200); ESP_Serial.begin (9600); kavēšanās (2000); lcd.clear (); }
Funkcijas main loop () iekšpusē mums jāpārbauda, vai ESP8266 kaut ko sūta. Ja tā ir, tad mēs lasām virkni no ESP8266 un saglabājam to mainīgajā, ko sauc par lietderīgo slodzi. Mainīgā lietderīgā slodze ir tipa String, un tajā būs visa informācija, kas nosūtīta no ESP8266 moduļa.
while (ESP_Serial.available ()> 0) {lietderīgā slodze = ESP_Serial.readString ();
Tagad mums šī virkne ir jāsadala mazos gabaliņos, lai mēs tos varētu izmantot saviem mērķiem, šajā gadījumā tie ir jāsadala, lai tos parādītu LCD ekrānā. To var viegli izdarīt, izmantojot apakšvirknes funkciju Arduino. Lai izmantotu šo apakšvirknes funkciju, jums jāzina katra rakstzīme. Jūs varat izdrukāt lietderīgo slodzi sērijveida monitorā, lai uzzinātu rakstzīmju pozīciju un izmantotu tās apakšgrupu kategorijās, kā parādīts zemāk
vietējais_datums = lietderīgā slodze. apakšstringa (14, 20); vietējais_laiks = lietderīgā slodze.substring (26, 31); temperatūra = lietderīgā slodze. pakāje (48, 54); Mitrums = lietderīgā slodze. Pakāje (55, 60);
Tagad es varu turpināt un izmantot šos mainīgos vai nu izdrukāt seriālajā monitorā, vai arī vienkārši izdrukāt uz LCD. Tomēr to izdrukāšana uz sērijas monitora palīdzēs mums pārbaudīt, vai apakšvirsmas ir pareizi sadalītas. Tālāk mēs tos vienkārši izdrukājam uz LCD displeja, izmantojot šādas rindas
lcd.clear (); lcd.setCursor (1, 0); lcd.print (vietējais_datums); lcd.setCursor (8, 0); lcd.print (vietējais_laiks); lcd.setCursor (1, 1); lcd.print (temperatūra); lcd.setCursor (10, 1); lcd.print (mitrums);
Augšupielādējiet programmu Arduino un pārliecinieties, vai savienojumi ir tādi, kā parādīts iepriekš minētajā shēmā. Pielāgojiet LCD displeja kontrastu, līdz lietas skaidri redzat. Jums vajadzētu redzēt Intro ziņojumu LCD ekrānā, un pēc dažām sekundēm LCD ekrānā jāparāda tāda informācija kā datums, laiks, temperatūra un mitrums, kā parādīts zemāk.
Varat arī pamanīt, ka ESP8266 zilā lampiņa mirgo katru reizi, kad ienāk dati. Ja to nevarat redzēt, tas nozīmē, ka ESP nav programmēšanas režīmā, mēģiniet arī nospiest pogu Atiestatīt, lai pārbaudītu savienojumus.
Līdzīgi tam jūs varat izmantot jebkuru API, lai iegūtu nepieciešamos datus no interneta un ievadītu tos Arduino un apstrādātu savu darbu ar Arduino. Internetā ir pieejams daudz API, un ar visiem tiem jūs varat izveidot neierobežotu skaitu projektu. Ceru, ka sapratāt projektu un patika to veidot. Ja esat saskāries ar kādu problēmu, ievietojiet tos komentāru sadaļā zemāk vai mūsu forumos.
Visus ar ESP8266 saistītos projektus varat atrast šeit.