Tartalomjegyzék:

Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés
Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés

Videó: Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés

Videó: Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés
Videó: How to implement MQTT API in Thingspeak using Raspberry Pi 4? (2021) | Learn Technology in 5 Minutes 2024, November
Anonim
Időjárás -jelentés a ThingSpeak MQTT és IFTTT applikációk használatával
Időjárás -jelentés a ThingSpeak MQTT és IFTTT applikációk használatával

Bevezetés

Egy felhőalapú időjárási alkalmazás, amely napi időjárási jelentéseket biztosít e-mail értesítésként. Ez a webes alkalmazás méri a hőmérsékletet és a páratartalmat az SHT25 és az Adafruit Huzzah ESP8266 segítségével. Valós idejű hőmérséklet- és páratartalom-adatokat, valamint óránkénti elemzéseket biztosít számunkra. Az adatokat a ThingSpeak MQTT API segítségével küldjük, és később e -mailben értesítjük a felhasználót, amikor a hőmérséklet eléri a hozzárendelt küszöböt az IFTTT protokoll használatával. Az SHT25 a Sensirion által gyártott hőmérséklet- és páratartalom -érzékelők. Az SHT25 nagy pontosságot biztosít ± 2% relatív páratartalom mellett. A páratartalom 0 és 100% között, a hőmérséklet -40 és 125 ° C között van. Sokkal megbízhatóbb és gyorsabb, 8 másodperces érzékelő válaszidővel.

Jellemzők

  • Valós idejű elemzéseket és statisztikákat biztosít a Thing Speak MQTT API használatával
  • E -mail értesítést kap a felhasználó a megadott időben az IFTTT használatával
  • A Feladatütemező a feladat ütemezésére szolgál, például adatok lekérésére az érzékelőkről, Az érzékelő leolvasásának közzététele, Feliratkozás az MQTT témára
  • I2C protokollt használ az érzékelő leolvasásának lekéréséhez, amely pontosabb, bővíthető és skálázható
  • alvó üzemmódba, amikor a készülék tétlen, vagy nincs visszahívott feladat.
  • a hatékony feladatütemezés problémamentes használatot biztosít
  • Külön weboldalt tárolnak, ahol a felhasználónak meg kell adnia felhasználói hitelesítő adatait, hogy ne villanjon fel minden alkalommal, amikor más wifi -hálózatok elérik
  • A SPIFFS weboldalunk tárolására szolgál, hogy kódunkat olvashatóvá és kevésbé ügyessé tegyük

1. lépés: Hardver és szoftver specifikáció

Hardver és szoftver specifikáció
Hardver és szoftver specifikáció
Hardver és szoftver specifikáció
Hardver és szoftver specifikáció

Hardver specifikáció

  • Adafruit esp8266 Huzzah tábla
  • Huzzah Board Shield
  • SHT25 érzékelő modul
  • I2C kábel

Szoftver specifikáció

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

2. lépés: A felhasználói hitelesítő adatok tárolása

Felhasználói hitelesítő adatok tárolása
Felhasználói hitelesítő adatok tárolása
Felhasználói hitelesítő adatok tárolása
Felhasználói hitelesítő adatok tárolása

Itt az SHT25 I2C érzékelő segítségével olvassuk be a hőmérséklet és a relatív páratartalom valós idejű értékét, és közzétesszük ezeket az értékeket a felhőben. Az Arduino Feladatütemező könyvtárát használjuk, hogy időnként megkapjuk a frissített érzékelőértékeket, és ezeket a frissítéseket egyszerre közzétegyük. A felhőműveletekhez ThingSpeak MQTT API -t használunk. Később valós idejű időjárás-jelentést biztosítunk a felhasználónak IFTTT kisalkalmazások használatával. Az alábbi lépéseket követve elkészítheti saját meteorológiai állomását. Szóval, barkács.

Mielőtt továbblépne. Mentenünk kell a felhasználói hitelesítő adatokat. Ebből a célból webszervert üzemeltetünk a 192.169.1.4 címen. Webes űrlapunkat SPIFFS -ben tároltuk. Miután az eszköz elindult, 60 másodpercig webkiszolgálót üzemeltet. A felhasználó kövesse ezeket a lépéseket.

  • Csatlakozzon az AP ESPuser -hez, ez szerepel az elérhető wifi hálózatok listájában. Csatlakozzon ehhez az AP -hez, és írja be a "*******" jelszót
  • Miután csatlakozott, lépjen a böngészőbe, írja be az 192.168.1.4 IP -címet.
  • Írja be a helyi WiFi SSID -jét és jelszavát a beviteli mezőkbe, majd írja be a KÜLDÉS lehetőséget
  • Ezeket a hitelesítő adatokat az EEPROM menti
  • 60 másodperc elteltével az eszköz automatikusan leválik az AP-ről
  • Amikor legközelebb bekapcsolja az eszközt, a felhasználónak nem kell ezt az eljárást követnie, A készülék automatikusan lekéri a felhasználói hitelesítő adatokat az EEPROM -ból, és folytatja az érzékelő leolvasását az I2C interfészről, és közzéteszi a felhőben

// --------- AP konfiguráció ------------ // IPAdd ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

Serial.print ("Hozzáférési pont konfigurálása …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Felhasználói hitelesítő adatok beállítása");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

szerver.begin ();

APTimer = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** KEZELŐGYÖK ****************** ********* // void handleRoot () {

if (szerver.hasArg ("ssid") && szerver.hasArg ("jelszó"))

{

// Ha minden űrlapmező adathívást tartalmaz

handelSubmit ()

handleSubmit (); }

más {

// Az űrlap újbóli megjelenítése

// olvassa el a spiff -ekben található fájlt

Fájlfájl = SPIFFS.open ("/webform.html", "r");

server.streamFile (fájl, "text/html");

// ne felejtse el bezárni a fájlt

file.close ();

}}

// Ellenőrizze az állapotát, hogy rendelkezik az ssid és a password argumentumokkal

// Ezután írja be a hitelesítő adatokat a ROM -ba

ROMwrite (String (server.arg ("ssid")), String (server.arg ("jelszó")))

3. lépés: A webes űrlap beállítása SPIFFS -ben

SPIFFS

Soros perifériás interfész Flash fájlrendszer, röviden SPIFFS. Ez egy könnyű fájlrendszer a SPI flash chipet tartalmazó mikrokontrollerekhez. Az ESP8266 beépített flash chipje rengeteg helyet tartalmaz weboldalai számára, különösen, ha 1 MB, 2 MB vagy 4 MB verzióval rendelkezik. Weboldalunkat a Flash rendszerben is tároltuk. Néhány lépést kell követnünk az adatok feltöltéséhez a spiff -ekbe

  1. Töltse le az eszközt:
  2. Az Arduino vázlatfüzet könyvtárában hozzon létre eszközök könyvtárat, ha még nem létezik
  3. Csomagolja ki az eszközt az eszközök könyvtárába (az útvonal így néz ki: /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Indítsa újra az Arduino IDE -t
  5. Nyisson meg egy vázlatot (vagy hozzon létre újat, és mentse el)
  6. Lépjen a vázlatkönyvtárba (válassza a Vázlat> Vázlat mappa megjelenítése lehetőséget)
  7. Hozzon létre egy könyvtárat adatokkal és az ott található fájlrendszerben található fájlokkal. Feltöltöttük a webform.html nevű HTML -oldalunkat
  8. Győződjön meg arról, hogy kiválasztott egy táblát, portot és zárt soros monitort
  9. Válassza az Eszközök> ESP8266 Sketch Data Upload lehetőséget. Ezzel el kell kezdeni a fájlok feltöltését az ESP8266 flash fájlrendszerbe. Ha kész, az IDE állapotsor SPIFFS képfeltöltés üzenetet jelenít meg.

Fájlfájl = SPIFFS.open ("/webform.html", "r");

server.streamFile (fájl, "text/html");

// ne felejtse el bezárni a fájlt

file.close ();

4. lépés: Feladatütemezés

Ebben az oktatóanyagban két műveletet hajtunk végre:

  • Olvassa el az SHT25 adatait az I2C protokoll használatával
  • Tegye közzé a frissített adatokat a felhőbe a ThingSpeak MQTT API használatával

Ennek eléréséhez a TaskScheduler könyvtárat használjuk. Két különböző feladatot ütemeztünk, amelyek két különböző vezérlési műveletre vonatkoznak. ez a következőképpen történik

  • Az 1. feladat az érzékelő értékének leolvasására szolgál, ez a feladat 1 másodpercig fut, amíg el nem éri a 10 másodperces időtúllépést.
  • Amikor a Task1 eléri az időtúllépést Csatlakozunk a helyi Wifi és MQTT brókerhez.
  • Most a 2. feladat engedélyezve van, és letiltjuk az 1. feladatot. A 2. feladat az érzékelőadatok közzététele a Thing Speak MQTT brókernél, ez a feladat 20 másodpercig fut, amíg el nem éri a 20 másodperces időt
  • Amikor a 2. feladat eléri az időtúllépést, az 1. feladat ismét engedélyezve van, és a 2. feladat le van tiltva. itt ismét megkapjuk a frissített értéket, és a folyamat folytatódik
  • ha nem hív visszahívást, vagy ha az eszköz tétlen, akkor a Light Sleep üzemmódba kapcsol, így energiát takarít meg.

// --------- a feladat visszahívásának prototípusa ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

// --------- Feladatok ------------ //

TI2C feladat (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL és taskI2CDisable);

TWiFi feladat (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL és & taskWiFiDisable);

// tI2C engedélyezése tI2C.enable ();

5. lépés: Hőmérséklet és páratartalom értékek leolvasása az SHT25 -ből

Hőmérséklet és páratartalom értékek leolvasása az SHT25 -ből
Hőmérséklet és páratartalom értékek leolvasása az SHT25 -ből

Az I2C egy kétvezetékes interfész, amely csak két vezetéket használ a mester eszközzel való kommunikációhoz. Az egyik az SCL (soros óra), a másik az SDA (soros adat). Minden slave eszköz egyedi címmel rendelkezik. Az SHT 25 8 bites címmel is rendelkezik, és 0x44 címmel érhető el. 8 bites címmel rendelkezik, ahol 7 bit a tényleges cím, és míg a jobb oldali LSB bit 0 használható az eszközről történő olvasás vagy írás jelezésére. Ha a 0 bit 1 -re van állítva, akkor a master eszköz leolvassa a slave I2C eszközt. Az I2C sokkal megbízhatóbb, méretezhetőbb és gyorsabb, és még számos működési móddal rendelkezik, ami sokkal energiahatékonyabbá teszi

A Wire.h könyvtár segítségével olvassuk a hőmérsékletet és a páratartalmat. Ez a könyvtár megkönnyíti az i2c kommunikációt az érzékelő és a master eszköz között. A 0x44 az SHT25 I2C címe. Az SHT25 más működési módban működik. Erre hivatkozhat az adatlapon. 0x2C -t és 0x06 -ot használunk MSB -ként, illetve LSB -ként egyetlen lövésre

6. lépés: Értékek közzététele a ThingSpeak -ben a ThingSpeak MQTT API használatával

Értékek közzététele a ThingSpeak alkalmazásban a ThingSpeak MQTT API használatával
Értékek közzététele a ThingSpeak alkalmazásban a ThingSpeak MQTT API használatával

A hőmérséklet és páratartalom értékeinek felhőbe történő közzétételéhez a ThingSpeak MQTT API -t használjuk. A ThingSpeak egy IoT platform. A ThingSpeak egy ingyenes webszolgáltatás, amely lehetővé teszi az érzékelő adatok gyűjtését és tárolását a felhőben. Az MQTT egy általános protokoll, amelyet az IoT rendszerekben használnak alacsony szintű eszközök és érzékelők csatlakoztatására. Az MQTT rövid üzenetek továbbítására szolgál egy brókernek és egy brókernek. A ThingSpeak nemrégiben hozzáadott egy MQTT közvetítőt, hogy az eszközök üzeneteket küldhessenek a ThingSpeaknek. Kövesse az eljárást a ThingSpeak Channel beállításához ebből a bejegyzésből

ThingSpeak MQTT

Az MQTT egy közzétételi/előfizetési architektúra, amelyet elsősorban a sávszélesség és a korlátozott teljesítményű eszközök vezeték nélküli hálózatokon keresztül történő összekapcsolására fejlesztettek ki. Ez egy egyszerű és könnyű protokoll, amely TCP/IP vagy WebSockets aljzatokon fut. Az MQTT a WebSockets -en keresztül SSL -sel védhető. A közzétételi/feliratkozási architektúra lehetővé teszi az üzenetek átküldését az ügyféleszközökre anélkül, hogy az eszköznek folyamatosan le kellene kérdeznie a kiszolgálót. Az ügyfél minden olyan eszköz, amely csatlakozik a közvetítőhöz, és közzétehet vagy feliratkozhat az információhoz való hozzáférésre vonatkozó témákra. Egy témakör tartalmazza a közvetítő útválasztási információit. Minden ügyfél, aki üzeneteket szeretne küldeni, közzéteszi azokat egy bizonyos témában, és minden ügyfél, amely üzeneteket szeretne kapni, feliratkozik egy bizonyos témára

Közzététel és előfizetés a ThingSpeak MQTT használatával

  • Közzététel a csatornatáblák csatornáin /közzététel /
  • Közzététel egy adott területen csatornák/közzététel/mezők/mező/
  • Feliratkozás a csatorna mezei csatornákra/subscribe //
  • Feliratkozás a privát csatornacsatornákra // feliratkozás/mezők/mező/
  • Feliratkozás a csatorna összes mezőjére. csatornák // feliratkozás/mezők/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("időtúllépés ehhez a feladathoz: / t");

Serial.println (tWiFi.getTimeout ());

ha (! mqttCli.connected ())

{

Serial.println ("Az ügyfél nincs csatlakoztatva");

reonnectMQTT ();

}

String topicString = "csatornák/"+Karakterlánc (csatornaazonosító)+"/közzététel/"+Karakterlánc (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 (nedves, 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": "közzététel sikertelen");

mqttCli.endPublish ();

//mqttCli.loop ();

}

7. lépés: Időjárás -jelentés e -mail értesítés

Időjárás jelentés e -mail értesítés
Időjárás jelentés e -mail értesítés
Időjárás jelentés e -mail értesítés
Időjárás jelentés e -mail értesítés

IFTTT kisalkalmazások segítségével valós idejű időjárás-jelentést küldünk e-mailben a felhasználónak. Tehát a ThingSpeak segítségével valósítottuk meg. Átlagoljuk a hőmérséklet és a páratartalom 5 fay értékét. Amikor az utolsó bejegyzés értéke nagyobb, mint az átlagos érték. E -mail értesítést fog küldeni "ez egy forró nap". és amikor kisebb, mint az átlagos érték. E -mail értesítést indít "Milyen szép nap". Minden nap 10:00 körül (IST) e -mail értesítést kapunk

csatornaazonosító = ******;

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

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

perHumid = max (nedvesség adatok) -min (nedvesség adatok);

humidValue = 0,1*perHumid+min (nedvesség adatok);

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

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

urlTemp = strcat ('https://api.thingspeak.com/channels/', karakterlánc (csatornaazonosító), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', karakterlánc (csatornaazonosító), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Forró nap van.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); vége

8. lépés: Általános kód

Általános kód
Általános kód
Általános kód
Általános kód
Általános kód
Általános kód

Általános kód

A teljes kód elérhető ebben a GitHub adattárban

Korlátozások

  • Bizonyos problémák merülnek fel az adatok közzétételi módszerrel történő közzétételével az adatok nagy többségéhez. A probléma megoldásához a write () függvényt használjuk
  • Az SPIFFS -t formázni kell az új adatok SPIFFS -be való feltöltése előtt.
  • Nem használhatja a delay () függvényt. delay () akadályozza a háttérműveletet. Ehelyett csak akkor hozzon létre késleltetést millis () használatával, ha szükséges

Hitelek

  • ESP826WebServer
  • Feladat ütemező
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Ajánlott: