Taula de continguts:
- Pas 1: Especificació de maquinari i programari
- Pas 2: emmagatzemar les credencials d'usuari
- Pas 3: Configuració del formulari web a SPIFFS
- Pas 4: programació de tasques
- Pas 5: lectura de valors de temperatura i humitat des de SHT25
- Pas 6: Publicació de valors a ThingSpeak mitjançant l'API ThingSpeak MQTT
- Pas 7: Notificació per correu electrònic de la notificació meteorològica
- Pas 8: Codi general
Vídeo: Informe meteorològic amb applets ThingSpeak MQTT i IFTTT: 8 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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
- 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
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
- Descarregueu l'eina:
- Al directori del quadern de dibuixos Arduino, creeu un directori d’eines si encara no existeix
- Desempaqueteu l'eina al directori d'eines (el camí tindrà l'aspecte de /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Reinicieu Arduino IDE
- Obrir un esbós (o crear-ne un de nou i desar-lo)
- Aneu al directori d'esbossos (trieu Esbós> Mostra la carpeta d'esbós)
- 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
- Assegureu-vos que heu seleccionat una placa, un port i un monitor sèrie tancats
- 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
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
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
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
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:
Informe Covid Live amb Raspberry Pi: 6 passos
Informe de Covid Live amb Raspberry Pi: Com sabem, el món està sent afectat per la pandèmia COVID-19 i gairebé tothom treballa des de casa. Tots hauríem d’utilitzar aquesta durada en el millor dels casos, per millorar les nostres habilitats tècniques o escriure algunes bones escriptures pitòniques. Vegem un simple Python
Rellotge meteorològic del baròmetre Raspberry Pi: 9 passos (amb imatges)
Rellotge meteorològic del baròmetre Raspberry Pi: en aquest instructiu us mostraré com construir un rellotge bàsic de termòmetre / baròmetre amb un Raspberry Pi 2 amb un sensor BMP180 I2C que es mostra en una pantalla I2C de 7 dígits Adafruit de 4 dígits. El Pi també utilitza un mòdul de rellotge I2C DS3231 en temps real per k
Núvol meteorològic IOT: ús d'OpenWeatherMaps: 11 passos (amb imatges)
IOT Weather Cloud: ús d’OpenWeatherMaps: és un núvol que penja del sostre d’una habitació i reprodueix certs patrons en funció del resultat retornat d’Internet. Recupera les dades meteorològiques d'OpenWeatherMaps. Es pot controlar manualment mitjançant una interfície web o automàtica
Monitor meteorològic amb escut Arduino MKR ENV: 6 passos
Monitor meteorològic amb Arduino MKR ENV Shield: fa uns dies vam aconseguir alguns dels nous escuts MKR ENV. Aquests escuts tenen diversos sensors (temperatura, pressió de l’aire, humitat, UV …) a bord: una bona col·lecció per crear una estació meteorològica senzilla juntament amb el nostre kit ArduiTouch MKR. Nosaltres
Rellotge meteorològic: 11 passos (amb imatges)
Weather Clock: Actualització amb esquema elèctric i esquema Fritzing Faig dues premisses: Aquest és el meu primer instructable. Sóc un italià ignorant que no ha estudiat anglès a l'escola i per això vaig demanar ajuda a: https: //translate.google.itStart amb agraïment af