Satura rādītājs:

Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes: 8 soļi
Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes: 8 soļi

Video: Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes: 8 soļi

Video: Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes: 8 soļi
Video: Laika ziņas 2024, Novembris
Anonim
Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes
Laika ziņas, izmantojot ThingSpeak MQTT un IFTTT sīklietotnes

Ievads

Mākoņu laikapstākļu lietojumprogramma, kas katru dienu sniedz laika ziņas kā e-pasta paziņojumu. Šī tīmekļa lietojumprogramma mēra temperatūru un mitrumu, izmantojot SHT25 un Adafruit Huzzah ESP8266. Tas sniedz mums reāllaika temperatūras un mitruma datus un stundu analīzi. Dati tiek sūtīti, izmantojot ThingSpeak MQTT API, un vēlāk mēs, izmantojot IFTTT protokolu, sniedzam lietotājam e -pasta paziņojumu, kad temperatūra sasniedz noteikto slieksni. SHT25 ir temperatūras un mitruma sensori, ko ražo Sensirion. SHT25 nodrošina augstu precizitātes līmeni aptuveni ± 2% RH. Mitruma diapazons ir no 0 līdz 100%, un temperatūras diapazons ir no -40 līdz 125 ° C. Tas ir daudz uzticamāks un ātrāks ar 8 sekunžu sensora reakcijas laiku.

Iespējas

  • Nodrošina reāllaika analītiku un statistiku, izmantojot Thing Speak MQTT API
  • E -pasta paziņojums tiek sniegts lietotājam noteiktā laikā, izmantojot IFTTT
  • Uzdevumu plānotājs tiek izmantots, lai ieplānotu uzdevumu, piemēram, datu iegūšana no sensoriem, sensora rādījumu publicēšana, MQTT tēmas abonēšana
  • Tas izmanto I2C protokolu, lai iegūtu sensora nolasījumu, kas ir precīzāks, paplašināms un mērogojams
  • miega režīmā, kad ierīce ir dīkstāvē vai netiek atzvanīts neviens uzdevums.
  • efektīva uzdevumu plānošana nodrošina ērtu lietošanu
  • Tiek mitināta atsevišķa tīmekļa lapa, kurā lietotājam ir jāsniedz savi lietotāja akreditācijas dati, lai izvairītos no ierīces mirgošanas katru reizi, kad tiek sasniegts cits wifi tīkls
  • SPIFFS tiek izmantots mūsu tīmekļa lapas saglabāšanai, lai padarītu mūsu kodu lasāmāku un mazāk neveiklu

1. darbība. Aparatūras un programmatūras specifikācija

Aparatūras un programmatūras specifikācija
Aparatūras un programmatūras specifikācija
Aparatūras un programmatūras specifikācija
Aparatūras un programmatūras specifikācija

Aparatūras specifikācija

  • Adafruit esp8266 Huzzah dēlis
  • Huzzah Board Shield
  • SHT25 Sensora modulis
  • I2C kabelis

Programmatūras specifikācija

  • Arduino IDE
  • IFTTT lieta
  • MQTT API

2. darbība. Lietotāja akreditācijas datu saglabāšana

Lietotāja akreditācijas datu glabāšana
Lietotāja akreditācijas datu glabāšana
Lietotāja akreditācijas datu glabāšana
Lietotāja akreditācijas datu glabāšana

Šeit mēs izmantojam sensoru SHT25 I2C, lai nolasītu temperatūras un relatīvā mitruma reāllaika vērtību un publicētu šo vērtību mākonī. Lai laiku pa laikam iegūtu atjauninātu sensora vērtību un vienlaikus publicētu šos atjauninājumus, mēs izmantojam Arduino uzdevumu plānotāja bibliotēku. Mākoņdarbiem mēs izmantojam ThingSpeak MQTT API. Vēlāk mēs, izmantojot IFTTT sīklietotnes, nodrošinām lietotājam reāllaika laika ziņas. Jūs varat veikt šīs darbības, lai izveidotu savu laika staciju. Tātad, DIY.

Pirms turpināt tālāk. Mums jāsaglabā lietotāja akreditācijas dati. Šim nolūkam mēs mitinām tīmekļa serveri vietnē 192.169.1.4. Mēs esam saglabājuši savu tīmekļa veidlapu SPIFFS. Kad ierīce tiek palaista, tā 60 sekundes mitina tīmekļa serveri. Lietotājam jāveic šādas darbības.

  • Izveidojiet savienojumu ar AP ESPuser, tas ir norādīts jūsu pieejamo wifi tīklu sarakstā. Izveidojiet savienojumu ar šo AP un ievadiet paroli "*******"
  • Kad tas ir savienots, dodieties uz savu pārlūkprogrammu un ievadiet IP 192.168.1.4.
  • Ievades laukos ievadiet vietējā WiFi SSID un paroli un ievadiet IESNIEGT
  • Šie akreditācijas dati tiks saglabāti EEPROM
  • Pēc 60 sekundēm ierīce automātiski atvienosies no AP
  • Nākamreiz, kad ieslēgsit ierīci, lietotājam nav jāveic šī procedūra, ierīce automātiski ielādēs lietotāja akreditācijas datus no EEPROM un turpinās ar sensora rādījumu iegūšanu no I2C saskarnes un publicēšanu mākonī

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

Serial.print ("Piekļuves punkta konfigurēšana …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Lietotāja akreditācijas datu iestatīšana");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = milis ();

while (milis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** ROKURA SAKNE ****************** ********* // void handleRoot () {

ja (server.hasArg ("ssid") && server.hasArg ("parole"))

{

// Ja visos veidlapas laukos ir datu zvans

handelSubmit ()

handleSubmit (); }

cits {

// Atkārtoti parādiet formu

// lasīt failu, kas atrodas spiffos

Faila fails = SPIFFS.open ("/webform.html", "r");

server.streamFile (fails, "teksts/html");

// neaizmirstiet aizvērt failu

file.close ();

}}

// Pārbaudiet statusu, kurā ir argumenti ssid un parole

// Pēc tam ierakstiet akreditācijas datus ROM

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

3. darbība: tīmekļa veidlapas iestatīšana SPIFFS

SPIFFS

Sērijas perifērijas interfeisa zibatmiņu sistēma vai saīsināti SPIFFS. Tā ir viegla failu sistēma mikrokontrolleriem ar SPI zibatmiņas mikroshēmu. ESP8266 iebūvētajā zibatmiņas mikroshēmā ir daudz vietas jūsu tīmekļa lapām, it īpaši, ja jums ir 1 MB, 2 MB vai 4 MB versija. Mēs arī esam saglabājuši savu tīmekļa vietni Flash sistēmā. Lai augšupielādētu datus spiffos, mums jāveic dažas darbības

  1. Lejupielādējiet rīku:
  2. Arduino skiču grāmatu direktorijā izveidojiet rīku direktoriju, ja tā vēl nav
  3. Izpakojiet rīku rīku direktorijā (ceļš izskatīsies kā /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Restartējiet Arduino IDE
  5. Atveriet skici (vai izveidojiet jaunu un saglabājiet to)
  6. Dodieties uz skiču direktoriju (izvēlieties Skice> Show Sketch Folder)
  7. Izveidojiet direktoriju ar nosaukumu dati un visus failus, kurus vēlaties tur esošajā failu sistēmā. Esam augšupielādējuši savu HTML lapu ar nosaukumu webform.html
  8. Pārliecinieties, vai esat izvēlējies plati, portu un slēgtu sērijas monitoru
  9. Atlasiet Rīki> ESP8266 Skices datu augšupielāde. Tam vajadzētu sākt failu augšupielādi ESP8266 flash failu sistēmā. Kad tas ir izdarīts, IDE statusa joslā tiks parādīts ziņojums SPIFFS attēla augšupielāde.

Faila fails = SPIFFS.open ("/webform.html", "r");

server.streamFile (fails, "teksts/html");

// neaizmirstiet aizvērt failu

file.close ();

4. solis: uzdevumu plānošana

Šajā apmācībā mēs veicam divas darbības:

  • Izlasiet datus no SHT25, izmantojot I2C protokolu
  • Publicējiet atjauninātos datus mākonī, izmantojot ThingSpeak MQTT API

Lai to panāktu, mēs izmantojam TaskScheduler bibliotēku. Mēs esam ieplānojuši divus dažādus uzdevumus, kas attiecas uz divām dažādām kontroles darbībām. tas tiek darīts šādi

  • 1. uzdevums ir sensora vērtības nolasīšanai, šis uzdevums tiek izpildīts 1 sekundi, līdz tiek sasniegts taimauts 10 sekundes.
  • Kad Task1 sasniedz savu taimautu, mēs izveidojam savienojumu ar vietējo Wifi un MQTT brokeri.
  • Tagad 2. uzdevums ir iespējots, un mēs atspējojam 1. uzdevumu. 2. uzdevums ir sensoru datu publicēšanai Thing Speak MQTT brokerim, šis uzdevums tiek izpildīts 20 sekundes, līdz tas sasniedz 20 sekunžu noildzi
  • Kad 2. uzdevums ir sasniedzis taimautu, 1. uzdevums ir atkal iespējots un 2. uzdevums ir atspējots. šeit atkal mēs iegūstam atjaunināto vērtību, un process turpinās
  • ja netiek atzvanīts vai ierīce ir dīkstāvē, tā tiek pārslēgta uz gaišo miega režīmu, tādējādi ietaupot enerģiju.

// --------- uzdevuma atzvanīšanas prototips ------------ //

anulēts uzdevumsI2CCallback ();

void taskI2CDisable ();

anulēts uzdevumsWiFiCallback ();

void taskWiFiDisable ();

// --------- Uzdevumi ------------ //

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

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

// iespējot tI2C tI2C.enable ();

5. darbība. Temperatūras un mitruma vērtību nolasīšana no SHT25

Temperatūras un mitruma vērtību nolasīšana no SHT25
Temperatūras un mitruma vērtību nolasīšana no SHT25

I2C ir divu vadu saskarne, kas saziņai ar galveno ierīci izmanto tikai divus vadus. Viens no tiem ir SCL (sērijas pulkstenis), bet otrs - SDA (sērijas dati). Katrai vergu ierīcei ir unikāla adrese. SHT 25 ir arī 8 bitu adrese, un tam var piekļūt, izmantojot 0x44 adresi. tai ir 8 biti no adreses, kur 7 biti ir faktiskā adrese, un, lai gan labākais LSB bits 0 tiek izmantots, lai signalizētu nolasīšanu no ierīces vai rakstīšanu uz to. Ja bits 0 ir iestatīts uz 1, tad galvenā ierīce nolasīs no vergu I2C ierīces. I2C ir daudz uzticamāks, mērogojamāks un ātrāks, un pat tam ir daudz darbības režīmu, kas padara to daudz energoefektīvāku

Mēs izmantojam Wire.h bibliotēku, lai nolasītu temperatūras un mitruma vērtības. Šī bibliotēka atvieglo i2c komunikāciju starp sensoru un galveno ierīci. 0x44 ir SHT25 I2C adrese. SHT25 darbojas citā darbības režīmā. Lai to izdarītu, varat atsaukties uz datu lapu. Mēs izmantojam 0x2C un 0x06 attiecīgi kā MSB un LSB viena kadra darbībai

6. darbība: vērtību publicēšana vietnē ThingSpeak, izmantojot ThingSpeak MQTT API

Vērtību publicēšana vietnē ThingSpeak, izmantojot ThingSpeak MQTT API
Vērtību publicēšana vietnē ThingSpeak, izmantojot ThingSpeak MQTT API

Temperatūras un mitruma vērtību publicēšanai mākonī mēs izmantojam ThingSpeak MQTT API. ThingSpeak ir IoT platforma. ThingSpeak ir bezmaksas tīmekļa pakalpojums, kas ļauj apkopot un glabāt sensoru datus mākonī. MQTT ir parasts protokols, ko izmanto IoT sistēmās, lai savienotu zema līmeņa ierīces un sensorus. MQTT izmanto īsziņu nodošanai brokerim un no tā. ThingSpeak nesen ir pievienojis MQTT brokeri, lai ierīces varētu nosūtīt ziņojumus uz ThingSpeak. No šīs ziņas varat izpildīt procedūru, lai iestatītu kanālu ThingSpeak Channel

ThingSpeak MQTT

MQTT ir publicēšanas/abonēšanas arhitektūra, kas galvenokārt izstrādāta, lai bezvadu tīklos savienotu joslas platumu un ierobežotas jaudas ierīces. Tas ir vienkāršs un viegls protokols, kas darbojas pa TCP/IP ligzdām vai WebSockets. MQTT, izmantojot WebSockets, var nodrošināt, izmantojot SSL. Publicēšanas/abonēšanas arhitektūra ļauj ziņojumus nosūtīt uz klienta ierīcēm bez ierīces nepārtrauktas aptaujas serverī. Klients ir jebkura ierīce, kas izveido savienojumu ar brokeri un var publicēt vai abonēt tēmas, lai piekļūtu informācijai. Tēma satur starpnieka maršrutēšanas informāciju. Katrs klients, kurš vēlas sūtīt ziņojumus, publicē tos noteiktā tēmā, un katrs klients, kurš vēlas saņemt ziņas, abonē noteiktu tēmu

Publicējiet un abonējiet, izmantojot ThingSpeak MQTT

  • Publicēšana kanālu plūsmas kanālos /publicēt /
  • Publicēšana noteiktā lauka kanālos/publicēt/lauki/lauks/
  • Abonējiet kanāla lauka kanālus/abonējiet //
  • Abonēt privāto kanālu plūsmas kanālus // abonēt/lauki/lauks/
  • Abonējiet visus kanāla laukus. kanāli // abonēt/lauki/feild/

tukšs uzdevumsWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("šī uzdevuma noildze: / t");

Serial.println (tWiFi.getTimeout ());

ja (! mqttCli.connected ())

{

Serial.println ("Klients nav savienots");

atkārtoti savienotMQTT ();

}

String topicString = "kanāli/"+virkne (kanāla ID)+"/publicēt/"+virkne (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 (mitrs, 1));

int dataLength = dataString.length ()+1;

baitu dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publicēts": "publicēts neizdevās");

mqttCli.endPublish ();

//mqttCli.loop ();

}

7. darbība. E -pasta paziņojums par laika apstākļu ziņojumiem

E -pasta paziņojums par laika ziņām
E -pasta paziņojums par laika ziņām
E -pasta paziņojums par laika ziņām
E -pasta paziņojums par laika ziņām

Mēs izmantojam IFTTT sīklietotnes, lai sniegtu lietotājam reāllaika laika ziņu par e-pastu. Tātad, mēs to esam ieviesuši, izmantojot ThingSpeak. Mēs vidēji aprēķinām piecas temperatūras un mitruma vērtības. Ikreiz, kad pēdējā ieraksta vērtība ir lielāka par vidējo vērtību. Tas aktivizēs e -pasta paziņojumu "ir karsta diena". un kad tā ir mazāka par vidējo vērtību. Tas aktivizēs e -pasta paziņojumu “Cik skaista diena”. Katru dienu ap pulksten 10:00 (IST) mēs saņemsim paziņojumu pa e -pastu

kanāla ID = ******;

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

mitruma dati = lietaSpeakRead (kanāla ID, 'Lauki', 3, 'NumDays', 5); tempData = thingSpeakRead (kanāla ID, 'Lauki', 1, 'NumDays', 5);

perHumid = max (mitruma dati) -min (mitruma dati);

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

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

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

urlTemp = strcat ('https://api.thingspeak.com/channels/', virkne (kanāla ID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', virkne (kanāla ID), '/fields/3/last.txt'); lastTempValue = str2num (tīmekļa lasījums (urlTemp)); lastHumidValue = str2num (tīmekļa lasījums (urlHumid));

ja (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Ir karsta diena.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); beigas

8. solis: vispārējais kods

Kopējais kods
Kopējais kods
Kopējais kods
Kopējais kods
Kopējais kods
Kopējais kods

Kopējais kods

Kopējais kods ir pieejams šajā GitHub krātuvē

Ierobežojumi

  • Ir dažas problēmas, publicējot datus, izmantojot publicēšanas metodi lielai datu daļai. Lai atrisinātu šo problēmu, mēs izmantojam funkciju write ()
  • Pirms jaunu datu augšupielādes SPIFFS SPIFFS ir jāformatē.
  • Nedrīkst izmantot funkciju delay (). delay () kavē fona darbību. Tā vietā izveidojiet kavēšanos, izmantojot milis () tikai tad, ja tas ir nepieciešams

Kredīti

  • ESP826WebServer
  • Uzdevumu plānotājs
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Ieteicams: