Raport meteo folosind applet-urile ThingSpeak MQTT și IFTTT: 8 pași
Raport meteo folosind applet-urile ThingSpeak MQTT și IFTTT: 8 pași
Anonim
Raport meteo folosind applet-urile ThingSpeak MQTT și IFTTT
Raport meteo folosind applet-urile ThingSpeak MQTT și IFTTT

Introducere

O aplicație meteo bazată pe cloud care oferă rapoarte meteo zilnice ca notificare prin e-mail. Această aplicație web măsoară temperatura și umiditatea folosind SHT25 și Adafruit Huzzah ESP8266. Ne oferă date în timp real privind temperatura și umiditatea și analize orare. Datele sunt trimise folosind API-ul ThingSpeak MQTT și ulterior furnizăm utilizatorului o notificare prin e-mail ori de câte ori temperatura atinge pragul atribuit utilizând protocolul IFTTT. SHT25 este un senzor de temperatură și umiditate realizat de Sensirion. SHT25 oferă un nivel ridicat de precizie în jur de ± 2% HR. Intervalul său de umiditate este cuprins între 0 și 100%, iar temperatura este între -40 și 125 ° C. Este mult mai fiabil și mai rapid cu 8 sec. De timp de răspuns al senzorului.

Caracteristici

  • Vă oferă statistici și statistici în timp real folosind Thing Speak MQTT API
  • O notificare prin e-mail este furnizată utilizatorului la o oră alocată utilizând IFTTT
  • Task Scheduler este folosit pentru a programa sarcina, cum ar fi preluarea datelor de la senzori, Publicarea citirilor senzorilor, Abonarea la subiectul MQTT
  • Folosește protocolul I2C pentru a prelua citirea senzorului, care este mai precisă, extensibilă și scalabilă
  • modul de repaus atunci când dispozitivul este inactiv sau nu este apelat niciun apel.
  • programarea eficientă a sarcinilor asigură o utilizare fără probleme
  • Este găzduită o pagină web separată în care utilizatorul trebuie să furnizeze acreditările sale pentru a evita intermitentul dispozitivului dvs. de fiecare dată când ajungeți la alte rețele wifi
  • SPIFFS este folosit pentru a stoca pagina noastră web pentru a face codul nostru lizibil și mai puțin stângaci

Pasul 1: Specificații hardware și software

Specificații hardware și software
Specificații hardware și software
Specificații hardware și software
Specificații hardware și software

Specificații hardware

  • Adafruit esp8266 Huzzah board
  • Huzzah Board Shield
  • Modul senzor SHT25
  • Cablu I2C

Specificații software

  • IDE Arduino
  • IFTTT Thing Speak
  • API MQTT

Pasul 2: stocarea acreditării utilizatorului

Stocarea acreditării utilizatorului
Stocarea acreditării utilizatorului
Stocarea acreditării utilizatorului
Stocarea acreditării utilizatorului

Aici folosim senzorul SHT25 I2C pentru a citi valoarea în timp real a temperaturii și a umidității relative și pentru a posta aceste valori în cloud. Pentru a obține valoarea senzorului actualizat din când în când și pentru a posta aceste actualizări simultan, folosim Arduino's Task Scheduler Library. Pentru operațiuni în cloud, folosim API-ul ThingSpeak MQTT. Mai târziu, oferim utilizatorului un raport meteo în timp real, folosind applet-uri IFTTT. Puteți urma acești pași pentru a vă crea propria stație meteo. Deci, DIY.

Înainte de a continua mai departe. Trebuie să salvăm acreditările utilizatorului. În acest scop, găzduim un server web la 192.169.1.4. Am stocat formularul nostru web în SPIFFS. Odată ce dispozitivul pornește, acesta găzduiește un server web timp de 60 de secunde. Utilizatorul ar trebui să urmeze acești pași.

  • Conectați-vă la AP ESPuser, acesta este listat în lista de rețele wifi disponibile. Conectați-vă la acest AP și introduceți parola „*******”
  • După conectare, accesați browserul dvs. introduceți IP 192.168.1.4.
  • Introduceți SSID-ul și parola WiFi-ului dvs. local în câmpurile de introducere și introduceți SUBMIT
  • Aceste acreditări vor fi salvate în EEPROM
  • După 60 de secunde, dispozitivul se va deconecta automat de la AP
  • Data viitoare când porniți dispozitivul, utilizatorul nu trebuie să urmeze această procedură, dispozitivul va prelua automat acreditările utilizatorului din EEPROM și va continua să obțină citirile senzorilor din interfața I2C și să le posteze în cloud

// --------- AP config ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

Serial.print ("Configurarea punctului de acces …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print („Configurarea acreditării utilizatorului”);

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis () - APTimer <APInterval) {

server.handleClient ();

}

