Talaan ng mga Nilalaman:

Weather Web App Gamit ang Esp8266: 7 Mga Hakbang
Weather Web App Gamit ang Esp8266: 7 Mga Hakbang

Video: Weather Web App Gamit ang Esp8266: 7 Mga Hakbang

Video: Weather Web App Gamit ang Esp8266: 7 Mga Hakbang
Video: IoT Based Weather Station using Blynk Apps and Nodemcu | Temperature & Humidity | ESP8266 2024, Mayo
Anonim
Weather Web App Gamit ang Esp8266
Weather Web App Gamit ang Esp8266

Ang SHT 31 ay isang Temperature at Humidity Sensors na ginawa ng Sensirion. Ang SHT31 ay nagbibigay ng isang mataas na antas ng kawastuhan sa paligid ng ± 2% RH. Ang saklaw ng Humidity nito ay nasa pagitan ng 0 hanggang 100% at ang saklaw ng Temperatura ay nasa pagitan ng -40 hanggang 125 ° C. Ito ay mas maaasahan at mabilis na may 8 sec ng oras ng pagtugon ng Sensor. Kasama sa pagpapaandar nito ang pinahusay na pagpoproseso ng signal at pagiging tugma ng I2C. Ito ay may iba't ibang mga mode ng pagpapatakbo na ginagawang mabisa ang enerhiya.

Sa tutorial na ito, na-interfaced namin ang SHT 31 sa Adafruit Huzzah board. Para sa pagbabasa ng mga halagang Temperatura at Humidity ginamit namin ang kalasag ng ESP8266 I2C. Ginagawa ng adapter na ito ang lahat ng mga pin na naa-access sa gumagamit at nag-aalok ng environment na madaling gamitin ng I2C.

Hakbang 1: Kinakailangan ang Hardware

Kinakailangan ang Hardware
Kinakailangan ang Hardware
Kinakailangan ang Hardware
Kinakailangan ang Hardware
Kinakailangan ang Hardware
Kinakailangan ang Hardware

Ginamit ang hardware upang makumpleto ang gawaing ito:

1. SHT31

2. Adafruit Huzzah ESP8266

3. adaptor ng ESP8266 I2C

4. I2C Cable

Hakbang 2: Mga Koneksyon sa Hardware

Mga Koneksyon sa Hardware
Mga Koneksyon sa Hardware
Mga Koneksyon sa Hardware
Mga Koneksyon sa Hardware

Kasama sa hakbang na ito ang gabay sa hookup ng hardware. Karaniwang ipinapaliwanag ng seksyon na ito ang mga koneksyon sa mga kable na kinakailangan sa pagitan ng sensor at ng ESP8266. Ang mga koneksyon ay ang mga sumusunod.

  1. Gumagana ang SHT31 sa paglipas ng I2C. Ipinapakita ng imaheng nasa itaas ang koneksyon sa pagitan ng module na ESP8266 at SHT31. Gumagamit kami ng I2C cable para dito alinman maaari naming magamit ang 4 F hanggang F jumper wires.
  2. ang isang wire ay ginagamit para sa Vcc, ang pangalawang wire para sa GND at iba pang dalawa sa SDA at SCL ayon sa pagkakabanggit.
  3. Ayon sa I2C adapter pin2 at pin 14 ng isang board na ESP8266 ay ginagamit bilang SDA at SCL ayon sa pagkakabanggit

Hakbang 3: Code para sa Pag-iiskedyul ng Gawain

Sa tutorial na ito, nagsasagawa kami ng tatlong operasyon

  • Basahin ang data mula sa SHT11 gamit ang I2C protocol
  • i-host ang web server at i-post ang sensor na nagbabasa sa webpage
  • i-post ang mga pagbabasa ng sensor sa ThingSpeak API

Upang makamit ito ginagamit namin ang library ng TaskScheduler. Nag-iskedyul kami ng tatlong magkakaibang mga gawain na tumutukoy sa tatlong magkakaibang mga pagpapatakbo ng kontrol. ginagawa ito tulad ng sumusunod

  • Ang Gawain 1 ay para sa pagbabasa ng halaga ng sensor na tumatakbo ang gawaing ito nang 1 segundo hanggang sa maabot ang timeout ng 10 sec.
  • Kapag naabot ng Task1 ang pag-timeout ay pinagana ang Gawain 2 at hindi pinagana ang Task1.
  • Kumonekta kami sa AP sa callback na ito, Dalawang variable ng boolean ang kinuha upang alagaan ang paglipat sa pagitan ng STA at AP
  • Sa Gawain 2 nagho-host kami ng isang web server sa 192.168.1.4. Ang gawain na ito ay tumatakbo para sa bawat 5 sec hanggang sa maabot ang timeout nito na 50 sec
  • Kapag naabot ng Gawain 2 ang pag-timeout ang Gawain 3 ay pinagana at ang Task2 ay hindi pinagana.
  • Kumonekta kami sa STA (lokal na IP) sa callback na ito
  • Sa Gawain 3 inilalagay namin ang pagbabasa ng sensor sa cloud ThingSpeak API
  • Tumatakbo ang Gawain 3 bawat limang segundo hanggang sa maabot ang timeout nito na 50 sec
  • Kapag naabot ng Task3 ang pag-timeout nito ang Gawain 1 ay muling pinagana at ang Task3 ay hindi pinagana.
  • Kapag walang callback na tinawag o ang aparato ay walang ginagawa ito ay pupunta sa Light Sleep kaya nakakatipid ng lakas.

Tagapag-iskedyul ts;

// Mga gawain para sa i2c, pagho-host ng web server at pag-post sa mga bagay na bagay

