- Material som krävs:
- Hur saker fungerar?
- Programmering av ESP8266-01:
- Ansluter ESP8266-01 med Arduino:
- Arduino-program och arbete:
ESP8266-01 har varit en bra modul för att släcka alla våra törster efter IOT-projekt. Sedan den släpptes har den utvecklat en stark gemenskap och utvecklats till en lättanvänd, billig och kraftfull Wi-Fi-modul. En annan öppen källkodsplattform som är mycket mer populär är Arduino, den har redan massor av projekt byggda runt den. Genom att kombinera dessa två plattformar öppnas dörrar för många innovativa projekt, så i den här handledningen lär vi oss hur man gränssnitt ESP8266-01-modulen med Arduino. På så sätt kommer vi att kunna skicka eller ta emot data mellan Arduino och Internet.
I denna handledning kommer vi att läsa tid, datum, temperatur och fuktighet från internet med hjälp av ett API med ESP8266-01. Skicka sedan dessa värden till ett Arduino-kort och visa dem på 16 * 2 LCD-skärmen. Låter coolt rätt !! Så låt oss komma igång.
Material som krävs:
- Arduino Board (valfri version)
- ESP8266-01
- FTDI programmerarkort med 3,3 V tillval
- 16x2 LCD
- Potentiometer
- Tryckknapp
- Anslutande ledningar
- Bakbord
Hur saker fungerar?
Innan vi dyker in är det viktigt att veta hur den här saken faktiskt kommer att fungera. I grund och botten måste vi börja med modulen ESP8266-01. Vi kommer att använda Arduino IDE för att programmera ESP8266 och koden kommer att skrivas för att använda ett API för att läsa en JSON-fil via http-begäran. Då kommer vi att uttrycka denna JSON-fil för att endast extrahera den information som krävs från hela JSON-filen.
När informationen har formulerats kommer vi att skriva ut den med hjälp av seriekommunikationen. Dessa seriella linjer kommer sedan att anslutas till Arduino, så att Arduino kan läsa informationen som skickas från ESP8266. När informationen har lästs och bearbetats kommer vi att visa den på LCD-skärmen.
Det är okej, om du inte helt har förstått det här, för vi kommer att lära oss detsamma i resten av denna handledning.
Programmering av ESP8266-01:
Denna handledning förutsätter att du har viss erfarenhet av ESP8266-modulen. Om inte, rekommenderas att du läser igenom följande tre självstudier för att förstå det fullständigt.
- Komma igång med ESP8266-01
- Programmering ESP8266-01 med AT-kommandon
- Programmering av ESP8266-01 med Arduino IDE och blinkande minne
Du kan också kolla alla våra ESP8266-projekt här.
Här ska vi programmera modulen ESP8266-01 med hjälp av Arduino IDE. För hårdvara använder vi FTDI-kortet med 3,3 V för att programmera ESP8266, eftersom det kommer att göra hårdvaran mycket enkel. Kretsschemat för anslutning av din ESP8266 med FTDI-kort visas nedan.
Se till att följande villkor är uppfyllda
1. ESP8266-01 är endast 3,3V tolerant, använd inte 5V. Så ställ bara FTDI i 3.3V-läge.
2. GPIO_0 måste vara jordad för programmeringsläge
3. Återställningsstiftet ska anslutas via en knapp till jordstiftet. Denna knapp ska tryckas precis innan du laddar upp koden. Varje gång du trycker på knappen kommer den blå lysdioden på ESP8266-01-modulen att gå högt för att indikera att modulen har återställts.
När anslutningarna är klar öppnar du Arduino IDE och kontrollerar om du kan ladda upp ett provprogram framgångsrikt. Om du inte är säker på hur du använder Arduino IDE för att ladda upp program till ESP8266, följ sedan programmeringen ESP8266 med Arduino för att lära dig det. Vid denna tidpunkt antar jag att du har laddat upp blinkprogrammet.
. Det fullständiga programmet ges i slutet av denna sida längre ner. Jag förklarar dem som små utdrag. Programmet kräver också att Arduino JSON-biblioteket kompileras, så om du inte redan har lagt till biblioteket i din Arduino IDE, lägg sedan till det genom att ladda ner det från Arduino JSON-biblioteket från Github.
ESP8266 måste ansluta till internet för att få information om datum, tid, temperatur och fuktighet. Så du måste tillåta att den ansluter till ditt Wi-Fi genom att bevisa SSID och lösenord i nedanstående rader
const char * ssid = "JIO-Fi"; // Ange ditt Wi-Fi SSID const char * lösenord = "Pas123"; // Ange ditt Wi-Fi-lösenord
Inuti setup () -funktionen kontrollerar vi om ESP kan ansluta till Wi-Fi, om inte så kommer den att vänta för evigt bara genom att skriva ut "Connecting.." på den seriella bildskärmen.
medan (WiFi.status ()! = WL_CONNECTED) {// Vänta tills Wi-Fi är ansluten fördröjning (1000); Serial.print ("Ansluter.."); // Skriv ut Anslutning.. tills anslutningen upprättas }
Nästa steg är det mycket viktiga steget. Om Wi-Fi-anslutningen lyckas måste vi anropa en http get-begäran om att läsa JSON-filen från internet. I denna handledning använder jag API: et som tillhandahålls av wunderground.com. Så om du planerar att använda samma kan du gå in i länken och registrera dig för den gratis API-nyckeln eller använda något API du väljer. När du är klar med ditt API kommer du att få en länk något liknande här nedan
Obs! Jag har ändrat API-nyckeln för den här länken så att det inte fungerar. Håll din API-nyckel skyddad och dela inte.
Mitt API här används för att få väderdata för Chennai. Du kan använda valfritt API. Men när du laddar API: et i en webbläsare ska det returnera en JSON-fil. Till exempel returnerar mitt API följande JSON-fil
Din kan returnera en fil med olika data. Vi kan kontrollera om den här JSON-filen också tas emot av vår ESP8266 genom att läsa den och skriva ut JSON på vår seriella bildskärm med följande rader
int httpCode = http.GET (); // skicka en get-begäran om (httpCode> 0) {// Kontrollera returkoden // nyttolast = http.getString (); // Lagra värdet på varibale nyttolast för felsökning // Serial.println (nyttolast); // Skriv ut nyttolasten för felsökning annars kommentera båda raderna
Jag har kommenterat dessa rader, eftersom de bara behövs för testning. När du väl har försäkrat dig om att ESP8266 kan få JSON-data är det dags att formulera data. Som du kan se är dessa data enorma och de flesta värdena är värdelösa förutom de som krävs för oss som datum, tid, temperatur och fuktighet.
Så vi använder JSON Arduino-biblioteket för att separera de värden som krävs för oss och lagra det i en variabel. Detta är möjligt eftersom värdena i JSON-filen tilldelas som namnvärdepar. Så det här namnet är en sträng som håller det värde som krävs för oss.
För att göra detta måste vi flytta till en webbplats som analyserar JSON-filen och ger oss Arduino-koden. Ja det är så enkelt som det. Fortsätt till https://arduinojson.org/assistant/ och klistra in JSON-filen som vi laddade i vår webbläsare och tryck på enter. När jag var klar såg mitt ut ungefär så här nedan
Rulla lite ner för att se fraseringsprogrammet som skapas automatiskt
Allt du behöver göra är att välja den variabel du vill, kopiera dem och klistra in den på din Arduino IDE, som jag har gjort här
/ * Fraseringsdata med JSON-bibliotek * / // Använd https://arduinojson.org/assistant/ för att få fraseringsvärdena för din JSON-sträng 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 (bufferstorlek); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * Slut på fraseringsdata * / // Adressera värdet sin till önskade variabler JsonObject & current_observation = root; // under current_observation JsonObject & current_observation_observation_location = nuvarande_observation; // under observation_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // få platsavkalkningar const char * current_observation_local_time_rfc822 = nuvarande_observation; // Lokal tid // hämta den lokala tiden const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // få temperaturvärdet const char * current_observation_relative_humidity = current_observation; // "73%" // får fuktighetsvärdet
Jag har just kopierat variablerna current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string och current_observation_relative_humidity . Eftersom vi planerar att bara visa dessa fyra data på vår LCD-skärm.
Slutligen har vi inhämtat de data som vi behöver från internet och har sparat den som en variabel som vi bekvämt kan använda. För att skicka dessa data till Arduino har vi bara skrivit dem seriellt via Serial monitor. Följande rader kommer att göra exakt detsamma
// Skriv ut variablerna via seriell bildskärm Serial.print (current_observation_station_id); // skicka platsinformation till Arduino- fördröjning (100); // stabilitetsfördröjning Serial.print (current_observation_local_time_rfc822); // skicka information om lokal tid till Arduino- fördröjning (100); // stabilitetsfördröjning Serial.print (current_observation_temperature_string); // skicka temperaturinformation till Arduino- fördröjning (100); // stabilitetsfördröjning Serial.print (current_observation_relative_humidity); // skicka fuktighetsinformation till Arduino- fördröjning (100); // stabilitetsfördröjning
Observera att jag har använt Serial.print () och inte Serial.println () eftersom kommandot Serial.println () lägger till a / n och / r tillsammans med de data som inte behövs för oss. Vi har också lagt till en fördröjning på 10 sekunder så att ESP skickar dessa värden endast med ett intervall på 10 sekunder till Arduino.
Ansluter ESP8266-01 med Arduino:
Hittills har vi programmerat vår ESP8266-01 för att läsa de nödvändiga uppgifterna från internet med ett intervall på 10 sekunder och skicka den seriellt ut. Nu måste vi gränssnitt ESP med Arduino så att vi kan läsa denna seriella data. Vi måste också lägga till en 16 * 2 LCD-skärm till Arduino så att vi kan visa data som tas emot från ESP8266-modulen. Den kretsschema kan koppla samman ESP8266 modul med Arduino visas nedan
Se till att GPIO_0-stiften är fri, strömförsörj modulen endast med 3.3V-stiftet på Arduino och tryck på tryckknappen för att sätta ESP-modulen i manövermodulen. Nu borde programmet som vi laddade upp till ESP börja fungera och modulen skulle skicka data via seriell stift till Arduino. Dessa seriella stift är anslutna till stift nummer 6 och 7 på Arduino. Så vi kan använda programvarans seriealternativ på Arduino för att läsa dessa seriella data från stiften.
Arduino-program och arbete:
Det kompletta Arduino-programmet ges också tillsammans med ESP-koden i slutet av denna sida. Du kan bläddra ner för att se programmet eller läsa vidare om du vill förstå programmet.
Gränssnittsprogrammet är ganska enkelt, vi behöver bara använda programvarans seriella bibliotek för att läsa data från stift 6 och 7 och visa dem på LCD-skärmen. Eftersom data som tas emot är i strängformat måste vi använda substringsalternativet för att bryta nyttolasten till vårt krav eller till och med konvertera den till heltal om det behövs. Så vi börjar med att definiera stiften som LCD-skärmen är ansluten till.
konst int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Stift till vilka LCD är ansluten LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Eftersom vi har anslutit Rx- och Tx-stiften på ESP8266 med den 6: e och 7: e stiften i Arduino måste vi initiera mjukvaruserien för dessa stift så att vi kan ta emot seriell data från dem. Jag har namnet detta som ESP_Serial, du kan namnge dem vad du vill
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Inuti setup () -funktionen initialiserar vi seriekommunikationen för seriell bildskärm och även för programvarans serie. Om du kunde komma ihåg fick vi ESP-programmet att kommunicera med 9600 baudhastighet så vi måste använda samma baudhastighet för programvaruporten. Vi visar också ett litet intromeddelande på LCD-skärmen i 2 sekunder.
ogiltig installation () {lcd.begin (16, 2); // Vi använder en 16 * 2 LCD-skärm lcd.print ("Arduino & ESP"); // Visa ett introduktionsmeddelande Serial.begin (115200); ESP_Serial.begin (9600); fördröjning (2000); lcd.clear (); }
Inuti huvudslingan () -funktionen måste vi kontrollera om ESP8266 skickar något. Om det är så läser vi strängen från ESP8266 och sparar den till en variabel som heter nyttolast. Den variabla nyttolasten är av typen String och den kommer att innehålla den fullständiga informationen som skickas från ESP8266-modulen.
medan (ESP_Serial.available ()> 0) {nyttolast = ESP_Serial.readString ();
Nu måste vi dela upp den här strängen i små bitar så att vi kan använda dem för vårt eget syfte, i det här fallet måste vi dela dem för att visa dem på LCD-skärmen. Detta kan göras enkelt genom att använda träng funktionen i Arduino. Du måste veta positionen för varje karaktär för att använda den här understrängningsfunktionen . Du kan skriva ut nyttolasten på seriell bildskärm för att få reda på karaktärernas position och använda dem för att kategorisera understrängarna enligt nedan
local_date = nyttolast.substring (14, 20); local_time = nyttolast.substring (26, 31); temperatur = nyttolast. substring (48, 54); Luftfuktighet = nyttolast. Substring (55, 60);
Nu kan jag gå vidare och använda dessa variabler för att antingen skriva ut dem på seriell bildskärm eller bara skriva ut dem på LCD-skärmen. Om vi skriver ut dem på seriell bildskärm kan vi dock kontrollera om underlagen är delade korrekt. Därefter skriver vi bara ut dem på LCD-skärmen med följande rader
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (lokal tid); lcd.setCursor (1, 1); lcd.print (temperatur); lcd.setCursor (10, 1); lcd.print (Luftfuktighet);
Ladda upp programmet till Arduino och se till att anslutningarna är som visas i ovanstående kretsschema. Justera kontrasten på LCD-skärmen tills du ser saker och ting tydligt. Du bör se Intro-meddelandet på LCD-skärmen och sedan efter några sekunder ska detaljer som datum, tid, temperatur och luftfuktighet visas på LCD-skärmen enligt nedan.
Du kan också märka att den blå lampan på ESP8266 blinkar varje gång Data kommer in. Om du inte kan se detta betyder det att ESP inte är i programmeringsläge, försök att trycka på återställningsknappen och kontrollera även anslutningarna.
I likhet med detta kan du använda vilket API som helst för att få all nödvändig data från internet och mata den till Arduino och processen ditt arbete med Arduino. Det finns massor av API tillgängliga på internet och med alla dessa kan du göra ett obegränsat antal projekt. Hoppas att du förstod projektet och gillade att bygga det. Om du stött på några problem, lägg upp dem i kommentarsektionen nedan eller på våra forum.
Du hittar alla våra ESP8266-relaterade projekt här.