// ***************************** MÂNECA RĂDĂCINA ****************** ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("parolă"))

{

// Dacă toate câmpurile formularului conțin apel de date

handelSubmit ()

handleSubmit (); }

altceva {

// Afișați din nou formularul

// citiți fișierul conținut în spiffs

Fișier fișier = SPIFFS.open ("/ webform.html", "r");

server.streamFile (fișier, "text / html");

// nu uitați să închideți fișierul

file.close ();

}}

// Verificați starea că are argumentele ssid și parola

// Apoi scrieți acreditările pe ROM

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

Pasul 3: Configurarea formularului dvs. web în SPIFFS

SPIFFS

Serial Peripheral Interface Flash File System sau SPIFFS pe scurt. Este un sistem de fișiere ușor pentru microcontrolere cu un cip flash SPI. Cipul flash integrat al ESP8266 are mult spațiu pentru paginile dvs. web, mai ales dacă aveți versiunea de 1 MB, 2 MB sau 4 MB. De asemenea, am stocat pagina noastră web în sistemul Flash. Există câțiva pași pe care trebuie să-i urmăm pentru a încărca date pe spiffs

  1. Descărcați instrumentul:
  2. În directorul de schițe Arduino, creați directorul de instrumente dacă nu există încă
  3. Despachetați instrumentul în directorul de instrumente (calea va arăta ca /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Reporniți Arduino IDE
  5. Deschideți o schiță (sau creați una nouă și salvați-o)
  6. Accesați directorul de schițe (alegeți Schiță> Afișați folderul de schiță)
  7. Creați acolo un director numit date și orice fișiere pe care le doriți în sistemul de fișiere. Am încărcat pagina noastră HTML cu numele webform.html
  8. Asigurați-vă că ați selectat o placă, un port și un monitor serial închis
  9. Selectați Instrumente> Încărcare date schiță ESP8266. Aceasta ar trebui să înceapă încărcarea fișierelor în sistemul de fișiere flash ESP8266. Când ați terminat, bara de stare IDE va afișa mesajul SPIFFS Image Uploaded.

Fișier fișier = SPIFFS.open ("/ webform.html", "r");

server.streamFile (fișier, "text / html");

// nu uitați să închideți fișierul

file.close ();

Pasul 4: Programarea sarcinilor

În acest tutorial, efectuăm două operații:

  • Citiți datele de la SHT25 folosind protocolul I2C
  • Postați datele actualizate în cloud utilizând ThingSpeak MQTT API

Pentru a realiza acest lucru, folosim biblioteca TaskScheduler. Am programat două sarcini diferite referitoare la două operații de control diferite. acest lucru se face după cum urmează

  • Sarcina 1 este pentru citirea valorii senzorului, această sarcină rulează timp de 1 secundă până când ajunge la expirarea de 10 secunde.
  • Când Task1 își atinge expirarea, ne conectăm la brokerul local Wifi și MQTT.
  • Acum, Task 2 este activat și dezactivăm Task 1 Task 2 este pentru publicarea datelor senzorilor către brokerul Thing Speak MQTT, această sarcină rulează timp de 20 de secunde până când ajunge la expirarea de 20 de secunde
  • Când Task2 își expiră, Task 1 este activat din nou și Task2 este dezactivat. din nou, primim valoarea actualizată și procesul continuă
  • atunci când nu este apelat niciun apel sau dispozitivul este inactiv, acesta trece la Light Sleep, economisind astfel energie.

// --------- prototip pentru returnarea activității ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

//---------Sarcini------------//

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

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

// activate tI2C tI2C.enable ();

Pasul 5: Citirea valorilor de temperatură și umiditate din SHT25

Citirea valorilor de temperatură și umiditate de la SHT25
Citirea valorilor de temperatură și umiditate de la SHT25

I2C este o interfață cu două fire care utilizează doar două fire pentru a comunica cu dispozitivul master. Unul este SCL (Serial Clock) și celălalt este SDA (Serial Data). Fiecare dispozitiv sclav are o adresă unică. SHT 25 are, de asemenea, o adresă de 8 biți și poate fi accesată de o adresă 0x44. are un 8 biți de adresă unde 7 biți sunt adresa reală și în timp ce bitul LSB cel mai din dreapta 0 este utilizat pentru a semnaliza citirea sau scrierea pe dispozitiv. Dacă bitul 0 este setat la 1, atunci dispozitivul master va citi de pe dispozitivul I2C slave. I2C este mult mai fiabil, scalabil și rapid și chiar are multe moduri de operare, ceea ce îl face mult mai eficient din punct de vedere energetic

Folosim biblioteca Wire.h pentru a citi valorile de temperatură și umiditate. Această bibliotecă facilitează comunicarea i2c între senzor și dispozitivul master. 0x44 este adresa I2C pentru SHT25. SHT25 funcționează într-un mod diferit de operațiuni. Puteți consulta foaia de date pentru aceasta. Folosim 0x2C și 0x06 ca MSB și, respectiv, LSB pentru operații cu o singură fotografie

Pasul 6: Publicarea valorilor în ThingSpeak folosind ThingSpeak MQTT API

Publicarea valorilor în ThingSpeak utilizând ThingSpeak MQTT API
Publicarea valorilor în ThingSpeak utilizând ThingSpeak MQTT API

Pentru a posta valorile noastre de temperatură și umiditate în cloud, folosim API-ul ThingSpeak MQTT. ThingSpeak este o platformă IoT. ThingSpeak este un serviciu web gratuit care vă permite să colectați și să stocați datele senzorilor în cloud. MQTT este un protocol comun utilizat în sistemele IoT pentru a conecta dispozitive și senzori de nivel scăzut. MQTT este folosit pentru a transmite mesaje scurte către și de la un broker. ThingSpeak a adăugat recent un broker MQTT, astfel încât dispozitivele să poată trimite mesaje către ThingSpeak. Puteți urma procedura pentru a configura canalul ThingSpeak din această postare

ThingSpeak MQTT

MQTT este o arhitectură de publicare / abonare dezvoltată în principal pentru a conecta lățimea de bandă și dispozitivele cu putere limitată prin rețelele fără fir. Este un protocol simplu și ușor care rulează peste socket-uri TCP / IP sau WebSockets. MQTT peste WebSockets poate fi securizat cu SSL. Arhitectura de publicare / abonare permite transmiterea mesajelor către dispozitivele client, fără ca dispozitivul să fie nevoie să interogheze continuu serverul. Un client este orice dispozitiv care se conectează la broker și poate publica sau abona la subiecte pentru a accesa informațiile. Un subiect conține informații de rutare pentru broker. Fiecare client care dorește să trimită mesaje le publică la un anumit subiect, iar fiecare client care dorește să primească mesaje se abonează la un anumit subiect

Publicați și abonați-vă folosind ThingSpeak MQTT

  • Publicarea pe canalele canalelor de alimentare / publicarea /
  • Publicarea pe un anumit canal de camp / publicare / câmpuri / câmp /
  • Abonați-vă la câmpul de canale canale / abonați-vă //
  • Abonați-vă la canalele de flux de canale private // abonați-vă / câmpuri / câmp /
  • Abonați-vă la toate câmpurile unui canal. canale // abonare / câmpuri / feild /

sarcină nulă WiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("timeout pentru această sarcină: / t");

Serial.println (tWiFi.getTimeout ());

if (! mqttCli.connected ())

{

Serial.println („Clientul nu este conectat”);

reconecteazăMQTT ();

}

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 (umed, 1));

int dataLength = dataString.length () + 1;

octet dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "publicat eșuat");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Pasul 7: Notificare prin e-mail a raportului meteo

Notificare prin e-mail despre raportul meteo
Notificare prin e-mail despre raportul meteo
Notificare prin e-mail despre raportul meteo
Notificare prin e-mail despre raportul meteo

Folosim applet-uri IFTTT pentru a transmite utilizatorului o notificare meteo în timp real. Așadar, l-am implementat prin ThingSpeak. Suntem în medie valorile de temperatură și umiditate de 5 fay. Ori de câte ori valoarea ultimei intrări este mai mare decât valoarea medie. Va declanșa o notificare prin e-mail „este o zi fierbinte”. iar când este mai mică decât valoarea medie. Va declanșa o notificare prin e-mail „Ce zi frumoasă”. În fiecare zi, în jurul orei 10:00 (IST), vom primi o notificare prin e-mail

canalID = ******;

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

umiditateDată = lucruSpeakRead (canalID, „Câmpuri”, 3, „NumDays”, 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = max (umiditateDate) -min (umiditateDate);

umidValue = 0,1 * perHumid + min (umiditateDate);

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

tempValue = 0,1 * perTemp + min (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', șir (canalID), '/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 = 'Este o zi fierbinte.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); Sfârșit

Pasul 8: Cod general

Cod general
Cod general
Cod general
Cod general
Cod general
Cod general

Cod general

Codul general este disponibil în acest depozit GitHub

Limitări

  • Există unele probleme cu publicarea datelor folosind publicați o metodă pentru cea mai mare parte a datelor. Pentru a rezolva această problemă, folosim funcția write ()
  • SPIFFS ar trebui formatate înainte de a încărca noile date în SPIFFS.
  • Nu trebuie să utilizați funcția delay (). delay () împiedică operația de fundal. În schimb, creați întârzieri folosind millis () numai dacă este necesar

credite

  • ESP826WebServer
  • Planificator de sarcini
  • SHT 25
  • API ThingSpeak MQTT
  • IFTTT
  • PubSubClient