Gawain tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); TAP ng gawain (5 * TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Gawain tWiFi (5 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // timeout para sa mga gawain tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // paganahin ang gawain ng I2C tI2C.enable ();

Hakbang 4: Code para sa Mga Halaga ng Temperatura at Humidity sa Pagbasa

Gumagamit kami ng Wire.h library upang mabasa ang mga halagang temperatura at halumigmig. Pinapadali ng library na ito ang komunikasyon ng i2c sa pagitan ng sensor at ng master device. Ang 0x44 ay ang I2C address para sa SHT31.

Nagpapatakbo ang SHT31 sa isang iba't ibang mga mode ng pagpapatakbo. Maaari kang mag-refer sa datasheet para doon.

Gumagamit kami ng 0x2C at 0x06 bilang MSB at LSB ayon sa pagkakabanggit para sa solong operasyon ng pagbaril.

// I2C task callback void taskI2CCallback ()

{Serial.println ("taskI2CStarted"); unsigned int root [6]; // simulan ang paghahatid mula sa 0x44; Wire.beginTransmission (Addr); // para sa isang shot transmisstion na may mataas na kakayahang umulit na ginagamit namin 0x2C (MSB) at 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // end transmission Wire.endTransmission (); // request bytes from 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); kung (Wire.available () == 6) {// data [0] at data [1] naglalaman ng 16 bit ng temperatura. ugat [0] = Wire.read (); ugat [1] = Wire.read (); // data [2] naglalaman ng 8 bit ng root ng CRC [2] = Wire.read (); // data [3] at data [4] naglalaman ng 16 kaunting ugat ng kahalumigmigan [3] = Wire.read (); ugat [4] = Wire.read (); // data [5] binubuo ng 8 bit CRC root [5] = Wire.read (); } int temp = (ugat [0] * 256) + ugat [1]; // shift MSB by 8 bits add LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; // shift the MSB by 8 bits add LSB to it devide by full resolution and * 100 for porsyento float halumigmig = (100.0 * ((root [3] * 256.0) + root [4])) / 65535.0;

tempC = cTemp;

tempF = fTemp; mahalumigmig = halumigmig; Serial.print ("Temperatura sa C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Temperatura sa F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Humidity: / t"); Serial.println (String (halumigmig, 1)); }

Hakbang 5: Code para sa Pagho-host ng isang Webserver

Code para sa Pagho-host ng isang Webserver
Code para sa Pagho-host ng isang Webserver
Code para sa Pagho-host ng isang Webserver
Code para sa Pagho-host ng isang Webserver

Nag-host kami ng isang web server mula sa aming aparato sa isang static IP.

  • Ginagamit ang library ng ESP8266WebServer upang i-host ang webserver
  • Una kailangan naming ideklara ang IP address, Gateway at subnet mask upang likhain ang aming static IP
  • Ngayon ideklara ang ssid at password para sa iyong Access point.
  • kumonekta sa Access point mula sa anumang aparato ng STA
  • i-host ang server sa port 80 na isang default port para sa internet komunikasyon protocol, Hypertext Transfer Protocol (HTTP)
  • ipasok ang 192.168.1.4 sa iyong web browser para sa intro webpage at 192.168.1.4/Value para sa pagbasa ng sensor ng webpage

// static Ip para sa AP

IPAddress ap_local_IP (192, 168, 1, 4);

IPAddress ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid at AP para sa lokal na WiFi sa STA mode

const char WiFissid = "*********";

const char WiFipass = "*********";

// ssid at pumasa para sa AP

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

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

Ang server ng ESP8266WebServer (80);

walang bisa ang pag-set up {

server.on ("/", onHandleDataRoot);

server.on ("/ Halaga", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("nagsimula ang taskAP");

server.handleClient ();

}

void onHandleDataRoot () {server.send (200, "text / html", PAGE1); }

walang bisa saHandleDataFeed () {

server.send (200, "text / html", PAGE2); }

walang bisa saHandleNotFound () {

String message = "Hindi Natagpuan ang File / n / n";

mensahe + = "URI:";

mensahe + = server.uri ();

mensahe + = "\ nPamamaraan:";

mensahe + = (server.method () == HTTP_GET)? "GET": "POST";

mensahe + = "\ nMga Argumento:";

mensahe + = server.args ();

mensahe + = "\ n";

server.send (404, "text / plain", mensahe);}

walang bisa ang muling pagkonektaAPWiFi () {

WiFi.mode (WIFI_AP_STA);

pagkaantala (100);

WiFi.disconnect ();

katayuan ng boolean = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

kung (status == totoo) {

Serial.print ("Pagtatakda ng malambot-AP …");

boolean ap = WiFi.softAP (APssid, APpass);

kung (ap == totoo) {

Serial.print ("konektado sa: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Hakbang 6: Code para sa Pag-post ng Data sa Thing Speak

Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak
Code para sa Pag-post ng Data sa Thing Speak

Narito namin nai-post ang mga pagbabasa ng sensor sa Thing Speak. ang mga sumusunod na hakbang ay kinakailangan upang makumpleto ang gawaing ito-

  • Lumikha ng iyong account sa pagsasalita ng bagay
  • Lumikha ng mga channel at patlang upang maiimbak ang iyong data ng sensor
  • maaari naming makuha at mai-post ang data mula sa ESP patungo sa thingSpeak at vice versa gamit ang mga kahilingan sa GET at POST sa api.
  • maaari naming mai-post ang aming data sa ThingSpeak tulad ng sumusunod

walang bisa ang taskWiFiCallback () {

WiFiClient wifiClient; kung (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (mahalumigmig); postStr + = "& field2 ="; postStr + = String (tempC); postStr + = "& field3 ="; postStr + = String (tempF); postStr + = "\ r / n / r / n"; wifiClient.print ("POST / update HTTP / 1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Koneksyon: isara / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); wifiClient.print ("Uri ng Nilalaman: application / x-www-form-urlencoded / n"); wifiClient.print ("Haba ng Nilalaman:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Hakbang 7: Pangkalahatang Code

Ang pangkalahatang code ay magagamit sa aking repository ng github

Mga Kredito:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Tagapag-iskedyul ng Gawain
  • SHT 31
  • I2C Scan
  • Tutorial na itinuturo ng HIH6130
  • Wire Arduino
  • NCD.io

Inirerekumendang: