- Nødvendige materialer:
- Hvordan ting fungerer?
- Programmering af ESP8266-01:
- Forbinder ESP8266-01 med Arduino:
- Arduino-program og arbejde:
ESP8266-01 har været et godt modul til at slukke alle vores tørster for IOT-projekter. Siden udgivelsen har det udviklet et stærkt samfund og udviklet sig til et let at bruge, billigt og kraftfuldt Wi-Fi-modul. En anden open source-platform, som er meget mere populær, er Arduino, den har allerede masser af projekter bygget omkring den. Kombination af disse to platforme åbner døre for mange innovative projekter, så i denne vejledning lærer vi, hvordan man bruger interface ESP8266-01 med Arduino. På denne måde vil vi være i stand til at sende eller modtage data mellem Arduino og Internettet.
Med henblik på denne tutorial læser vi tid, dato, temperatur og fugtighed fra internettet ved hjælp af en API med ESP8266-01. Send derefter disse værdier til et Arduino-kort og vis dem på 16 * 2 LCD-skærmen. Lyder fedt lige !! Så lad os komme i gang.
Nødvendige materialer:
- Arduino Board (enhver version)
- ESP8266-01
- FTDI programmørkort med 3,3 V mulighed
- 16x2 LCD
- Potentiometer
- Trykknap
- Tilslutning af ledninger
- Brødbræt
Hvordan ting fungerer?
Før vi dykker ind, er det vigtigt at vide, hvordan denne ting faktisk fungerer. Dybest set skal vi starte med ESP8266-01-modulet. Vi bruger Arduino IDE til at programmere ESP8266, og koden vil blive skrevet til at bruge en API til at læse en JSON-fil via http-anmodning. Derefter fraser vi denne JSON-fil for kun at udtrække de krævede oplysninger fra den komplette JSON-fil.
Når informationen er formuleret, udskriver vi den ved hjælp af seriel kommunikation. Disse serielle linjer forbindes derefter til Arduino, så Arduino kan læse de oplysninger, der sendes fra ESP8266. Når oplysningerne er læst og behandlet, viser vi dem på LCD-skærmen.
Det er okay, hvis du ikke har forstået det helt, for vi lærer det samme i resten af denne vejledning.
Programmering af ESP8266-01:
Denne vejledning forudsætter, at du har en vis erfaring med ESP8266-modulet. Hvis ikke, anbefales det at læse de følgende tre tutorials igennem for at forstå det fuldstændigt.
- Kom godt i gang med ESP8266-01
- Programmering ESP8266-01 ved hjælp af AT-kommandoer
- Programmering af ESP8266-01 ved hjælp af Arduino IDE og blinkende hukommelse
Du kan også tjekke vores alle ESP8266-projekter her.
Her skal vi programmere ESP8266-01-modulet ved hjælp af Arduino IDE. Til hardware bruger vi FTDI-kortet med 3,3 V til at programmere ESP8266, da det vil gøre hardwaren meget enkel. Kredsløbsdiagrammet til tilslutning af din ESP8266 med FTDI-kortet er vist nedenfor.
Sørg for, at følgende betingelser er opfyldt
1. ESP8266-01 er kun 3,3V tolerant, brug ikke 5V. Så indstil kun FTDI i 3.3V-tilstand.
2. GPIO_0 skal være jordforbundet til programmeringstilstand
3. Resetstiften skal forbindes via en knap til jordstiften. Denne knap skal trykkes lige før uploaden af koden. Hver gang der trykkes på knappen, vil den blå LED på ESP8266-01-modulet gå højt for at indikere, at modulet er nulstillet.
Når forbindelserne er færdige, skal du åbne Arduino IDE og kontrollere, om du er i stand til at uploade et prøveprogram med succes. Hvis du ikke er sikker på, hvordan du bruger Arduino IDE til at uploade program til ESP8266, skal du følge programmeringen ESP8266 med Arduino for at lære det. På dette tidspunkt antager jeg, at du har uploadet blinkprogrammet med succes.
. Det komplette program findes i slutningen af denne side længere nedenfor. Jeg forklarer dem som små uddrag. Programmet kræver også, at Arduino JSON-biblioteket skal kompilere, så hvis du ikke allerede har føjet biblioteket til din Arduino IDE, skal du tilføje det ved at downloade det fra Arduino JSON-biblioteket fra Github.
ESP8266 skal oprette forbindelse til internettet for at få data om dato, klokkeslæt, temperatur og fugtighed. Så du er nødt til at tillade det at oprette forbindelse til dit Wi-Fi ved at bevise SSID og adgangskode i nedenstående linjer
const char * ssid = "JIO-Fi"; // Indtast dit Wi-Fi SSID const char * password = "Pas123"; // Indtast din Wi-Fi-adgangskode
Inde i opsætningsfunktionen () kontrollerer vi , om ESP er i stand til at oprette forbindelse til Wi-Fi, hvis ikke venter den der for evigt bare ved at udskrive "Tilslutning.." på den serielle skærm.
mens (WiFi.status ()! = WL_CONNECTED) {// Vent til Wi-Fi er tilsluttet forsinkelse (1000); Serial.print ("Forbinder.."); // Udskriv forbindelse.. indtil forbindelsen er oprettet }
Det næste trin er det meget vigtige trin. Hvis Wi-Fi-forbindelsen er vellykket, er vi nødt til at påkalde en http-anmodning om at læse JSON-filen fra internettet. I denne vejledning bruger jeg API leveret af wunderground.com. Så hvis du planlægger at bruge det samme, kan du gå ind i link og tilmelde dig den gratis API-nøgle eller bruge en hvilken som helst API efter eget valg. Når du er færdig med din API, vil du ende med et link noget som dette nedenfor
Bemærk: Jeg har ændret API-nøglen til dette link, så dette fungerer ikke. Hold din API-nøgle beskyttet og del ikke.
Min API her bruges til at hente vejrdataene i Chennai. Du kan bruge enhver API. Men når du indlæser API'en i enhver browser, skal den returnere en JSON-fil. For eksempel returnerer min API følgende JSON-fil
Din vil muligvis returnere en fil med forskellige data. Vi kan kontrollere, om denne JSON-fil også modtages af vores ESP8266 ved at læse den og udskrive JSON på vores serielle skærm ved hjælp af følgende linjer
int httpCode = http.GET (); // videregive en get-anmodning, hvis (httpCode> 0) {// Kontroller den returnerende kode // payload = http.getString (); // Gem værdien på varibale nyttelast til debugging // Serial.println (nyttelast); // Udskriv nyttelasten til fejlretning ellers kommenter begge linjer
Jeg har kommenteret disse linjer, da de kun er nødvendige til testning. Når du har sikret dig, at ESP8266 er i stand til at få JSON-data, er det tid til at formulere dataene. Som du kan se er disse data enorme, og de fleste af værdierne er ubrugelige bortset fra dem, der kræves for os som dato, tid, temperatur og fugtighed.
Så vi bruger JSON Arduino-biblioteket til at adskille de krævede værdier for os og gemme det i en variabel. Dette er muligt, fordi værdierne i JSON-filen tildeles som navneværdipar. Så dette navn er en streng, der holder den nødvendige værdi for os.
For at gøre dette skal vi flytte til et websted, der analyserer JSON-filen og giver os Arduino-koden. Ja det er så let som det. Fortsæt til https://arduinojson.org/assistant/ og indsætter JSON-filen, som vi indlæste i vores browser, og tryk på enter. Når jeg var færdig, så min ud som sådan nedenfor
Rul lidt ned for at se det formuleringsprogram, der oprettes automatisk
Alt du skal gøre er at vælge den ønskede variabel, kopiere dem og indsætte den på din Arduino IDE, som jeg har gjort her
/ * Fraseringsdata ved hjælp af JSON-biblioteket * / // Brug https://arduinojson.org/assistant/ for at få fraseringsværdierne til din JSON-streng 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 ()); / * Slut på frasering af data * / // Adresser værdien sin til ønskede variabler JsonObject & current_observation = root; // under nuværende_observation JsonObject & nuværende_observation_observation_location = nuværende_observation; // under observation_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // få lokalitetsdetials const char * current_observation_local_time_rfc822 = nuværende_observation; // Lokal tid // Hent den lokale tid const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // få temperaturværdien const char * current_observation_relative_humidity = current_observation; // "73%" // få fugtighedsværdien
Jeg har lige kopieret variablerne current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string og current_observation_relative_humidity . Da vi planlægger kun at vise disse fire data på vores LCD-skærm.
Endelig har vi fået de data, som vi har brug for fra internettet, og har gemt dem som en variabel, som vi komfortabelt kan bruge. For at sende disse data til Arduino har vi bare skrevet dem serielt gennem Serial monitor. Følgende linjer gør nøjagtigt det samme
// Udskriv variablerne via seriel skærm Serial.print (current_observation_station_id); // send placeringsoplysningerne til Arduino- forsinkelse (100); // stabilitetsforsinkelse Serial.print (current_observation_local_time_rfc822); // send de lokale tidsoplysninger til Arduino forsinkelse (100); // stabilitetsforsinkelse Serial.print (current_observation_temperature_string); // send temperaturoplysningerne til Arduino- forsinkelse (100); // stabilitetsforsinkelse Serial.print (nuværende_observation_relativ_fugtighed); // send fugtighedsoplysningerne til Arduino forsinkelse (100); // stabilitetsforsinkelse
Bemærk, at jeg har brugt Serial.print () og ikke Serial.println (), da kommandoen Serial.println () tilføjer a / n og / r sammen med de data, der ikke er nødvendige for os. Vi har også tilføjet en forsinkelse på 10 sekunder, så ESP kun sender disse værdier med et interval på 10 sekunder til Arduino.
Forbinder ESP8266-01 med Arduino:
Indtil videre har vi programmeret vores ESP8266-01 til at læse de krævede data fra internettet med et interval på 10 sekunder og sende dem serielt ud. Nu er vi nødt til at grænsefladen mellem ESP og Arduino, så vi kan læse disse serielle data. Vi skal også tilføje en 16 * 2 LCD-skærm til Arduino, så vi kan vise de data, der modtages fra ESP8266-modulet. Den kredsløbsdiagram at interface ESP8266 modul med Arduino er vist nedenfor
Sørg for, at GPIO_0-stiften er fri, strøm kun modulet med 3.3V-stiften på Arduino, og tryk på trykknappen for at sætte ESP-modulet i betjeningsmodulet. Nu skulle det program, som vi uploadede til ESP, være begyndt at arbejde, og modulet skulle sende dataene via seriel pin til Arduino. Disse serielle ben er tilsluttet pin nummer 6 og 7 på Arduino. Så vi kan bruge softwarens serielle mulighed på Arduino til at læse disse serielle data fra benene.
Arduino-program og arbejde:
Det komplette Arduino-program gives også sammen med ESP-koden i slutningen af denne side. Du kan rulle ned for at se programmet eller læse videre, hvis du vil forstå programmet.
Interfaceprogrammet er ret simpelt, vi skal bare bruge softwarens serielle bibliotek til at læse dataene fra pin 6 og 7 og vise dem på LCD-skærmen. Da de modtagne data er i strengformat, skal vi bruge substring-indstillingen til at bryde nyttelasten til vores krav eller endda konvertere den til heltal, hvis det kræves. Så vi starter med at definere de ben, som LCD-skærmen er tilsluttet.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pins, som LCD er tilsluttet LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Da vi har tilsluttet Rx og Tx stifter af ESP8266 med 6 og 7 th pin af Arduino vi nødt til at initialisere software serielle for de stifter, så vi kan modtage de serielle data fra dem.Jeg har navne dette som ESP_Serial, kan du navngiv dem alt hvad du ønsker
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Inde i opsætningsfunktionen () initialiserer vi den serielle kommunikation til seriel skærm og også til softwaren. Hvis du kunne huske, fik vi ESP-programmet til at kommunikere med 9600 baudhastighed, så vi er nødt til at bruge den samme baudhastighed til softwarens serielle port. Vi viser også en lille introduktionsmeddelelse på LCD'et i 2 sekunder.
ugyldig opsætning () {lcd.begin (16, 2); // Vi bruger et 16 * 2 LCD-display lcd.print ("Arduino & ESP"); // Vis en introduktionsmeddelelse Serial.begin (115200); ESP_Serial.begin (9600); forsinkelse (2000); lcd.clear (); }
Inde i hovedsløjfefunktionen () skal vi kontrollere, om ESP8266 sender noget. Hvis det er tilfældet, læser vi strengen fra ESP8266 og gemmer den i en variabel kaldet nyttelast. Den variable nyttelast er af typen String, og den indeholder den samlede information, der sendes fra ESP8266-modulet.
mens (ESP_Serial.available ()> 0) {nyttelast = ESP_Serial.readString ();
Nu er vi nødt til at opdele denne streng i små bidder, så vi kan bruge dem til vores eget formål. I dette tilfælde er vi nødt til at opdele dem for at vise dem på LCD-skærmen. Dette kan gøres nemt ved hjælp af substring funktionen i Arduino. Du skal kende placeringen af hvert tegn for at bruge denne understrengingsfunktion . Du kan udskrive nyttelasten på den serielle skærm for at kende placeringen af tegn og bruge dem til at kategorisere understrengene som vist nedenfor
local_date = nyttelast.substring (14, 20); local_time = nyttelast.substring (26, 31); temperatur = nyttelast. understreng (48, 54); Fugtighed = nyttelast. Substring (55, 60);
Nu kan jeg gå videre og bruge disse variabler til enten at udskrive dem på seriel skærm eller bare udskrive dem på LCD'et. Men udskrivning på seriel skærm hjælper os med at kontrollere, om underlagene er delt korrekt. Dernæst udskriver vi dem bare på LCD-skærmen ved hjælp af følgende linjer
lcd.clear (); lcd.setCursor (1, 0); lcd.print (lokal_dato); lcd.setCursor (8, 0); lcd.print (lokal tid); lcd.setCursor (1, 1); lcd.print (temperatur); lcd.setCursor (10, 1); lcd.print (Fugtighed);
Upload programmet til Arduino, og sørg for, at forbindelserne er som vist i ovenstående kredsløbsdiagram. Juster LCD-skærmens kontrast, indtil du ser tingene tydeligt. Du bør se Intro-meddelelsen på LCD-skærmen, og efter få sekunder skal detaljer som dato, tid, temperatur og fugtighed vises på LCD-skærmen som vist nedenfor.
Du kan også bemærke, at den blå LED på ESP8266 blinker hver gang dataene kommer ind. Hvis du ikke kan se dette, betyder det, at ESP ikke er i programmeringstilstand, prøv at trykke på Reset-knappen, og kontroller også forbindelserne.
I lighed med dette kan du bruge enhver API til at hente de nødvendige data fra internettet og føde dem til Arduino og processen, dit arbejde med Arduino. Der er masser af API tilgængelige på internettet, og med alle dem kan du lave et ubegrænset antal projekter. Håber du forstod projektet og nød at bygge det. Hvis du havde haft problemer, skal du sende dem i kommentarfeltet nedenfor eller på vores fora.
Du kan finde alle vores ESP8266 relaterede projekter her.