Talaan ng mga Nilalaman:

THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266: 9 Mga Hakbang
THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266: 9 Mga Hakbang

Video: THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266: 9 Mga Hakbang

Video: THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266: 9 Mga Hakbang
Video: How to Program the ESP8266 ESP01 DHT11 Temperature Humidity Sensor Module | RemoteXY | FLProg 2024, Nobyembre
Anonim
THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266
THINGSPEAK TEMPERATURE AT HUMIDITY APP NA GAMIT SA ESP8266

Habang nakikipag-usap sa aking elektronikong bagay, nakuha ko ang ideyang ito upang gumawa ng web-based na app ng panahon. Ang web app na ito ay gumagamit ng SHT31 sensor para sa pagkuha ng real-time na data ng temperatura at halumigmig. Naipakalat namin ang aming proyekto sa module na WiFi ng ESP8266. Online o offline! Hindi na kailangang mag-alala, kung ikaw ay online o offline makakakuha ka ng mga update sa panahon mula sa kahit saan at anumang oras. Nag-post ang web app na ito ng data sa lokal na web server pati na rin sa cloud. Para sa mga pagpapatakbo ng cloud, gumagamit kami ng ThingSpeak API. Gumagamit ang SHT31 ng I2C upang makuha ang data mula sa sensor.

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. SHT 31
  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

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

Code para sa Pag-iskedyul ng Gawain
Code para sa Pag-iskedyul 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 oras ng paganahin ang Gawain 2 ay pinagana at ang Task1 ay hindi pinagana.
  • 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 calback na ito. Sa Gawain 3 inilalagay namin ang sensor na nagbabasa 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 oras ng pag-out 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.

walang bisa ang taskI2CCallback ();

walang bisa ang taskI2CDisable (); walang bisa ang taskAPCallback (); walang bisa na taskAPDisable (); walang bisa ang taskWiFiCallback (); walang bisa ang taskWiFiDisable (); // Mga gawain para sa i2c, pagho-host ng web server at pag-post sa mga bagay na bagay na Tasa tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); 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

Code para sa Mga Halaga ng Temperatura at Humidity sa Pagbasa
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 web server

  • 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.connect 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, ang 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 webpage ng sensor

// static Ip for APIPAddress 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); } void onHandleDataFeed () {server.send (200, "text / html", PAGE2); } void onHandleNotFound () {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 muling kumonekta saAPWiFi () {WiFi.mode (WIFI_AP_STA); pagkaantala (100); WiFi.disconnect (); katayuan ng boolean = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet); kung (status == true) {Serial.print ("Pagse-set ng soft-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: Pag-setup ng Thingspeak

Pag-setup ng Thingspeak
Pag-setup ng Thingspeak
Pag-setup ng Thingspeak
Pag-setup ng Thingspeak
Pag-setup ng Thingspeak
Pag-setup ng Thingspeak

Ang ThingSpeak ay isang IoT platform. Ang ThingSpeak ay isang libreng serbisyo sa web na hinahayaan kang mangolekta at mag-store ng data ng sensor sa cloud.

Sa Hakbang na ito, bibigyan kita ng isang maikling pamamaraan upang mai-set up ang iyong Thing Speak account

  • Mag-sign up para sa bagong User Account sa ThingSpeak
  • Lumikha ng isang bagong Channel sa pamamagitan ng pagpili ng Mga Channel, Aking Mga Channel, at pagkatapos ay Bagong Channel
  • I-edit ang iyong mga patlang
  • Ang mga patlang na ito ay naglalaman ng iyong data ng sensor
  • Tandaan ang Isulat ang API Key at Channel ID
  • Sa iyong Arduino sketch, maaari mong gamitin ang ThingSpeak library para sa Arduino o maaari mong direktang I-POST ang data sa ThingSpeak API
  • ang susunod na hakbang ay nagpapaliwanag tungkol sa pag-post ng nilalaman sa Thing Speak API

Hakbang 7: 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 isang bagay na nagsasalita 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

id 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 8: Pangkalahatang Code

Magagamit ang pangkalahatang code sa aking Repository ng GitHub

Hakbang 9: Mga Kredito

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

Inirerekumendang: