INHOUDSOPGAWE:

Weerberig met ThingSpeak MQTT en IFTTT applets: 8 stappe
Weerberig met ThingSpeak MQTT en IFTTT applets: 8 stappe

Video: Weerberig met ThingSpeak MQTT en IFTTT applets: 8 stappe

Video: Weerberig met ThingSpeak MQTT en IFTTT applets: 8 stappe
Video: Weerberig in Atlantis 2024, November
Anonim
Weerberig met behulp van ThingSpeak MQTT en IFTTT applets
Weerberig met behulp van ThingSpeak MQTT en IFTTT applets

Inleiding

'N Cloud-gebaseerde weerprogram wat daaglikse weerberigte as e-poskennisgewing bied. Hierdie webtoepassing meet temperatuur en humiditeit met behulp van SHT25 en Adafruit Huzzah ESP8266. Dit bied ons real-time temperatuur- en humiditeitsdata en uurlikse analise. Die data word gestuur met behulp van ThingSpeak MQTT API en later stuur ons 'n e -pos kennisgewing aan die gebruiker wanneer die temperatuur die toegekende drempel bereik met behulp van IFTTT -protokol. SHT25 is 'n temperatuur- en humiditeitsensor gemaak deur Sensirion. Die SHT25 bied 'n hoë akkuraatheid rondom ± 2% RH. Die humiditeitsbereik is tussen 0 en 100% en die temperatuurbereik is tussen -40 en 125 ° C. Dit is baie betroubaarder en vinniger met 8 sekondes sensorreaksietyd.

Kenmerke

  • Bied u real-time analise en statistieke met behulp van Thing Speak MQTT API
  • 'N E -poskennisgewing word op 'n bepaalde tydstip aan die gebruiker verskaf met behulp van IFTTT
  • Taakplanner word gebruik om die taak te skeduleer, soos om data van sensors af te haal, die sensorlesings te publiseer, in te teken op die MQTT -onderwerp
  • Dit gebruik I2C -protokol om die sensorlesing te haal, wat meer akkuraat, uitbreidbaar en skaalbaar is
  • slaapmodus as die toestel ledig is of as die taak nie terugbel nie.
  • Doeltreffende taakskedulering bied 'n probleemlose gebruik
  • 'N Afsonderlike webblad word aangebied waar die gebruiker sy gebruikersbewyse moet verstrek om te voorkom dat u toestel elke keer flits as dit binne ander wifi -netwerke se bereik is
  • SPIFFS word gebruik om ons webblad op te slaan om ons kode leesbaar en minder lomp te maak

Stap 1: Spesifikasie van hardeware en sagteware

Hardeware en sagteware spesifikasie
Hardeware en sagteware spesifikasie
Hardeware en sagteware spesifikasie
Hardeware en sagteware spesifikasie

Hardeware spesifikasie

  • Adafruit esp8266 Huzzah -bord
  • Huzzah Board Shield
  • SHT25 Sensormodule
  • I2C kabel

Sagteware spesifikasie

  • Arduino IDE
  • IFTTT ding praat
  • MQTT API

Stap 2: Stoor gebruikersbewyse

Stoor gebruikersbewyse
Stoor gebruikersbewyse
Stoor gebruikersbewyse
Stoor gebruikersbewyse

Hier gebruik ons die SHT25 I2C-sensor om die real-time waarde van temperatuur en relatiewe humiditeit te lees en hierdie waarde aan die wolk te plaas. Om die opgedateerde sensorwaarde van tyd tot tyd te kry en om hierdie opdaterings gelyktydig te plaas, gebruik ons Arduino's Task Scheduler Library. Vir wolkbedrywighede gebruik ons ThingSpeak MQTT API. Later lewer ons die gebruiker intydse weerberigte met behulp van IFTTT-applets. U kan hierdie stappe volg om u eie weerstasie te maak. Dus, DIY.

Voordat u verder gaan. Ons moet die gebruikersbewyse stoor. Vir hierdie doel bied ons 'n webbediener aan by 192.169.1.4. Ons het ons webvorm in SPIFFS gestoor. Sodra die toestel begin, is dit 'n webbediener vir 60 sekondes. Die gebruiker moet hierdie stappe volg.

  • Koppel aan die AP ESPuser, dit word gelys in u lys van beskikbare wifi -netwerke. Koppel aan hierdie AP en voer die wagwoord "*******" in
  • Sodra dit gekoppel is, gaan na u blaaier en voer die IP 192.168.1.4 in.
  • Voer die SSID en wagwoord van u plaaslike WiFi in die invoervelde in en voer IN
  • Hierdie bewys sal in EEPROM gestoor word
  • Na 60 sekondes word die toestel outomaties van die AP ontkoppel
  • Die volgende keer dat u die toestel aanskakel, hoef die gebruiker nie hierdie prosedure te volg nie. Die toestel sal outomaties die gebruikersbewyse van EEPROM af haal en voortgaan om die sensorlesings van die I2C -koppelvlak af te haal en dit na die wolk te plaas

// --------- 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 ("Toegangspunt instel …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Die opstel van gebruikersbewyse");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

