THINGSPEAK HŐMÉRSÉKLET ÉS PÁRÁNYALKALMAZÁS ESP8266 használatával: 9 lépés
THINGSPEAK HŐMÉRSÉKLET ÉS PÁRÁNYALKALMAZÁS ESP8266 használatával: 9 lépés
Anonim
THINGSPEAK HŐMÉRSÉKLET ÉS PÁRÁNYALKALMAZÁS ESP8266 használatával
THINGSPEAK HŐMÉRSÉKLET ÉS PÁRÁNYALKALMAZÁS ESP8266 használatával

Miközben az elektronikus dolgaimmal foglalkozom, eszembe jutott, hogy webalapú időjárási alkalmazást készítsek. Ez a webes alkalmazás az SHT31 érzékelőt használja a valós idejű hőmérséklet- és páratartalom-adatok lekérésére. A projektünket az ESP8266 WiFi modulon telepítettük. Online vagy offline! Nem kell aggódnia, akár online, akár offline, bárhonnan és bármikor megkapja az időjárás -frissítéseket. Ez a webalkalmazás adatokat küld a helyi webszerverre, valamint a felhőbe. A felhőműveletekhez ThingSpeak API -t használunk. Az SHT31 az I2C -t használja az adatok érzékeléséhez.

Az SHT 31 a Sensirion által gyártott hőmérséklet- és páratartalom -érzékelők. Az SHT31 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. A funkcionalitás magában foglalja a továbbfejlesztett jelfeldolgozást és az I2C kompatibilitást. Különféle üzemmódokkal rendelkezik, ami energiatakarékos.

Ebben az oktatóanyagban az SHT 31 -et illesztettük az Adafruit Huzzah táblához. A hőmérséklet és páratartalom értékek leolvasásához ESP8266 I2C pajzsot használtunk. Ez az adapter hozzáférhetővé teszi a csapokat a felhasználó számára, és felhasználóbarát I2C környezetet kínál.

1. lépés: Hardver szükséges

Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges

A feladat végrehajtásához használt hardver:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. ESP8266 I2C adapter
  4. I2C kábel

2. lépés: Hardverkapcsolatok

Hardver kapcsolatok
Hardver kapcsolatok

Ez a lépés tartalmazza a hardver csatlakoztatási útmutatóját. Ez a rész alapvetően az érzékelő és az ESP8266 közötti kábelezési kapcsolatokat ismerteti. A kapcsolatok a következők.

  1. Az SHT31 az I2C -n keresztül működik. A fenti kép az ESP8266 és az SHT31 modul közötti kapcsolatot mutatja. I2C kábelt használunk hozzá, vagy használhatunk 4 F - F áthidaló vezetéket.
  2. az egyik vezetéket a Vcc -hez, a második vezetéket a GND -hez és a másik kettőt az SDA -hoz és az SCL -hez használják
  3. Az I2C adapter szerint az ESP8266 kártya pin2 és 14 csapja SDA, illetve SCL

3. lépés: A feladatütemezés kódja

Feladatütemezési kód
Feladatütemezési kód

Ebben az oktatóanyagban három műveletet hajtunk végre

  • Olvassa el az SHT11 adatait az I2C protokoll használatával
  • fogadja a webszervert, és tegye közzé az érzékelő leolvasását a weboldalra
  • tegye közzé az érzékelő leolvasásait a ThingSpeak API -ban

Ennek eléréséhez a TaskScheduler könyvtárat használjuk. Három különböző feladatot ütemeztünk be, amelyek három 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 1. feladat eléri a határidőt, a 2. feladat engedélyezve van, és az 1. feladat le van tiltva.
  • Ebben a visszahívásban csatlakozunk az AP -hez. Két logikai változó gondoskodik az STA és az AP közötti váltásról
  • A 2. feladatban egy webszervert tárolunk a 192.168.1.4 címen. Ez a feladat 5 másodpercenként fut, amíg el nem éri az 50 másodperces időtúllépést
  • Amikor a 2. feladat eléri az időtúllépést, a 3. feladat engedélyezve van, és a 2. feladat le van tiltva.

  • Ebben a visszahívásban az STA -hoz (helyi IP) kapcsolódunk. A 3. feladatban közzétesszük az érzékelő leolvasását a ThingSpeak API felhőbe
  • A 3. feladat öt másodpercenként fut, amíg el nem éri az időtúllépést, azaz 50 másodpercet
  • Amikor a 3. feladat eléri az időt, az 1. feladat ismét engedélyezve van, és a 3. feladat le van tiltva.
  • 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.

void taskI2CCallback ();

void taskI2CDisable (); void taskAPCCalback (); void taskAPDisable (); void taskWiFiCallback (); void taskWiFiDisable (); // Feladatok az i2c -hez, webkiszolgáló tárolása és közzététel a thingspeak -en Task tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL és taskI2CDisable); TI2C feladat (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL és taskI2CDisable); Feladat tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); TWiFi feladat (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL és & taskWiFiDisable); // időtúllépés a feladatokhoz tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // I2C feladat engedélyezése tI2C.enable ();

4. lépés: A hőmérséklet és páratartalom értékek leolvasásának kódja

A hőmérséklet és páratartalom értékek leolvasásának kódja
A hőmérséklet és páratartalom értékek leolvasásának kódja

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 SHT31 I2C címe.

Az SHT31 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 és LSB -ként egyetlen lövésre.

// I2C feladat visszahívása void taskI2CCallback () {Serial.println ("taskI2CStarted"); unsigned int root [6]; // az átvitel megkezdése 0x44 -től; Wire.beginTransmission (Addr); // egy lövéstovábbításhoz nagy ismételhetőséggel 0x2C (MSB) és 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // vége átvitel Wire.endTransmission (); // bájtok kérése 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); ha (Wire.available () == 6) {// az adatok [0] és az adatok [1] 16 bites hőmérsékletet tartalmaznak. gyökér [0] = Wire.read (); root [1] = Wire.read (); // az adatok [2] 8 bites CRC gyökeret tartalmaz [2] = Wire.read (); // az adatok [3] és az adatok [4] 16 bit nedvességtartalmat tartalmaznak [3] = Wire.read (); gyökér [4] = Wire.read (); // az adatok [5] 8 bites CRC gyökérből áll [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // az MSB eltolása 8 bittel LSB float hozzáadása cTemp = -45,0 + (175,0 * temp /65535,0); float fTemp = (cTemp * 1,8) + 32,0; // az MSB eltolása 8 bittel, LSB hozzáadása hozzá, teljes felbontással és * 100 százalékos lebegő páratartalom = (100,0 * ((gyökér [3] * 256,0) + gyökér [4])) /65535.0; tempC = cTemp; tempF = fTemp; nedves = páratartalom; Serial.print ("Hőmérséklet C: / t"); Soros.println (Karakterlánc (cTemp, 1)); Serial.print ("Hőmérséklet F: / t"); Soros.println (Karakterlánc (fTemp, 1)); Serial.print ("Páratartalom: / t"); Soros.println (Karakterlánc (páratartalom, 1)); }

5. lépés: A webszerver tárhelyének kódja

Egy webszerver tárhelyének kódja
Egy webszerver tárhelyének kódja
Egy webszerver tárhelyének kódja
Egy webszerver tárhelyének kódja

Egy webszervert üzemeltettünk eszközünkről statikus IP címen.

Az ESP8266WebServer könyvtár a webszerver tárolására szolgál

  • Először deklarálnunk kell az IP -címet, az átjárót és az alhálózati maszkot a statikus IP létrehozásához
  • Most deklarálja az ssid -t és a jelszót a hozzáférési ponthoz. Csatlakozzon a hozzáférési ponthoz bármely STA -eszközről
  • fogadja a szervert a 80 -as porton, amely az internetes kommunikációs protokoll alapértelmezett portja, a Hypertext Transfer Protocol (HTTP) írja be a 192.168.1.4 -et a webböngészőjében az intro weboldalhoz, és a 192.168.1.4/Érték az olvasó weboldalhoz értéket

// statikus Ip APIPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0); // ssid és AP a helyi WiFi -hez STA módban const char WiFissid = "*********"; const char WiFipass = "*********"; // ssid és pass AP const char APssid = "********"; const char APpass = "********"; ESP8266WebServer szerver (80); void setup {server.on ("/", onHandleDataRoot); server.on ("/Érték", onHandleDataFeed); server.onNotFound (onHandleNotFound);} void taskAPCallback () {Serial.println ("taskAP elindítva"); server.handleClient (); } void onHandleDataRoot () {server.send (200, "text/html", PAGE1); } void onHandleDataFeed () {server.send (200, "text/html", PAGE2); } void onHandleNotFound () {String message = "A fájl nem található / n / n"; üzenet += "URI:"; üzenet += szerver.uri (); message += "\ nMódszer:"; message += (server.method () == HTTP_GET)? "GET": "POST"; message += "\ nIgületek:"; üzenet += szerver.args (); üzenet += "\ n"; server.send (404, "szöveg/sima", üzenet); } void reconnectAPWiFi () {WiFi.mód (WIFI_AP_STA); késleltetés (100); WiFi.disconnect (); logikai állapot = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet); if (állapot == igaz) {Serial.print ("Soft-AP beállítása …"); boolean ap = WiFi.softAP (APssid, APpass); if (ap == igaz) {Serial.print ("csatlakoztatva: / t"); // IPAddress myIP = WiFi.softAPIP (); Serial.println (WiFi.softAPIP ()); } server.begin ();

}

6. lépés: A Thingspeak beállítása

A Thingspeak beállítása
A Thingspeak beállítása
A Thingspeak beállítása
A Thingspeak beállítása
A Thingspeak beállítása
A Thingspeak beállítása

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.

Ebben a lépésben egy rövid eljárást adok a Thing Speak -fiók beállításához

  • Regisztráljon új felhasználói fiókra a ThingSpeak szolgáltatásban
  • Hozzon létre új csatornát a Csatornák, Saját csatornák, majd az Új csatorna kiválasztásával
  • Szerkessze a mezőket
  • Ezek a mezők tartalmazzák az érzékelő adatait
  • Jegyezze meg az API írási kulcs és a csatornaazonosítót
  • Az Arduino vázlatán használhatja a ThingSpeak könyvtárat az Arduino számára, vagy közvetlenül posztolhatja az adatokat a ThingSpeak API -ba
  • a következő lépés a tartalom Thing Speak API -ba történő közzétételével foglalkozik

7. lépés: Az adatok közzétételének kódja a Thing Speak -hez

Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez
Az adatok közzétételének kódja a Thing Speak -hez

Itt közzétesszük az érzékelő leolvasásait a Thing Speak -ban. a feladat végrehajtásához a következő lépésekre van szükség-

  • Hozzon létre fiókot a beszédben. Hozzon létre csatornákat és mezőket az érzékelőadatok tárolásához
  • megkaphatjuk és közzétehetjük az adatokat az ESP-ből a thingSpeak-be és fordítva a GET és POST kérések használatával az api-ba.
  • a következőképpen tehetjük közzé adatainkat a ThingSpeakbe

id taskWiFiCallback () {WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& mező1 ="; postStr += Karakterlánc (nedves); postStr += "& mező2 ="; postStr += Karakterlánc (tempC); postStr += "& field3 ="; postStr += Karakterlánc (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /frissítés HTTP /1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Kapcsolat: bezár / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Content-Length:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

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

A teljes kód elérhető a GitHub lerakatomban

9. lépés: Hitelek

  • Arduino JSON
  • ESP826WebServer
  • Feladat ütemező
  • SHT 31
  • I2C szkennelés
  • HIH6130 oktatható oktatóanyag
  • Huzal
  • NCD.io

Ajánlott: