- Nødvendige materialer:
- Hvordan ting fungerer?
- Programmering av ESP8266-01:
- Koble til ESP8266-01 med Arduino:
- Arduino-program og arbeid:
ESP8266-01 har vært en flott modul for å slukke all vår tørst etter IOT-prosjekter. Siden lanseringen har den utviklet et sterkt fellesskap og utviklet seg til en brukervennlig, billig og kraftig Wi-Fi-modul. En annen åpen kildekodeplattform som er mye mer populær er Arduino, den har allerede mange prosjekter bygget rundt den. Å kombinere disse to plattformene vil åpne dører for mange innovative prosjekter, så i denne opplæringen lærer vi hvordan vi kan grensesnitt ESP8266-01 modulen med Arduino. På denne måten vil vi kunne sende eller motta data mellom Arduino og Internett.
For formålet med denne veiledningen vil vi lese tid, dato, temperatur og fuktighet fra internett ved hjelp av et API med ESP8266-01. Send deretter disse verdiene til et Arduino-kort og vis dem på 16 * 2 LCD-skjermen. Høres kult ut !! Så la oss komme i gang.
Nødvendige materialer:
- Arduino Board (hvilken som helst versjon)
- ESP8266-01
- FTDI programmererbrett med 3,3V alternativ
- 16x2 LCD
- Potensiometer
- Trykknapp
- Koble ledninger
- Brettbrett
Hvordan ting fungerer?
Før vi dykker inn, er det viktig å vite hvordan denne tingen faktisk skal fungere. I utgangspunktet må vi begynne med ESP8266-01-modulen. Vi bruker Arduino IDE til å programmere ESP8266, og koden vil bli skrevet for å bruke et API til å lese en JSON-fil gjennom http-forespørsel. Deretter vil vi uttrykke denne JSON-filen for å trekke ut den nødvendige informasjonen fra den komplette JSON-filen.
Når informasjonen er formulert, vil vi skrive den ut ved hjelp av seriekommunikasjonen. Disse serielle linjene blir deretter koblet til Arduino, slik at Arduino kan lese informasjonen sendt fra ESP8266. Når informasjonen er lest og behandlet, viser vi den på LCD-skjermen.
Det er greit, hvis du ikke helt har forstått dette, for vi lærer det samme i resten av denne opplæringen.
Programmering av ESP8266-01:
Denne opplæringen forutsetter at du har litt erfaring med ESP8266-modulen. Hvis ikke, anbefales det å lese gjennom de følgende tre opplæringene for å forstå det fullstendig.
- Komme i gang med ESP8266-01
- Programmering ESP8266-01 ved hjelp av AT-kommandoer
- Programmering av ESP8266-01 ved hjelp av Arduino IDE og blinkende minne
Du kan også sjekke alle våre ESP8266-prosjekter her.
Her skal vi programmere ESP8266-01-modulen ved hjelp av Arduino IDE. For maskinvare bruker vi FTDI-kortet med 3,3 V til å programmere ESP8266, siden det vil gjøre maskinvaren mye enkel. Kretsskjemaet for å koble ESP8266 til FTDI-kortet er vist nedenfor.
Forsikre deg om at følgende betingelser er oppfylt
1. ESP8266-01 er bare 3,3V tolerant, ikke bruk 5V. Så sett FTDI bare i 3.3V-modus.
2. GPIO_0 må være jordet for programmeringsmodus
3. Tilbakestillingspinnen skal kobles via en knapp til bakken. Denne knappen skal trykkes rett før du laster opp koden. Hver gang du trykker på knappen, vil den blå LED-lampen på ESP8266-01-modulen gå høyt for å indikere at modulen er tilbakestilt.
Når tilkoblingene er gjort, åpner du Arduino IDE og sjekker om du er i stand til å laste opp et prøveprogram med hell. Hvis du ikke er sikker på hvordan du bruker Arduino IDE til å laste opp program til ESP8266, følg deretter Programmering ESP8266 med Arduino for å lære det. På dette tidspunktet antar jeg at du har lastet opp blinkprogrammet.
. Det komplette programmet er gitt på slutten av denne siden lenger nedenfor. Jeg forklarer dem som små utdrag. Programmet krever også at Arduino JSON-biblioteket kompileres, så hvis du ikke allerede har lagt til biblioteket i Arduino IDE, kan du legge det til ved å laste det ned fra Arduino JSON-biblioteket fra Github.
ESP8266 må koble seg til internett for å få data om dato, klokkeslett, temperatur og fuktighet. Så du må tillate at den kobles til Wi-Fi-en din ved å bevise SSID og passord i linjene nedenfor
const char * ssid = "JIO-Fi"; // Skriv inn ditt Wi-Fi SSID const char * passord = "Pas123"; // Skriv inn Wi-Fi-passordet ditt
Inne i setup () -funksjonen sjekker vi om ESP er i stand til å koble til Wi-Fi, hvis ikke vil den vente der for alltid bare ved å skrive ut "Connecting.." på den serielle skjermen.
mens (WiFi.status ()! = WL_CONNECTED) {// Vent til Wi-Fi er tilkoblet forsinkelse (1000); Serial.print ("Connecting.."); // Skriv ut tilkobling.. til tilkoblingen er opprettet }
Det neste trinnet er det veldig viktige trinnet. Hvis Wi-Fi-tilkoblingen er vellykket, må vi påkalle en http get-forespørsel om å lese JSON-filen fra internett. I denne opplæringen bruker jeg API-en levert av wunderground.com. Så hvis du planlegger å bruke det samme, kan du gå inn i lenken og registrere deg for den gratis API-nøkkelen eller bruke hvilken som helst API du ønsker. Når du er ferdig med API-en din, vil du ende opp med en lenke som dette nedenfor
Merk: Jeg har endret API-nøkkelen til denne lenken, slik at dette ikke fungerer. Hold API-nøkkelen din sikret og ikke del den.
Min API her brukes til å få værdataene til Chennai. Du kan bruke hvilken som helst API. Men når du laster API-en i en hvilken som helst nettleser, skal den returnere en JSON-fil. For eksempel returnerer API-et mitt følgende JSON-fil
Din kan returnere en fil med forskjellige data. Vi kan sjekke om denne JSON-filen også mottas av ESP8266 ved å lese den og skrive ut JSON på vår serielle skjerm ved hjelp av følgende linjer
int httpCode = http.GET (); // send en get-forespørsel hvis (httpCode> 0) {// Sjekk returkoden // nyttelast = http.getString (); // Lagre verdien på varibale nyttelast for feilsøking // Serial.println (nyttelast); // Skriv ut nyttelasten for feilsøking, ellers kommenter begge linjene
Jeg har kommentert disse linjene, da de bare er nødvendige for testing. Når du har sørget for at ESP8266 er i stand til å skaffe JSON-data, er det på tide å formulere dataene. Som du ser er disse dataene enorme, og de fleste verdiene er ubrukelige, bortsett fra de som kreves for oss som dato, tid, temperatur og fuktighet.
Så vi bruker JSON Arduino-biblioteket til å skille verdiene som kreves for oss og lagre det i en variabel. Dette er mulig fordi verdiene i JSON-filen er tilordnet som navneparpar. Så dette navnet er en streng som inneholder verdien som kreves for oss.
For å gjøre dette må vi flytte til et nettsted som vil analysere JSON-filen og gi oss Arduino-koden. Ja, det er så enkelt som det. Fortsett til https://arduinojson.org/assistant/ og lim inn JSON-filen som vi lastet inn i nettleseren vår, og trykk enter. Når jeg var ferdig så meg noe ut som dette nedenfor
Rull litt ned for å se formuleringsprogrammet som opprettes automatisk
Alt du trenger å gjøre er å velge variabelen du vil ha, kopiere dem og lime den inn på Arduino IDE, som jeg har gjort her
/ * Fraseringsdata ved hjelp av JSON-biblioteket * / // Bruk https://arduinojson.org/assistant/ for å hente fraseringsverdiene for JSON-strengen 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 ()); / * End of Phrasing Data * / // Adresser verdien sin til ønskede variabler JsonObject & current_observation = root; // under current_observation JsonObject & current_observation_observation_location = current_observation; // under observation_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // få lokaliseringer const char * current_observation_local_time_rfc822 = gjeldende observasjon; // Lokal tid // få lokal tid const char * current_observation_temperature_string = current_observation; // "32,6 C (90,7 F)" // får temperaturverdien const char * current_observation_relative_humidity = current_observation; // "73%" // får fuktighetsverdien
Jeg har nettopp kopiert variablene current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string og current_observation_relative_humidity . Siden vi planlegger å bare vise disse fire dataene på LCD-skjermen.
Til slutt har vi fått tak i dataene vi trenger fra internett og lagret dem som en variabel som vi komfortabelt kan bruke. For å sende disse dataene til Arduino, har vi bare skrevet dem serielt gjennom Serial monitor. Følgende linjer vil gjøre nøyaktig det samme
// Skriv ut variablene gjennom seriell skjerm Serial.print (current_observation_station_id); // send stedsopplysningene til Arduino delay (100); // stabilitetsforsinkelse Serial.print (current_observation_local_time_rfc822); // send lokal tiddetaljer til Arduino delay (100); // stabilitetsforsinkelse Serial.print (current_observation_temperature_string); // send temperaturdetaljene til Arduino- forsinkelse (100); // stabilitetsforsinkelse Serial.print (current_observation_relative_humidity); // send fuktighetsdetaljene til Arduino forsinkelse (100); // stabilitetsforsinkelse
Merk at jeg har brukt Serial.print () og ikke Serial.println () siden kommandoen Serial.println () vil legge til a / n og / r sammen med dataene som ikke er nødvendige for oss. Vi har også lagt til en forsinkelse på 10 sekunder slik at ESP bare sender disse verdiene med et intervall på 10 sekunder til Arduino.
Koble til ESP8266-01 med Arduino:
Så langt har vi programmert vår ESP8266-01 til å lese de nødvendige dataene fra internett med et intervall på 10 sekunder og sende dem serielt ut. Nå må vi koble ESP med Arduino slik at vi kan lese disse serielle dataene. Vi må også legge til en 16 * 2 LCD-skjerm til Arduino, slik at vi kan vise dataene mottatt fra ESP8266-modulen. Den kretsdiagram å grensesnittet ESP8266 modulen med Arduino er vist nedenfor
Forsikre deg om at GPIO_0-pinnen er ledig, slå bare på strømmen med 3.3V-pinnen på Arduino og trykk på trykknappen for å sette ESP-modulen i driftsmodulen. Nå burde programmet som vi lastet opp til ESP begynte å fungere, og modulen skulle sende dataene via seriell pin til Arduino. Disse serielle pinnene er koblet til pin 6 og 7 på Arduino. Så vi kan bruke programvareserien på Arduino til å lese disse serielle dataene fra pinnene.
Arduino-program og arbeid:
Hele Arduino-programmet er også gitt sammen med ESP-koden på slutten av denne siden. Du kan bla nedover for å se programmet eller lese videre hvis du vil forstå programmet.
Grensesnittprogrammet er ganske enkelt, vi må bare bruke programvareseriebiblioteket til å lese dataene fra pin 6 og 7 og vise dem på LCD-skjermen. Siden dataene som mottas er i strengformat, må vi bruke substring-alternativet for å bryte nyttelasten til vårt krav eller til og med konvertere den til heltall om nødvendig. Så vi begynner med å definere pinnene som LCD-skjermen er koblet til.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pins som LCD er koblet til LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Siden vi har koblet til Rx og Tx pinnene ESP8266 med 6 og 7 th pin av Arduino må vi initialisere programvareserie for de pinnene, slik at vi kan få den serielle data fra dem.Jeg har navn dette som ESP_Serial, kan du navngi dem hva du måtte ønske
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Inne i setup () -funksjonen initialiserer vi seriell kommunikasjon for seriell skjerm og også for programvareserien. Hvis du kunne huske, fikk vi ESP-programmet til å kommunisere med 9600 baudrate, så vi må bruke samme baudrate for programvarens serielle port. Vi viser også en liten intro-melding på LCD-skjermen i 2 sekunder.
ugyldig oppsett () {lcd.begin (16, 2); // Vi bruker en 16 * 2 LCD-skjerm lcd.print ("Arduino & ESP"); // Vis en intro-melding Serial.begin (115200); ESP_Serial.begin (9600); forsinkelse (2000); lcd.clear (); }
Inne i hoved loop () -funksjonen må vi sjekke om ESP8266 sender noe. Hvis det er det, så leser vi strengen fra ESP8266 og lagrer den i en variabel som heter nyttelast. Den variable nyttelasten er av typen String, og den inneholder den fullstendige informasjonen som sendes fra ESP8266-modulen.
mens (ESP_Serial.available ()> 0) {nyttelast = ESP_Serial.readString ();
Nå må vi dele denne strengen i små biter slik at vi kan bruke dem til vårt eget formål. I dette tilfellet må vi dele dem for å vise dem på LCD-skjermen. Dette kan gjøres enkelt ved hjelp av treng funksjon i Arduino. Du må vite posisjonen til hvert tegn for å bruke denne undergrunnsfunksjonen . Du kan skrive ut nyttelasten på seriell skjerm for å vite posisjonen til tegn og bruke dem til å kategorisere understrengene som vist nedenfor
local_date = nyttelast.substring (14, 20); local_time = nyttelast.substring (26, 31); temperatur = nyttelast. understreng (48, 54); Fuktighet = nyttelast. Substring (55, 60);
Nå kan jeg fortsette og bruke disse variablene til å enten skrive dem ut på seriell skjerm eller bare skrive dem ut på LCD-skjermen. Hvis du skriver ut dem på seriell skjerm, kan vi imidlertid kontrollere om underlagene er delt riktig. Deretter skriver vi dem bare ut på LCD-skjermen ved hjelp av 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 (Fuktighet);
Last opp programmet til Arduino, og sørg for at tilkoblingene er som vist i kretsskjemaet ovenfor. Juster kontrasten på LCD-skjermen til du ser tingene tydelig. Du bør se Intro-meldingen på LCD-skjermen, og etter noen sekunder skal detaljene som dato, klokkeslett, temperatur og fuktighet vises på LCD-skjermen som vist nedenfor.
Du kan også legge merke til at den blå lampen på ESP8266 blinker hver gang Data kommer inn. Hvis du ikke kan se dette, betyr det at ESP ikke er i programmeringsmodus, prøv å trykke på Reset-knappen og sjekk også tilkoblingene.
I likhet med dette kan du bruke hvilken som helst API for å hente nødvendige data fra internett og mate dem til Arduino og prosessen med Arduino. Det er mange API tilgjengelig på internett, og med alle disse kan du lage et ubegrenset antall prosjekter. Håper du forsto prosjektet og likte å bygge det. Hvis du hadde møtt noen problemer, kan du legge dem ut på kommentarfeltet nedenfor eller på forumene våre.
Du finner alle våre ESP8266 relaterte prosjekter her.