bediener.begin ();

APTimer = millis ();

terwyl (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// *************************** HANDLE WORTEL ****************** ********* // leegte handleRoot () {

as (server.hasArg ("ssid") && server.hasArg ("wagwoord"))

{

// As alle vormvelde data -oproep bevat

handelSubmit ()

handleSubmit (); }

anders {

// Wys die vorm weer

// lees die lêer in spiffs

Lêer lêer = SPIFFS.open ("/webform.html", "r");

server.streamFile (lêer, "text/html");

// moenie vergeet om die lêer toe te maak nie

file.close ();

}}

// Kontroleer die status dat dit die argumente ssid en wagwoord het

// Skryf dan die geloofsbriewe na ROM

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

Stap 3: Stel u webvorm in SPIFFS op

SPIFFS

Seriële perifere koppelvlak Flash -lêerstelsel, of kortweg SPIFFS. Dit is 'n ligte lêerstelsel vir mikrobeheerders met 'n SPI-flitsskyfie. Die ingeboude flitsskyfie van die ESP8266 het baie ruimte vir u webblaaie, veral as u die weergawe van 1 MB, 2 MB of 4 MB het. Ons het ook ons webblad in Flash System gestoor. Daar is 'n paar stappe wat ons moet volg om data na spiffs op te laai

  1. Laai die instrument af:
  2. Maak in u Arduino -sketsboekgids 'n gereedskapgids as dit nog nie bestaan nie
  3. Pak die gereedskap uit in die gids met gereedskap (die pad sal soos /Arduino/tools/ESP8266FS/tool/esp8266fs.jar lyk)
  4. Herbegin Arduino IDE
  5. Maak 'n skets oop (of skep 'n nuwe en stoor dit)
  6. Gaan na die sketsgids (kies Skets> Wys sketsgids)
  7. Skep 'n gids met die naam data en alle lêers wat u in die lêerstelsel wil hê. Ons het ons HTML -bladsy met die naam webform.html opgelaai
  8. Maak seker dat u 'n bord, poort en geslote seriële monitor gekies het
  9. Kies Tools> ESP8266 Sketsdata -oplaai. Dit moet begin om die lêers na die ESP8266 -lêerstelsel op te laai. As dit klaar is, sal die IDE -statusbalk die SPIFFS -prentopgelaaide boodskap vertoon.

Lêer lêer = SPIFFS.open ("/webform.html", "r");

server.streamFile (lêer, "text/html");

// moenie vergeet om die lêer toe te maak nie

file.close ();

Stap 4: taakskedulering

In hierdie tutoriaal voer ons twee bewerkings uit:

  • Lees die data van SHT25 met behulp van I2C -protokol
  • Plaas die opgedateerde data met behulp van ThingSpeak MQTT API in die wolk

Om dit te bereik, gebruik ons TaskScheduler -biblioteek. Ons het twee verskillende take geskeduleer wat verwys na twee verskillende beheerbedrywighede. dit word soos volg gedoen

  • Taak 1 is vir die lees van die sensorwaarde wat hierdie taak vir 1 sekonde uitvoer totdat dit 'n time -out van 10 sekondes bereik.
  • As die taak1 sy tydsberekening bereik, maak ons verbinding met die plaaslike Wifi- en MQTT -makelaar.
  • Nou is taak 2 geaktiveer en ons skakel taak 1 uit. Taak 2 is om die sensorgegevens aan Thing Speak MQTT -makelaar te publiseer, hierdie taak duur 20 sekondes totdat dit 'n tydsduur van 20 sekondes bereik
  • As die taak 2 sy tydsbeperking bereik, word taak 1 weer aangeskakel en taak 2 is gedeaktiveer. hier kry ons weer die opgedateerde waarde en die proses gaan voort
  • as geen terugbel gebel word nie of die toestel nie gebruik word nie, gaan dit na Light Sleep en bespaar dus krag.

// --------- prototipe vir terugbel van take ------------ //

nietige taakI2CCallback ();

nietige taakI2CDisable ();

nietige taakWiFiCallback ();

void taskWiFiDisable ();

// --------- Take ------------ //

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

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

// aktiveer tI2C tI2C.enable ();

Stap 5: Lees temperatuur- en humiditeitswaardes vanaf SHT25

Leestemperatuur en humiditeitswaardes vanaf SHT25
Leestemperatuur en humiditeitswaardes vanaf SHT25

I2C is 'n tweedraad-koppelvlak wat slegs twee drade gebruik om met die meester-toestel te kommunikeer. Die een is SCL (Serial Clock) en die ander is SDA (Serial Data). Elke slawe -toestel het 'n unieke adres. SHT 25 het ook 'n 8-bis adres en kan verkry word deur 'n 0x44 adres. dit het 'n 8 -bits van die adres waar 7 bisse die werklike adres is en terwyl die regterkantste LSB -bits 0 gebruik word om te lees of te skryf na die toestel. As bit 0 op 1 gestel is, sal die meesterapparaat lees van die slaaf I2C -toestel. I2C is baie betroubaarder, skaalbaarder en vinniger, en selfs baie funksies wat dit baie meer energie -doeltreffend maak

Ons gebruik die Wire.h -biblioteek om die temperatuur- en humiditeitswaardes te lees. Hierdie biblioteek vergemaklik i2c -kommunikasie tussen die sensor en die meesterapparaat. 0x44 is die I2C -adres vir SHT25. SHT25 werk in 'n ander werkswyse. U kan die datablad daarvoor raadpleeg. Ons gebruik 0x2C en 0x06 as MSB en LSB onderskeidelik vir 'n enkele opname

Stap 6: Publiseer waardes aan ThingSpeak met behulp van ThingSpeak MQTT API

Publiseer waardes aan ThingSpeak met behulp van ThingSpeak MQTT API
Publiseer waardes aan ThingSpeak met behulp van ThingSpeak MQTT API

Om ons temperatuur- en humiditeitswaardes in die wolk te plaas, gebruik ons ThingSpeak MQTT API. ThingSpeak is 'n IoT -platform. ThingSpeak is 'n gratis webdiens waarmee u sensordata in die wolk kan versamel en stoor. MQTT is 'n algemene protokol wat in IoT-stelsels gebruik word om toestelle en sensors op lae vlak aan te sluit. MQTT word gebruik om kort boodskappe na en van 'n makelaar deur te gee. ThingSpeak het onlangs 'n MQTT -makelaar bygevoeg sodat toestelle boodskappe na ThingSpeak kan stuur. U kan die prosedure volg om ThingSpeak -kanaal vanaf hierdie pos op te stel

ThingSpeak MQTT

MQTT is 'n publiseer-/intekenargitektuur wat hoofsaaklik ontwikkel is om bandwydte en toestelle met beperkte krag oor draadlose netwerke te verbind. Dit is 'n eenvoudige en ligte protokol wat oor TCP/IP -voetstukke of WebSockets loop. MQTT via WebSockets kan met SSL beveilig word. Met die publiseer/inteken -argitektuur kan boodskappe na die kliënttoestelle gestuur word sonder dat die toestel die bediener voortdurend hoef te peil. 'N Onderwerp bevat die routeringsinligting vir die makelaar. Elke kliënt wat boodskappe wil stuur, publiseer dit na 'n sekere onderwerp, en elke kliënt wat boodskappe wil ontvang, teken op 'n sekere onderwerp in

Publiseer en teken in met ThingSpeak MQTT

  • Publiseer na kanaalkanale /publiseer /
  • Publiseer na 'n spesifieke veldkanale/publish/fields/field/
  • Teken in op die kanaalveldkanale/teken in //
  • Teken in op die kanaalkanale vir privaat kanaal // subscribe/fields/field/
  • Teken in op alle velde van 'n kanaal. kanale // subscribe/fields/feild/

ongeldige taakWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("time -out vir hierdie taak: / t");

Serial.println (tWiFi.getTimeout ());

as (! mqttCli.connected ())

{

Serial.println ("Kliënt nie gekoppel nie");

herkoppelMQTT ();

}

String topicString = "channel/"+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)? "Gepubliseer": "gepubliseer misluk");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Stap 7: E -poskennisgewing oor weerberigte

Weerberig E -poskennisgewing
Weerberig E -poskennisgewing
Weerberig E -poskennisgewing
Weerberig E -poskennisgewing

Ons gebruik IFTTT-applets om intydse weerberigte per e-pos aan die gebruiker te gee. Ons het dit dus geïmplementeer deur ThingSpeak. Ons is gemiddeld die 5-fay waardes van temperatuur en humiditeit. As die waarde van die laaste inskrywing groter is as die gemiddelde waarde. Dit sal 'n e -poskennisgewing veroorsaak "dit is 'n warm dag". en as dit minder is as die gemiddelde waarde. Dit sal 'n e -poskennisgewing "Wat 'n pragtige dag" veroorsaak. Ons kry elke dag omstreeks 10:00 (IST) 'n e -pos kennisgewing

channelID = ******;

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

moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = maks (moistData) -min (moistData);

humidValue = 0,1*perHumid+min (moistData);

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

tempValue = 0.1*perTemp+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));

as (lastTempValue

as (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Dit is 'n warm dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); einde

Stap 8: Algemene kode

Algehele kode
Algehele kode
Algehele kode
Algehele kode
Algehele kode
Algehele kode

Algehele kode

Die algehele kode is beskikbaar in hierdie GitHub -bewaarplek

Beperkings

  • Daar is 'n paar probleme met die publisering van die data met behulp van 'n metode vir publiseer vir die grootste deel van die data. Om hierdie probleem op te los, gebruik ons die skryf () -funksie
  • SPIFFS moet geformateer word voordat die nuwe data na SPIFFS opgelaai word.
  • U moet nie die vertragings () -funksie gebruik nie. vertraging () belemmer die agtergrondbewerking. Skep eerder vertragings met millis () as dit nodig is

Krediete

  • ESP826WebServer
  • Taak skeduleerder
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Aanbeveel: