Tartalomjegyzék:

Időjárási webes alkalmazás az Esp8266 használatával: 7 lépés
Időjárási webes alkalmazás az Esp8266 használatával: 7 lépés

Videó: Időjárási webes alkalmazás az Esp8266 használatával: 7 lépés

Videó: Időjárási webes alkalmazás az Esp8266 használatával: 7 lépés
Videó: PZEM-004T и ESP8266 ESP-01 Wi-Fi-монитор энергопотребления | ESP-01 Домашняя автоматизация 2024, Lehet
Anonim
Időjárási webes alkalmazás az Esp8266 használatával
Időjárási webes alkalmazás az Esp8266 használatával

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. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapter

4. I2C kábel

2. lépés: Hardverkapcsolatok

Hardver kapcsolatok
Hardver kapcsolatok
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

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 az időtúllépést, 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 az érzékelő leolvasását a ThingSpeak API felhőbe tesszük
  • 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úllépést, 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.

Ütemezés ts;

// Feladatok az i2c -hez, a webszerver tárolása és a postspeak -on való közzététel

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 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ási érvénytelen feladatI2CCallback ()

{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ébe az intro weboldalhoz, és a 192.168.1.4/Érték az olvasó weboldalhoz

// statikus Ip AP -hez

IPAddress 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 az AP -hez

const char APssid = "********";

const char APpass = "********";

ESP8266WebServer szerver (80);

void setup {

szerver.on ("/", onHandleDataRoot);

server.on ("/Érték", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

void taskAPCCalback () {

Serial.println ("taskAP elindult");

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, "text/plain", ü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);

ha (ap == igaz) {

Serial.print ("csatlakoztatva: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

szerver.begin ();

}

}

6. 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 dologban
  • Hozzon létre csatornákat és mezőket az érzékelőadatok tárolására
  • 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

void 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 (); }

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

A teljes kód elérhető a github táromban

Hitelek:

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

Ajánlott: