Tartalomjegyzék:
- 1. lépés: Hardver és szoftver specifikáció
- 2. lépés: A felhasználói hitelesítő adatok tárolása
- 3. lépés: A webes űrlap beállítása SPIFFS -ben
- 4. lépés: Feladatütemezés
- 5. lépés: Hőmérséklet és páratartalom értékek leolvasása az SHT25 -ből
- 6. lépés: Értékek közzététele a ThingSpeak -ben a ThingSpeak MQTT API használatával
- 7. lépés: Időjárás -jelentés e -mail értesítés
- 8. lépés: Általános kód
Videó: Időjárás -jelentés a ThingSpeak MQTT és IFTTT kisalkalmazások használatával: 8 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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 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
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
- Töltse le az eszközt:
- Az Arduino vázlatfüzet könyvtárában hozzon létre eszközök könyvtárat, ha még nem létezik
- 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)
- Indítsa újra az Arduino IDE -t
- Nyisson meg egy vázlatot (vagy hozzon létre újat, és mentse el)
- Lépjen a vázlatkönyvtárba (válassza a Vázlat> Vázlat mappa megjelenítése lehetőséget)
- 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
- Győződjön meg arról, hogy kiválasztott egy táblát, portot és zárt soros monitort
- 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
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
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
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
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:
Intelligens elosztott IoT időjárás -figyelő rendszer a NodeMCU használatával: 11 lépés
Intelligens elosztott IoT időjárás -megfigyelő rendszer a NodeMCU használatával: Mindannyian ismerik a hagyományos időjárás -állomást; de elgondolkodtál már azon, hogyan is működik valójában? Mivel a hagyományos időjárás -állomás költséges és terjedelmes, ezeknek az állomásoknak az egységnyi területre jutó sűrűsége nagyon alacsony, ami hozzájárul a
Egyszerű időjárás állomás az ESP8266 használatával: 6 lépés (képekkel)
Egyszerű időjárás állomás az ESP8266 használatával: Ebben az utasításban megosztom, hogyan kell használni az ESP8266 -t olyan adatok beszerzéséhez, mint a hőmérséklet, a nyomás, az éghajlat stb., Valamint a YouTube -adatokat, például az előfizetőket Teljes megtekintések száma. és jelenítse meg az adatokat a soros monitoron, és jelenítse meg az LCD -n. Az adatok f
Mini időjárás állomás az Arduino és a ThingSpeak használatával: 4 lépés
Mini meteorológiai állomás az Arduino és a ThingSpeak használatával: Üdv mindenkinek. Ebben az utasításban végigvezetem a személyre szabott mini időjárás -állomás létrehozásának lépésein. Ezenkívül a ThingSpeak API -t fogjuk használni időjárási adataink feltöltésére a szervereikre, vagy mi az időjárás -megfigyelés célja
Személyes időjárás állomás a Raspberry Pi használatával a BME280 -val Java -ban: 6 lépés
Személyes időjárás -állomás a Raspberry Pi használatával a BME280 -al Java -ban: A rossz idő mindig rosszabbul néz ki az ablakon keresztül. Mindig is érdekelt volt a helyi időjárás és az ablakon látott dolgok figyelemmel kísérése. Szerettük volna jobban szabályozni a fűtési és légkondicionáló rendszert is. Egy személyes meteorológiai állomás építése nagyszerű dolog
Időjárás -figyelő rendszer a Raspberry Pi3 és a DHT11 érzékelő használatával: 4 lépés
Időjárás -figyelő rendszer a Raspberry Pi3 és a DHT11 érzékelő használatával: Ebben az oktatóanyagban megmutatom, hogyan kell csatlakoztatni a DHT11 -et a Raspberry Pi -hez, és a páratartalom és a hőmérséklet leolvasását egy LCD -re. A DHT11 hőmérséklet- és páratartalom -érzékelő egy szép kis modul digitális hőmérsékletet és páratartalmat biztosít