- Materials necessaris:
- Com funcionen les coses?
- Programació de l'ESP8266-01:
- Connexió ESP8266-01 amb Arduino:
- Programa i treball Arduino:
L'ESP8266-01 ha estat un mòdul fantàstic per calmar totes les nostres set de projectes IOT. Des del seu llançament, ha desenvolupat una comunitat forta i s’ha convertit en un mòdul Wi-Fi fàcil d’utilitzar, econòmic i potent. Una altra plataforma de codi obert molt més popular és l’Arduino, ja que té molts projectes construïts al seu voltant. La combinació d’aquestes dues plataformes obrirà portes per a molts projectes innovadors, de manera que en aquest tutorial aprendrem com interaccionar el mòdul ESP8266-01 amb Arduino. D’aquesta manera podrem enviar o rebre dades entre l’Arduino i Internet.
Als efectes d’aquest tutorial , llegirem l’hora, la data, la temperatura i la humitat d’Internet mitjançant una API amb l’ESP8266-01. A continuació, envieu aquests valors a una placa Arduino i mostreu-los a la pantalla LCD de 16 * 2. Sona molt bé !! Comencem doncs.
Materials necessaris:
- Taula Arduino (qualsevol versió)
- ESP8266-01
- Placa de programació FTDI amb opció de 3,3V
- LCD de 16x2
- Potenciòmetre
- Polsador
- Connexió de cables
- Taula de pa
Com funcionen les coses?
Abans de capbussar-nos, és important saber com funcionarà realment aquesta cosa. Bàsicament, hem de començar amb el mòdul ESP8266-01. Utilitzarem l’ IDE Arduino per programar l’ESP8266 i el codi s’escriurà per utilitzar una API per llegir un fitxer JSON mitjançant la sol·licitud http. A continuació, expressarem aquest fitxer JSON per extreure només la informació necessària del fitxer JSON complet.
Un cop formulada la informació, la imprimirem mitjançant la comunicació en sèrie. Aquestes línies de sèrie es connectaran a l'Arduino, de manera que l'Arduino pugui llegir la informació enviada des de l'ESP8266. Un cop llegida i processada la informació, la mostrarem a la pantalla LCD.
Està bé, si no ho heu entès completament, ja que aprendrem el mateix a la resta d’aquest tutorial.
Programació de l'ESP8266-01:
Aquest tutorial suposa que teniu certa experiència amb el mòdul ESP8266. En cas contrari, es recomana llegir els tres tutorials següents per entendre-ho completament.
- Introducció a ESP8266-01
- Programació ESP8266-01 mitjançant comandes AT
- Programació de l'ESP8266-01 mitjançant Arduino IDE i intermitència de la seva memòria
També podeu consultar tots els nostres projectes ESP8266 aquí.
Aquí programarem el mòdul ESP8266-01 mitjançant l'IDE Arduino. Per al maquinari, utilitzem la placa FTDI amb 3.3V per programar ESP8266, ja que farà que el maquinari sigui molt senzill. A continuació es mostra el diagrama del circuit per connectar el vostre ESP8266 amb la placa FTDI.



Assegureu-vos que es compleixin les condicions següents
1. L'ESP8266-01 només és tolerant a 3,3V, no utilitzeu 5V. Per tant, configureu FTDI només en mode 3.3V.
2. GPIO_0 ha de tenir connexió a terra per al mode de programació
3. El pin de restabliment s'hauria de connectar mitjançant un botó al pin de terra. Cal prémer aquest botó just abans de penjar el codi. Cada vegada que es prem el botó, el LED blau del mòdul ESP8266-01 augmentarà per indicar que el mòdul s'ha restablert.
Un cop fetes les connexions, obriu l'IDE Arduino i comproveu si podeu carregar un programa de mostra amb èxit. Si no esteu segur de com utilitzar l'IDE d'Arduino per carregar el programa a ESP8266, seguiu la Programació ESP8266 amb Arduino per aprendre'l. En aquest moment suposo que heu penjat amb èxit el programa de parpelleig.
. El programa complet es dóna al final d’aquesta pàgina més avall. Els explico com a petits fragments. El programa també requereix la compilació de la biblioteca Arduino JSON, de manera que si encara no heu afegit la biblioteca al vostre IDE Arduino, afegiu-la descarregant-la des de la biblioteca Arduino JSON de Github.
L'ESP8266 ha de connectar-se a Internet per obtenir dades sobre data, hora, temperatura i humitat. Per tant, heu de permetre que es connecti al vostre Wi-Fi demostrant el SSID i la contrasenya a les línies següents
const char * ssid = "JIO-Fi"; // Introduïu el vostre SSID Wi-Fi const char * password = "Pas123"; // Introduïu la contrasenya Wi-Fi
Dins de la funció setup () comprovem si l’ESP és capaç de connectar-se amb el Wi-Fi, si no, hi esperarà per sempre només imprimint “Connecting..” al monitor sèrie.
while (WiFi.status ()! = WL_CONNECTED) {// Espereu fins que el Wi-Fi estigui connectat amb retard (1000); Serial.print ("Connexió.."); // Imprimeix connexió.. fins que s'estableixi la connexió }
El següent pas és el pas molt important. Si la connexió Wi-Fi té èxit, hem d’invocar una sol·licitud http get per llegir el fitxer JSON des d’Internet. En aquest tutorial estic fent servir l'API proporcionada per wunderground.com. Per tant, si teniu previst utilitzar el mateix, podeu accedir a l'enllaç i registrar-vos per obtenir la clau API gratuïta o utilitzar qualsevol API que trieu. Un cop hàgiu finalitzat amb la vostra API, acabareu amb un enllaç similar a continuació
Nota: He canviat la clau API d'aquest enllaç, de manera que això no funcionarà. Mantingueu la clau API segura i no la compartiu.
La meva API aquí s’utilitza per obtenir les dades meteorològiques de Chennai. Podeu utilitzar qualsevol API. Però quan carregueu l'API en qualsevol navegador, hauria de retornar un fitxer JSON. Per exemple, la meva API retorna el fitxer JSON següent
El vostre pot retornar un fitxer amb dades diferents. Podem comprovar si aquest fitxer JSON també el rep el nostre ESP8266 llegint-lo i imprimint JSON al nostre monitor sèrie mitjançant les línies següents
int httpCode = http.GET (); // transmet una sol·licitud d'obtenció si (httpCode> 0) {// Comproveu el codi de retorn // payload = http.getString (); // Emmagatzemeu el valor a la càrrega útil de varibale per a la depuració // Serial.println (càrrega útil); // Imprimiu la càrrega útil per a la depuració en cas contrari, comenteu les dues línies
He comentat aquestes línies, ja que només són necessàries per fer proves. Un cop assegurat que ESP8266 és capaç d'obtenir les dades JSON, és hora de redactar les dades. Com podeu veure, aquestes dades són enormes i la majoria dels valors són inútils, excepte els que es requereixen per a nosaltres, com ara data, hora, temperatura i humitat.
Per tant, fem servir la biblioteca JSON Arduino per separar els valors necessaris per a nosaltres i emmagatzemar-la en una variable. Això és possible perquè els valors del fitxer JSON s’assignen com a parells de valors de nom. Per tant, aquest nom és una cadena que contindrà el valor que ens cal.
Per fer-ho, ens hem de desplaçar a un lloc web que analitzarà el fitxer JSON i ens donarà el codi Arduino. Sí, és tan fàcil. Aneu a https://arduinojson.org/assistant/ i enganxeu el fitxer JSON que hem carregat al navegador i premeu Retorn. Quan he acabat, el meu semblava semblant a continuació

Desplaceu-vos una mica cap avall per veure el programa de frasejat que es crea automàticament

Tot el que heu de fer és seleccionar la variable que vulgueu, copiar-les i enganxar-la al vostre IDE Arduino, com he fet aquí
/ * Fraseig de dades mitjançant la biblioteca JSON * / // Utilitzeu https://arduinojson.org/assistant/ per obtenir els valors de fraseig de la vostra cadena JSON 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 ()); / * Fi de les dades de fraseig * / // Adreça el valor sin a les variables desitjades JsonObject & current_observation = root; // sota current_observation JsonObject & current_observation_observation_location = actual_observation; // sota observ_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // obté els detalls de la ubicació const char * current_observation_local_time_rfc822 = actual_observation; // Hora local // obté l’hora local const char * current_observation_temperature_string = current_observation; // "90,7 F (32,6 C)" // obtenir el valor de la temperatura const char * actual_observació_relativa_humitat = actual_observació; // "73%" // obté el valor d'humitat
Acabo de copiar les variables current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string i current_observation_relative_humidity . Ja que tenim previst mostrar només aquestes quatre dades a la nostra pantalla LCD.
Finalment, hem obtingut les dades que necessitem d’Internet i les hem desat com a variable que podem utilitzar còmodament. Per enviar aquestes dades a Arduino, només les hem d’ escriure en sèrie mitjançant el monitor de sèrie. Les línies següents faran exactament el mateix
// Imprimiu les variables mitjançant el monitor sèrie Serial.print (current_observation_station_id); // envieu els detalls de la ubicació a Arduino delay (100); // retard d’estabilitat Serial.print (current_observation_local_time_rfc822); // enviar els detalls de l’hora local a Arduino delay (100); // retard d’estabilitat Serial.print (cadena_temperatura_observació_actual); // envieu els detalls de la temperatura a Arduino delay (100); // retard d’estabilitat Serial.print (humitat_relativa_observació_actual); // envieu els detalls d’humitat a Arduino delay (100); // retard d’estabilitat
Tingueu en compte que he utilitzat Serial.print () i no Serial.println () ja que l’ordre Serial.println () afegirà a / n i / r juntament amb les dades que no ens són necessàries. També hem afegit un retard de 10 segons perquè l'ESP només enviï aquests valors a un interval de 10 segons a Arduino.
Connexió ESP8266-01 amb Arduino:
Fins ara hem programat el nostre ESP8266-01 per llegir les dades requerides d'Internet en un interval de 10 segons i enviar-les en sèrie. Ara hem de connectar l’ESP amb Arduino perquè puguem llegir aquestes dades en sèrie. També hem d’afegir una pantalla LCD de 16 * 2 a Arduino per poder mostrar les dades rebudes del mòdul ESP8266. A continuació es mostra el diagrama de circuits per connectar el mòdul ESP8266 amb Arduino

Assegureu-vos que el pin GPIO_0 quedi lliure, engegueu el mòdul només amb el pin de 3,3 V d’Arduino i premeu el botó per posar el mòdul ESP al mòdul de funcionament. Ara el programa que hem carregat a ESP hauria d’haver començat a funcionar i el mòdul hauria d’enviar les dades mitjançant pin sèrie a Arduino. Aquests pins sèrie estan connectats als pins número 6 i 7 de l’Arduino. Per tant, podem utilitzar l’opció de programari en sèrie d’Arduino per llegir aquestes dades en sèrie des dels pins.

Programa i treball Arduino:
El programa complet d'Arduino també es proporciona juntament amb el codi ESP al final d'aquesta pàgina. Podeu desplaçar-vos cap avall per veure el programa o llegir més si voleu entendre el programa.
El programa d'interfície és bastant senzill, només hem d'utilitzar la biblioteca en sèrie del programari per llegir les dades dels pins 6 i 7 i mostrar-les a la pantalla LCD. Com que les dades que es reben tenen un format de cadena, hem d’utilitzar l’opció de subcadena per trencar la càrrega útil al nostre requisit o fins i tot convertir-la a enter si és necessari. Comencem doncs, definint els pins als quals està connectat el LCD.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // Pins als quals està connectat el LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Com ens hem connectat els pins Rx i Tx de ESP8266 amb el 6 i el 7 º pin de Arduino que hem de inicialitzar la sèrie de programari per als passadors perquè puguem rebre les dades en sèrie d'ells.I tenen noms com aquesta ESP_Serial, pot Posa-los el nom que vulguis
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
Dins de la funció setup () inicialitzem la comunicació serial per al monitor serial i també per al serial del programari. Si recordeu, vam fer que el programa ESP comuniqués a una velocitat de 9600 baud, de manera que hem d’utilitzar la mateixa velocitat de baud per al port sèrie del programari. També mostrem un petit missatge d'introducció a la pantalla LCD durant 2 segons.
void setup () {lcd.begin (16, 2); // Estem utilitzant una pantalla LCD de 16 * 2 lcd.print ("Arduino i ESP"); // Mostra un missatge d'introducció Serial.begin (115200); ESP_Serial.begin (9600); endarreriment (2000); lcd.clear (); }
Dins de la funció loop principal () hem de comprovar si l’ESP8266 envia alguna cosa. Si és així, llegim la cadena de l’ESP8266 i la desem en una variable anomenada càrrega útil. La càrrega útil variable és de tipus String i contindrà la informació completa enviada des del mòdul ESP8266.
while (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
Ara hem de dividir aquesta cadena en petits trossos perquè puguem utilitzar-los per al nostre propòsit, en aquest cas els hem de dividir per mostrar-los a la pantalla LCD. Això es pot fer fàcilment mitjançant la funció de subcadena a Arduino. Heu de conèixer la posició de cada personatge per utilitzar aquesta funció de subcadena . Podeu imprimir la càrrega útil al monitor sèrie per conèixer la posició dels caràcters i utilitzar-los per classificar les subcadenes tal com es mostra a continuació
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); temperature = payload.substring (48, 54); Humitat = càrrega útil.substring (55, 60);
Ara puc seguir endavant i utilitzar aquestes variables per imprimir-les al monitor sèrie o simplement imprimir-les a la pantalla LCD. Tot i això, imprimir-los al monitor de sèrie ens ajudarà a comprovar si les subcadenes es divideixen correctament. A continuació, només els imprimim a la pantalla LCD mitjançant les línies següents
lcd.clear (); lcd.setCursor (1, 0); lcd.print (data_data_local); lcd.setCursor (8, 0); lcd.print (hora_local); lcd.setCursor (1, 1); impressió lcd (temperatura); lcd.setCursor (10, 1); impressió lcd (humitat);
Pengeu el programa a Arduino i assegureu-vos que les connexions són les que es mostren al diagrama de circuits anterior. Ajusteu el contrast de la pantalla LCD fins que vegeu les coses amb claredat. Hauríeu de veure el missatge d'introducció a la pantalla LCD i, després d'uns quants segons, s'haurien de mostrar a la pantalla LCD la informació, com ara la data, l'hora, la temperatura i la humitat, tal com es mostra a continuació.

També podeu notar que el led blau de l’ESP8266 parpelleja cada vegada que entren les dades. Si no podeu veure això, significa que l'ESP no està en mode de programació. Proveu de prémer el botó Restableix i comproveu també les connexions.
De manera similar, podeu utilitzar qualsevol API per obtenir les dades necessàries d’Internet i alimentar-les a l’Arduino i processar el vostre treball amb Arduino. Hi ha un munt d’API disponibles a Internet i, amb totes, podeu fer un nombre il·limitat de projectes. Espero que hagueu entès el projecte i us hagi agradat construir-lo. Si us heu enfrontat a algun problema, publiqueu-los a la secció de comentaris de sota o als nostres fòrums.
Podeu trobar tots els nostres projectes relacionats amb l’ESP8266 aquí.
