Sisukord:

Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil: 8 sammu
Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil: 8 sammu

Video: Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil: 8 sammu

Video: Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil: 8 sammu
Video: Thingspeak MQTT - ESP32 or ESP8266 - Virtuino IoT 2024, November
Anonim
Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil
Ilmateade ThingSpeak MQTT ja IFTTT aplettide abil

Sissejuhatus

Pilvepõhine ilmarakendus, mis pakub meiliteatisena igapäevaseid ilmateateid. See veebirakendus mõõdab temperatuuri ja niiskust, kasutades SHT25 ja Adafruit Huzzah ESP8266. See pakub meile reaalajas andmeid temperatuuri ja niiskuse kohta ning tunni analüüse. Andmete saatmiseks kasutatakse ThingSpeak MQTT API -d ja hiljem saadame kasutajale e -posti teel märguande, kui temperatuur jõuab IFTTT -protokolli abil määratud künniseni. SHT25 on Sensirioni toodetud temperatuuri ja niiskuse andurid. SHT25 pakub kõrget täpsust ± 2% RH. Selle niiskus on vahemikus 0 kuni 100% ja temperatuurivahemik -40 kuni 125 ° C. See on 8 sekundi anduri reageerimisajaga palju usaldusväärsem ja kiirem.

Funktsioonid

  • Pakub teile reaalajas analüüse ja statistikat, kasutades Thing Speak MQTT API-d
  • IFTTT abil antakse kasutajale määratud ajal e -posti märguanne
  • Ülesannete plaanijat kasutatakse ülesande ajastamiseks, näiteks andurite andmete toomine, andurite näitude avaldamine, MQTT teema tellimine
  • See kasutab I2C protokolli anduri näidu hankimiseks, mis on täpsem, laiendatav ja skaleeritav
  • unerežiimis, kui seade on jõudeolekus või üleskutsele tagasi ei helistata.
  • tõhus ülesannete ajastamine tagab probleemideta kasutamise
  • Hostitakse eraldi veebileht, kus kasutaja peab esitama oma kasutaja mandaadi, et vältida seadme vilkumist iga kord, kui jõuate teiste WiFi -võrkude juurde
  • SPIFFS -i kasutatakse meie veebisaidi salvestamiseks, et muuta meie kood loetavaks ja vähem kohmakaks

Samm: riistvara ja tarkvara spetsifikatsioon

Riistvara ja tarkvara spetsifikatsioon
Riistvara ja tarkvara spetsifikatsioon
Riistvara ja tarkvara spetsifikatsioon
Riistvara ja tarkvara spetsifikatsioon

Riistvara spetsifikatsioon

  • Adafruit esp8266 Huzzah pardal
  • Huzzah Board Shield
  • SHT25 andurimoodul
  • I2C kaabel

Tarkvara spetsifikatsioon

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

2. toiming: kasutaja mandaatide salvestamine

Kasutaja mandaatide salvestamine
Kasutaja mandaatide salvestamine
Kasutaja mandaatide salvestamine
Kasutaja mandaatide salvestamine

Siin kasutame SHT25 I2C andurit, et lugeda temperatuuri ja suhtelise niiskuse reaalajas väärtust ning postitada need väärtused pilve. Aeg -ajalt värskendatud anduri väärtuse saamiseks ja nende värskenduste samaaegseks postitamiseks kasutame Arduino ülesannete ajakava raamatukogu. Pilvetoimingute jaoks kasutame ThingSpeak MQTT API -d. Hiljem esitame IFTTT apletide abil kasutajale reaalajas ilmateate. Saate oma ilmajaama koostamiseks järgida neid samme. Niisiis, DIY.

Enne kui edasi minna. Peame salvestama kasutaja mandaadi. Sel eesmärgil majutame veebiserverit aadressil 192.169.1.4. Oleme oma veebivormi salvestanud SPIFFS -i. Kui seade käivitub, võõrustab see 60 sekundit veebiserverit. Kasutaja peaks neid samme järgima.

  • Ühendage AP ESPuseriga, see on loetletud teie saadaolevate WiFi -võrkude loendis. Looge ühendus selle AP -ga ja sisestage parool "*******"
  • Kui see on ühendatud, minge oma brauserisse ja sisestage IP 192.168.1.4.
  • Sisestage sisestusväljadele oma kohaliku WiFi SSID ja parool ning sisestage SUBMIT
  • Need mandaadid salvestatakse EEPROM -i
  • 60 sekundi pärast katkeb seade AP-st automaatselt
  • Järgmine kord, kui seadme sisse lülitate, ei pea kasutaja seda protseduuri järgima. Seade otsib automaatselt kasutaja mandaadi EEPROM -ist ja jätkab andurite näitude hankimist I2C -liideselt ja postitamist pilve

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

Serial.print ("Pöörduspunkti seadistamine …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Kasutaja mandaadi seadistamine");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis ()-APTimer <APIvaheaeg) {

server.handleClient ();

}

// **************************** KÄSITSEJUUR ****************** ********* // void handleRoot () {

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

{

// Kui kõik vormiväljad sisaldavad andmekõnet

handelSubmit ()

handleSubmit (); }

muu {

// Kuva vorm uuesti

// lugeda spiffides sisalduvat faili

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

server.streamFile (fail, "tekst/html");

// ärge unustage faili sulgeda

file.close ();

}}

// Kontrollige olekut, et sellel on argumendid ssid ja parool

// Seejärel kirjuta volikirjad ROMile

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

3. samm: veebivormi seadistamine SPIFFS -is

SPIFFS

Serial Peripheral Interface Flash File System ehk lühidalt SPIFFS. See on kerge failisüsteem SPI välklambiga mikrokontrolleritele. ESP8266 pardal oleval välklambil on teie veebilehtede jaoks palju ruumi, eriti kui teil on versioon 1 MB, 2 MB või 4 MB. Oleme oma veebilehe ka Flash -süsteemi salvestanud. Andmete üleslaadimiseks spiffidesse peame järgima mõningaid samme

  1. Laadige tööriist alla:
  2. Looge oma Arduino visandiraamatu kataloogis tööriistade kataloog, kui seda veel pole
  3. Pakkige tööriist tööriistade kataloogi (tee näeb välja /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Taaskäivitage Arduino IDE
  5. Avage visand (või looge uus ja salvestage see)
  6. Minge visandikataloogi (valige Visand> Kuva visandikaust)
  7. Looge seal failisüsteemis kataloog nimega andmed ja kõik failid, mida soovite. Laadisime üles oma HTML -lehe nimega webform.html
  8. Veenduge, et olete valinud tahvli, pordi ja suletud jadamonitori
  9. Valige Tööriistad> ESP8266 Sketch Data Upload. See peaks alustama failide üleslaadimist välkfailisüsteemi ESP8266. Kui see on tehtud, kuvatakse IDE olekuribal teade SPIFFS Image Uploaded.

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

server.streamFile (fail, "tekst/html");

// ärge unustage faili sulgeda

file.close ();

4. samm: ülesannete ajastamine

Selles õpetuses teeme kahte toimingut:

  • Lugege SHT25 andmeid I2C protokolli abil
  • Postitage värskendatud andmed pilve, kasutades ThingSpeak MQTT API -d

Selle saavutamiseks kasutame TaskScheduleri teeki. Oleme kavandanud kaks erinevat ülesannet, mis viitavad kahele erinevale kontrollitoimingule. seda tehakse järgmiselt

  • Ülesanne 1 on anduri väärtuse lugemiseks, see ülesanne kestab 1 sekund, kuni see jõuab 10 sekundi aegumiseni.
  • Kui ülesanne 1 jõuab aegumiseni, loome ühenduse kohaliku Wifi ja MQTT maakleriga.
  • Nüüd on ülesanne 2 lubatud ja keelame ülesande 1.
  • Kui ülesanne 2 jõuab oma aegumiseni, on ülesanne 1 uuesti lubatud ja ülesanne 2 keelatud. jälle saame siin värskendatud väärtuse ja protsess läheb edasi
  • kui tagasihelistamisele ei helistata või seade on jõudeolekus, läheb see valgusrežiimi, säästes seega energiat.

// --------- ülesande tagasihelistamise prototüüp ------------ //

tühine ülesanneI2CCallback ();

void taskI2CDisable ();

tühine ülesanneWiFiCallback ();

tühine ülesanneWiFiDisable ();

// --------- Ülesanded ------------ //

Ülesanne tI2C (2 * TASK_SECOND, TASK_FOREVER ja & taskI2CCallback, & ts, false, NULL ja taskI2CDisable);

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

// lubada tI2C tI2C.enable ();

Samm: temperatuuri ja niiskuse väärtuste lugemine SHT25 -st

Temperatuuri ja niiskuse väärtuste lugemine SHT25 -st
Temperatuuri ja niiskuse väärtuste lugemine SHT25 -st

I2C on kahejuhtmeline liides, mis kasutab põhiseadmega suhtlemiseks ainult kahte juhtmest. Üks neist on SCL (jadakell) ja teine SDA (jadaandmed). Igal alamseadmel on ainulaadne aadress. SHT 25-l on ka 8-bitine aadress ja sellele pääseb juurde 0x44 aadressiga. sellel on 8 bitti aadressist, kus tegelik aadress on 7 bitti ja parempoolsemat LSB -bitti 0 kasutatakse seadme lugemise või seadmesse kirjutamise signaalimiseks. Kui bit 0 on seatud väärtusele 1, loeb põhiseade alamseadmest I2C. I2C on palju usaldusväärsem, skaleeritavam ja kiirem ning isegi sellel on palju töörežiime, mis muudab selle palju energiasäästlikumaks

Temperatuuri ja niiskuse väärtuste lugemiseks kasutame Wire.h raamatukogu. See teek hõlbustab i2c suhtlust anduri ja põhiseadme vahel. 0x44 on SHT25 I2C -aadress. SHT25 töötab erinevas töörežiimis. Selle jaoks saate viidata andmelehele. Kasutame ühe võtte tegemiseks vastavalt MSB ja LSB -d vastavalt 0x2C ja 0x06

6. samm: väärtuste avaldamine ThingSpeak'is, kasutades ThingSpeak MQTT API -d

Väärtuste avaldamine ThingSpeak'is, kasutades ThingSpeak MQTT API -d
Väärtuste avaldamine ThingSpeak'is, kasutades ThingSpeak MQTT API -d

Temperatuuri ja niiskuse väärtuste pilve postitamiseks kasutame ThingSpeak MQTT API -d. ThingSpeak on IoT platvorm. ThingSpeak on tasuta veebiteenus, mis võimaldab teil andurite andmeid pilve koguda ja salvestada. MQTT on IoT-süsteemides levinud protokoll madala taseme seadmete ja andurite ühendamiseks. MQTT -d kasutatakse lühisõnumite edastamiseks maaklerile ja maaklerilt. ThingSpeak on hiljuti lisanud MQTT maakleri, et seadmed saaksid ThingSpeakile sõnumeid saata. Sellest postitusest saate ThingSpeak Channeli seadistamiseks järgida protseduuri

ThingSpeak MQTT

MQTT on avaldamise/tellimise arhitektuur, mis on välja töötatud peamiselt ribalaiuse ja piiratud võimsusega seadmete ühendamiseks traadita võrkude kaudu. See on lihtne ja kerge protokoll, mis töötab üle TCP/IP -pesade või WebSocketide. MQTT -d WebSocketsi kaudu saab kaitsta SSL -iga. Avaldamise/tellimise arhitektuur võimaldab sõnumeid kliendiseadmetesse edastada, ilma et seade peaks serverit pidevalt küsitlema. Klient on mis tahes seade, mis loob vahendajaga ühenduse ja saab teabele juurdepääsemiseks teemasid avaldada või tellida. Teema sisaldab maakleri marsruutimisteavet. Iga klient, kes soovib sõnumeid saata, avaldab need teatud teemal ja iga klient, kes soovib sõnumeid saada, tellib teatud teema

Avaldage ja tellige ThingSpeak MQTT abil

  • Avaldamine kanalite kanalite kanalites /avaldamine /
  • Avaldamine teatud väljale kanalites/avaldamine/väljad/väli/
  • Tellige kanalivälja kanalid/tellige //
  • Telli privaatse kanali voo kanalid // telli/väljad/väli/
  • Tellige kõik kanali väljad. kanalid // tellida/fields/feild/

tühine ülesanneWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("selle ülesande ajalõpp: / t");

Serial.println (tWiFi.getTimeout ());

kui (! mqttCli.connected ())

{

Serial.println ("Klient pole ühendatud");

taasühendageMQTT ();

}

String teemaString = "kanalid/"+String (kanaliID)+"/avaldada/"+String (writeAPIKey);

int topicPikkus = topicString.length ()+1;

char teemaPuhver [teemaPikkus];

topicString.toCharArray (topicBuffer, topicPikkus+1);

Serial.println (topicBuffer);

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

int dataLength = dataString.length ()+1;

bait dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Avaldatud": "avaldatud ebaõnnestus");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Samm: ilmateate e -posti teatis

Ilmateate meiliteatis
Ilmateate meiliteatis
Ilmateate meiliteatis
Ilmateate meiliteatis

Kasutame IFTTT aplette, et anda reaalajas ilmateade kasutajale e-posti teel. Niisiis, oleme selle ThingSpeaki kaudu rakendanud. Keskmistame temperatuuri ja niiskuse viiekordse väärtuse. Kui viimase kirje väärtus on keskmisest suurem. See käivitab meiliteatise "see on kuum päev". ja kui see on keskmisest väiksem. See käivitab meiliteatise "Milline ilus päev". Iga päev kell 10.00 (IST) saame meili teel märguande

kanali ID = ******;

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

niiskuseandmed = asiSpeakRead (kanali ID, 'väljad', 3, 'numbripäevad', 5); tempData = thingSpeakRead (kanali ID, 'väljad', 1, 'numbripäevad', 5);

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

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

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

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

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

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

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'On kuum päev.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); lõpp

8. samm: üldine kood

Üldine kood
Üldine kood
Üldine kood
Üldine kood
Üldine kood
Üldine kood

Üldine kood

Üldine kood on saadaval selles GitHubi hoidlas

Piirangud

  • Andmete avaldamisel, kasutades suure osa andmete avaldamise meetodit, on mõningaid probleeme. Selle probleemi lahendamiseks kasutame funktsiooni write ()
  • Enne uute andmete SPIFFS -i üleslaadimist tuleb SPIFFS vormindada.
  • Funktsiooni delay () kasutamine on keelatud. delay () takistab taustal toimimist. Selle asemel looge viivitusi millis () abil, kui see on vajalik

Autorid

  • ESP826WebServer
  • Ülesannete planeerija
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Soovitan: