Taula de continguts:

Informe meteorològic amb applets ThingSpeak MQTT i IFTTT: 8 passos
Informe meteorològic amb applets ThingSpeak MQTT i IFTTT: 8 passos

Vídeo: Informe meteorològic amb applets ThingSpeak MQTT i IFTTT: 8 passos

Vídeo: Informe meteorològic amb applets ThingSpeak MQTT i IFTTT: 8 passos
Vídeo: 18 Стиль девушки-погодки РИНОН 2024, Desembre
Anonim
Informe meteorològic amb ThetSpeak MQTT i IFTTT applets
Informe meteorològic amb ThetSpeak MQTT i IFTTT applets

Introducció

Una aplicació meteorològica basada en el núvol que proporciona informes meteorològics diaris com a notificació per correu electrònic. Aquesta aplicació web mesura la temperatura i la humitat mitjançant SHT25 i Adafruit Huzzah ESP8266. Ens proporciona dades de temperatura i humitat en temps real i analítiques horàries. Les dades s’envien mitjançant l’API ThingSpeak MQTT i, posteriorment, proporcionem una notificació per correu electrònic a l’usuari cada vegada que la temperatura arriba al llindar assignat mitjançant el protocol IFTTT. SHT25 és un sensor de temperatura i humitat fabricat per Sensirion. El SHT25 proporciona un alt nivell de precisió al voltant del ± 2% d’HR. El seu rang d’humitat oscil·la entre el 0 i el 100% i el rang de temperatura entre -40 i 125 ° C. És molt més fiable i ràpid amb 8 segons de temps de resposta del sensor.

Característiques

  • Proporciona estadístiques i estadístiques en temps real mitjançant l'API Thing Speak MQTT
  • Es proporciona una notificació per correu electrònic a l'usuari en un moment assignat mitjançant IFTTT
  • El programador de tasques s’utilitza per programar la tasca, com ara obtenir dades de sensors, publicar les lectures del sensor, subscriure’s al tema MQTT
  • Utilitza el protocol I2C per obtenir la lectura del sensor, que és més precisa, ampliable i escalable
  • mode de repòs quan el dispositiu està inactiu o no es crida cap trucada.
  • una programació efectiva de tasques proporciona un ús sense problemes
  • S'allotja una pàgina web independent on l'usuari ha de proporcionar les seves credencials d'usuari per evitar que el dispositiu parpellegi cada cop que estigui a l'abast d'altres xarxes wifi.
  • SPIFFS s’utilitza per emmagatzemar la nostra pàgina web per fer el nostre codi llegible i menys maldestre

Pas 1: Especificació de maquinari i programari

Especificació de maquinari i programari
Especificació de maquinari i programari
Especificació de maquinari i programari
Especificació de maquinari i programari

Especificació de maquinari

  • Tauler d'Adafruit esp8266 Huzzah
  • Escut de la Junta Huzzah
  • Mòdul de sensor SHT25
  • Cable I2C

Especificació de programari

  • IDE Arduino
  • IFTTT Thing Speak
  • API MQTT

Pas 2: emmagatzemar les credencials d'usuari

Emmagatzematge de les credencials d’usuari
Emmagatzematge de les credencials d’usuari
Emmagatzematge de les credencials d’usuari
Emmagatzematge de les credencials d’usuari

Aquí fem servir el sensor SHT25 I2C per llegir el valor en temps real de la temperatura i la humitat relativa i publicar-los al núvol. Per obtenir el valor del sensor actualitzat de tant en tant i publicar aquestes actualitzacions simultàniament, estem utilitzant la biblioteca de programació de tasques d’Arduino. Per a operacions al núvol, fem servir l'API ThingSpeak MQTT. Més endavant, proporcionarem un informe meteorològic en temps real a l'usuari mitjançant miniaplicacions IFTTT. Podeu seguir aquests passos per crear la vostra pròpia estació meteorològica. Per tant, bricolatge.

Abans de continuar. Hem de desar les credencials d’usuari. Amb aquest propòsit, estem allotjant un servidor web al número 192.169.1.4. Hem emmagatzemat el nostre formulari web a SPIFFS. Un cop el dispositiu s’inicia, allotja un servidor web durant 60 segons. L'usuari hauria de seguir aquests passos.

  • Connecteu-vos a l'AP ESPuser, que apareix a la llista de xarxes wifi disponibles. Connecteu-vos a aquest AP i introduïu la contrasenya "*******"
  • Un cop connectat, aneu al navegador introduïu la IP 192.168.1.4.
  • Introduïu el SSID i la contrasenya del vostre WiFi local als camps d’entrada i introduïu SUBMIT
  • Aquestes credencials es desaran a EEPROM
  • Després de 60 segons, el dispositiu es desconnectarà automàticament de l'AP
  • La propera vegada que engegueu el dispositiu, l’usuari no ha de seguir aquest procediment; el dispositiu recuperarà automàticament les credencials de l’usuari de EEPROM i continuarà obtenint les lectures del sensor de la interfície I2C i publicant-les al núvol

// --------- Configuració AP ------------ // Adreça IP ap_local_IP (192, 168, 1, 4); Adreça IP ap_gateway (192, 168, 1, 254); Adreça IP ap_subnet (255, 255, 255, 0);

Serial.print ("Configuració del punt d'accés …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Configuració de les credencials d'usuari");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis () - APTimer <APInterval) {

server.handleClient ();

}

// ***************************** HANDLE ROOT ****************** ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("contrasenya"))

{

// Si tots els camps del formulari contenen una trucada de dades

handelSubmit ()

handleSubmit (); }

més {

// Torneu a mostrar el formulari

// llegeix el fitxer contingut en spiffs

Fitxer file = SPIFFS.open ("/ webform.html", "r");

server.streamFile (fitxer, "text / html");

// no us oblideu de tancar el fitxer

file.close ();

}}

// Comproveu l'estat que té els arguments ssid i password

// A continuació, escriviu les credencials a ROM

ROMwrite (String (server.arg ("ssid")), String (server.arg ("contrasenya")))

Pas 3: Configuració del formulari web a SPIFFS

SPIFFS

Interfície perifèrica sèrie Sistema de fitxers Flash, o SPIFFS en resum. És un sistema de fitxers lleuger per a microcontroladors amb un xip flash SPI. El xip flash incorporat de l’ESP8266 té molt d’espai per a les vostres pàgines web, especialment si teniu la versió d’1 MB, 2 MB o 4 MB. També hem emmagatzemat la nostra pàgina web al sistema Flash. Hi ha uns quants passos que hem de seguir per penjar dades a spiffs

  1. Descarregueu l'eina:
  2. Al directori del quadern de dibuixos Arduino, creeu un directori d’eines si encara no existeix
  3. Desempaqueteu l'eina al directori d'eines (el camí tindrà l'aspecte de /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Reinicieu Arduino IDE
  5. Obrir un esbós (o crear-ne un de nou i desar-lo)
  6. Aneu al directori d'esbossos (trieu Esbós> Mostra la carpeta d'esbós)
  7. Creeu un directori anomenat dades i els fitxers que vulgueu al sistema de fitxers. Hem penjat la nostra pàgina HTML amb el nom webform.html
  8. Assegureu-vos que heu seleccionat una placa, un port i un monitor sèrie tancats
  9. Seleccioneu Eines> Càrrega de dades d'esbós ESP8266. Això hauria de començar a carregar els fitxers al sistema de fitxers flash ESP8266. Quan s'hagi acabat, la barra d'estat de l'IDE mostrarà el missatge SPIFFS Image Uploaded.

Fitxer file = SPIFFS.open ("/ webform.html", "r");

server.streamFile (fitxer, "text / html");

// no us oblideu de tancar el fitxer

file.close ();

Pas 4: programació de tasques

En aquest tutorial, estem realitzant dues operacions:

  • Llegiu les dades de SHT25 mitjançant el protocol I2C
  • Publiqueu les dades actualitzades al núvol mitjançant l'API ThingSpeak MQTT

Per aconseguir-ho, estem utilitzant la biblioteca TaskScheduler. Hem programat dues tasques diferents referents a dues operacions de control diferents. es fa de la següent manera

  • La tasca 1 serveix per llegir el valor del sensor que aquesta tasca s'executa durant 1 segon fins que arriba a un temps d'espera de 10 segons.
  • Quan la tasca 1 arriba al seu temps d'espera, ens estem connectant al corredor Wifi local i MQTT.
  • Ara la tasca 2 està habilitada i estem desactivant la tasca 1 La tasca 2 és publicar les dades del sensor a l’agent MQTT de Thing Speak, aquesta tasca s’executa durant 20 segons fins que s’aconsegueix un temps d’espera de 20 segons
  • Quan la tasca 2 arriba al seu temps d'espera, la tasca 1 es torna a activar i la tasca 2 es desactiva. de nou, obtenim el valor actualitzat i el procés continua
  • quan no es crida cap devolució de trucada o el dispositiu està inactiu, passa a Light Sleep per estalviar energia.

// --------- prototip per a la devolució de trucada de la tasca ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

// --------- Tasques ------------ //

Tasca tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL i & taskI2CDisable);

Tasca tWiFi (20 * TASK_SECOND, TASK_FOREVER i & taskWiFiCallback, & ts, false, NULL i & taskWiFiDisable);

// enable tI2C tI2C.enable ();

Pas 5: lectura de valors de temperatura i humitat des de SHT25

Lectura de valors de temperatura i humitat des de SHT25
Lectura de valors de temperatura i humitat des de SHT25

I2C és una interfície de dos fils que només utilitza dos cables per comunicar-se amb el dispositiu mestre. Un és SCL (Serial Clock) i l’altre és SDA (Serial Data). Cada dispositiu esclau té una adreça única. SHT 25 també té una adreça de 8 bits i es pot accedir mitjançant una adreça 0x44. té un 8 bits de l'adreça on els 7 bits són adreça real i mentre que el bit LSB més a la dreta 0 s'utilitza per senyalar la lectura o l'escriptura al dispositiu. Si el bit 0 està definit a 1, el dispositiu mestre llegirà des del dispositiu I2C esclau. I2C és molt més fiable, escalable i ràpid i, fins i tot, té molts modes de funcionament, cosa que el fa molt més eficient energèticament

Estem utilitzant la biblioteca Wire.h per llegir els valors de temperatura i humitat. Aquesta biblioteca facilita la comunicació i2c entre el sensor i el dispositiu mestre. 0x44 és l'adreça I2C de SHT25. SHT25 funciona en un mode d’operacions diferent. Podeu consultar el full de dades per a això. Estem utilitzant 0x2C i 0x06 com a MSB i LSB respectivament per a operacions de tir únic

Pas 6: Publicació de valors a ThingSpeak mitjançant l'API ThingSpeak MQTT

Publicació de valors a ThingSpeak mitjançant l'API ThingSpeak MQTT
Publicació de valors a ThingSpeak mitjançant l'API ThingSpeak MQTT

Per publicar els valors de temperatura i humitat al núvol, utilitzem l'API ThingSpeak MQTT. ThingSpeak és una plataforma IoT. ThingSpeak és un servei web gratuït que us permet recopilar i emmagatzemar dades del sensor al núvol. MQTT és un protocol comú utilitzat en sistemes IoT per connectar dispositius i sensors de baix nivell. MQTT s’utilitza per transmetre missatges curts a i des d’un corredor. ThingSpeak ha afegit recentment un broker MQTT perquè els dispositius puguin enviar missatges a ThingSpeak. Podeu seguir el procediment per configurar ThingSpeak Channel des d'aquesta publicació

ThingSpeak MQTT

MQTT és una arquitectura de publicació / subscripció que es desenvolupa principalment per connectar amplada de banda i dispositius amb restricció de potència a través de xarxes sense fils. És un protocol senzill i lleuger que s’executa a través de sockets TCP / IP o WebSockets. MQTT mitjançant WebSockets es pot protegir amb SSL. L’arquitectura de publicació / subscripció permet enviar missatges als dispositius client sense que el dispositiu hagi d’interrogar contínuament el servidor. Un client és qualsevol dispositiu que es connecta al broker i pot publicar o subscriure’s a temes per accedir a la informació. Un tema conté la informació d’encaminament del corredor. Cada client que vol enviar missatges els publica a un tema determinat i cada client que vulgui rebre missatges es subscriu a un tema determinat

Publiqueu i subscriviu-vos mitjançant ThingSpeak MQTT

  • Publicació a canals de canals de feeds / publicació /
  • Publicació a determinats canals de camp / publica / camps / camp /
  • Subscriu-te als canals del camp del canal / subscriu-te //
  • Subscriviu-vos als canals d'informació de canals privats // subscriviu-vos / camps / camp /
  • Subscriviu-vos a tots els camps d’un canal. canals // subscripció / camps / feild /

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("temps d'espera per a aquesta tasca: / t");

Serial.println (tWiFi.getTimeout ());

if (! mqttCli.connected ())

{

Serial.println ("El client no està connectat");

reconnectarMQTT ();

}

String topicString = "channels /" + String (channelID) + "/ publish /" + String (writeAPIKey);

int topicLength = topicString.length () + 1;

char topicBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength + 1);

Serial.println (topicBuffer);

String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (humid, 1));

int dataLength = dataString.length () + 1;

byte dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "publicació fallida");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Pas 7: Notificació per correu electrònic de la notificació meteorològica

Notificació meteorològica Notificació per correu electrònic
Notificació meteorològica Notificació per correu electrònic
Notificació per correu electrònic de la informació meteorològica
Notificació per correu electrònic de la informació meteorològica

Estem utilitzant miniaplicacions IFTTT per donar una notificació meteorològica en temps real a l’usuari amb una notificació per correu electrònic. Per tant, l’hem implementat a través de ThingSpeak. Estem fent una mitjana dels valors de temperatura i humitat de cinc dies. Sempre que el valor de la darrera entrada sigui superior al valor mitjà. S'activarà una notificació per correu electrònic "fa un dia calorós". i quan és inferior al valor mitjà. S'activarà una notificació per correu electrònic "Quin dia tan bonic". Cada dia cap a les 10:00 del matí (IST) rebrem una notificació per correu electrònic

canalID = ******;

iftttURL = 'https://maker.ifttt.com/**************';

moistData = thingSpeakRead (canalID, "Camps", 3, "NumDays", 5); tempData = thingSpeakRead (canalID, "Camps", 1, "NumDays", 5);

perHumid = màx (moistData) -min (moistData);

humidValue = 0,1 * per Humid + min (dataDat d’humitat);

perTemp = max (tempData) -min (tempData);

valorTemp = 0,1 * per Temp + min (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Fa un dia calorós.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); final

Pas 8: Codi general

Codi general
Codi general
Codi general
Codi general
Codi general
Codi general

Codi general

El codi general està disponible en aquest dipòsit de GitHub

Limitacions

  • Hi ha alguns problemes amb la publicació de les dades mitjançant la publicació d’un mètode per a la major part de dades. Per resoldre aquest problema estem utilitzant la funció write ()
  • SPIFFS s’hauria de formatar abans de penjar les dades noves a SPIFFS.
  • No heu d’utilitzar la funció delay (). delay () dificulta l'operació en segon pla. En lloc d'això, creeu retards utilitzant millis () només si és necessari

Crèdits

  • ESP826WebServer
  • Planificador de tasques
  • SHT 25
  • API ThingSpeak MQTT
  • IFTTT
  • PubSubClient

Recomanat: