สารบัญ:
- ขั้นตอนที่ 1: ต้องใช้ฮาร์ดแวร์
- ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์
- ขั้นตอนที่ 3: รหัสสำหรับการจัดกำหนดการงาน
- ขั้นตอนที่ 4: รหัสสำหรับการอ่านค่าอุณหภูมิและความชื้น
- ขั้นตอนที่ 5: รหัสสำหรับการโฮสต์เว็บเซิร์ฟเวอร์
- ขั้นตอนที่ 6: การตั้งค่า Thingspeak
- ขั้นตอนที่ 7: รหัสสำหรับการโพสต์ข้อมูลไปยัง Thing Speak
- ขั้นตอนที่ 8: รหัสโดยรวม
- ขั้นตอนที่ 9: เครดิต
วีดีโอ: แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ขณะกำลังแก้ไขอุปกรณ์อิเล็กทรอนิกส์ ฉันได้รับแนวคิดนี้ในการสร้างแอปพยากรณ์อากาศบนเว็บ เว็บแอปนี้ใช้เซ็นเซอร์ SHT31 เพื่อรับข้อมูลอุณหภูมิและความชื้นแบบเรียลไทม์ เราได้ปรับใช้โครงการของเราในโมดูล ESP8266 WiFi ออนไลน์หรือออฟไลน์! ไม่ต้องกังวล ไม่ว่าคุณจะออนไลน์หรือออฟไลน์ คุณจะได้รับข้อมูลอัปเดตสภาพอากาศจากทุกที่ทุกเวลา เว็บแอปนี้โพสต์ข้อมูลไปยังเว็บเซิร์ฟเวอร์ในเครื่องและบนคลาวด์ สำหรับการทำงานบนคลาวด์ เราใช้ ThingSpeak API SHT31 ใช้ I2C เพื่อรับข้อมูลจากเซ็นเซอร์
SHT 31 เป็นเซ็นเซอร์อุณหภูมิและความชื้นที่ผลิตโดย Sensirion SHT31 ให้ความแม่นยำสูงประมาณ ±2% RH ช่วงความชื้นอยู่ระหว่าง 0 ถึง 100% และช่วงอุณหภูมิระหว่าง -40 ถึง 125 °C เชื่อถือได้และรวดเร็วยิ่งขึ้นด้วยเวลาตอบสนองของเซนเซอร์ 8 วินาที ฟังก์ชันการทำงานรวมถึงการประมวลผลสัญญาณที่ได้รับการปรับปรุงและความเข้ากันได้ของ I2C มีโหมดการทำงานที่แตกต่างกันซึ่งทำให้ประหยัดพลังงาน
ในบทช่วยสอนนี้ เราได้เชื่อมต่อ SHT 31 กับบอร์ด Adafruit Huzzah สำหรับการอ่านค่าอุณหภูมิและความชื้น เราได้ใช้ตัวป้องกัน ESP8266 I2C อะแดปเตอร์นี้ทำให้ผู้ใช้สามารถเข้าถึงพินทั้งหมดได้และมีสภาพแวดล้อม I2C ที่เป็นมิตรกับผู้ใช้
ขั้นตอนที่ 1: ต้องใช้ฮาร์ดแวร์
ฮาร์ดแวร์ที่ใช้ในการทำงานนี้:
- SHT 31
- Adafruit Huzzah ESP8266
- อะแดปเตอร์ ESP8266 I2C
- สายเคเบิล I2C
ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์
ขั้นตอนนี้รวมถึงคู่มือการเชื่อมต่อฮาร์ดแวร์ ส่วนนี้โดยทั่วไปจะอธิบายการเชื่อมต่อสายไฟที่จำเป็นระหว่างเซ็นเซอร์กับ ESP8266 การเชื่อมต่อมีดังนี้
- SHT31 ทำงานบน I2C ภาพด้านบนแสดงการเชื่อมต่อระหว่างโมดูล ESP8266 และ SHT31 เราใช้สายเคเบิล I2C สำหรับมันทั้งที่เราสามารถใช้สายจัมเปอร์ 4 F ถึง F
- สายหนึ่งใช้สำหรับ Vcc สายที่สองสำหรับ GND และอีกสองสายสำหรับ SDA และ SCL ตามลำดับ
- ตาม I2C อะแดปเตอร์ pin2 และพิน 14 ของบอร์ด ESP8266 ใช้เป็น SDA และ SCL ตามลำดับ
ขั้นตอนที่ 3: รหัสสำหรับการจัดกำหนดการงาน
ในบทช่วยสอนนี้ เรากำลังดำเนินการสามขั้นตอน
- อ่านข้อมูลจาก SHT11 โดยใช้โปรโตคอล I2C
- โฮสต์เว็บเซิร์ฟเวอร์และโพสต์การอ่านเซ็นเซอร์ไปที่หน้าเว็บ
- โพสต์การอ่านเซ็นเซอร์ไปที่ ThingSpeak API
เพื่อให้บรรลุสิ่งนี้ เราใช้ไลบรารี TaskScheduler เราได้จัดกำหนดการงานที่แตกต่างกันสามงานโดยอ้างอิงถึงการดำเนินการควบคุมที่แตกต่างกันสามแบบ ได้ดังนี้
- ภารกิจที่ 1 ใช้สำหรับอ่านค่าเซ็นเซอร์ งานนี้ทำงานเป็นเวลา 1 วินาทีจนกว่าจะหมดเวลา 10 วินาที
- เมื่อ Task1 หมดเวลา งาน 2 จะถูกเปิดใช้งานและ Task1 ถูกปิดใช้งาน
- เราเชื่อมต่อกับ AP ในการโทรกลับนี้ มีการใช้ตัวแปรบูลีนสองตัวเพื่อดูแลการสลับระหว่าง STA และ AP
- ในงาน 2 เรากำลังโฮสต์เว็บเซิร์ฟเวอร์ที่ 192.168.1.4. งานนี้ทำงานทุกๆ 5 วินาทีจนกว่าจะหมดเวลาซึ่งเท่ากับ 50 วินาที
- เมื่อ Task 2 หมดเวลา งาน 3 ถูกเปิดใช้งานและ Task2 ถูกปิดใช้งาน
- เราเชื่อมต่อกับ STA (IP ท้องถิ่น) ใน calback นี้ในงาน 3 เรากำลังโพสต์การอ่านเซ็นเซอร์ไปยังคลาวด์ ThingSpeak API
-
ภารกิจที่ 3 ทำงานทุก ๆ ห้าวินาทีจนกว่าจะหมดเวลา เช่น 50 วินาที
- เมื่อ Task3 หมดเวลา งาน 1 จะถูกเปิดใช้งานอีกครั้งและ Task3 ถูกปิดใช้งาน
- เมื่อไม่มีการเรียกกลับหรือไม่ได้ใช้งานอุปกรณ์ เครื่องจะเข้าสู่โหมด Light Sleep ซึ่งจะช่วยประหยัดพลังงาน
เป็นโมฆะ taskI2Ccallback();
เป็นโมฆะ taskI2CDisable(); เป็นโมฆะ taskAPCallback(); เป็นโมฆะงานAPDisable(); เป็นโมฆะ taskWiFiCallback(); เป็นโมฆะ taskWiFiDisable(); //งานสำหรับ i2c, โฮสต์เว็บเซิร์ฟเวอร์และโพสต์ใน Thingspeak Task tI2C (1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); งาน tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); ภารกิจ tAP(5*TASK_SECOND, TASK_FOREVER, &taskAPCallback, &ts, false, NULL, &taskAPDisable); งาน tWiFi(5* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable); //หมดเวลาสำหรับงาน tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout(50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); //เปิดใช้งาน I2C งาน tI2C.enable();
ขั้นตอนที่ 4: รหัสสำหรับการอ่านค่าอุณหภูมิและความชื้น
เราใช้ไลบรารี Wire.h เพื่ออ่านค่าอุณหภูมิและความชื้น ไลบรารีนี้อำนวยความสะดวกในการสื่อสาร i2c ระหว่างเซ็นเซอร์และอุปกรณ์หลัก 0x44 คือที่อยู่ I2C สำหรับ SHT31
SHT31 ทำงานในโหมดการทำงานที่แตกต่างกัน คุณสามารถอ้างถึงแผ่นข้อมูลสำหรับสิ่งนั้น เราใช้ 0x2C และ 0x06 เป็น MSB และ LSB ตามลำดับสำหรับการทำงานแบบช็อตเดียว
//I2C การโทรกลับงานเป็นโมฆะ taskI2CCallback () { Serial.println ("taskI2CStarted"); รูท int ที่ไม่ได้ลงนาม[6]; // เริ่มส่งจาก 0x44; Wire.beginTransmission(Addr); // สำหรับการส่งหนึ่งช็อตที่มีการทำซ้ำสูง เราใช้ 0x2C(MSB) และ 0x06(LSB) Wire.write(0x2C); Wire.write(0x06); //สิ้นสุดการส่ง Wire.endTransmission(); //ขอไบต์จาก 0x44 Wire.beginTransmission(Addr); Wire.endTransmission(); Wire.requestFrom(Addr, 6); if(Wire.available() == 6){ //data[0] and data[1] มีอุณหภูมิ 16 บิต root[0] = Wire.read(); รูท[1] =Wire.read(); //data[2] มีราก CRC 8 บิต[2] = Wire.read(); //data[3] และ data[4] มีรูทความชื้น 16 บิต[3] = Wire.read(); รูท[4] = Wire.read(); //data[5] ประกอบด้วยราก CRC 8 บิต[5] = Wire.read(); } int temp = (root[0] * 256) + root[1]; // shift MSB 8 บิตเพิ่ม LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; //เปลี่ยน MSB 8 บิตเพิ่ม LSB ลงในความละเอียดเต็มและ *100 สำหรับเปอร์เซ็นต์ความชื้นลอย = (100.0 * ((ราก[3] * 256.0) + ราก[4])) / 65535.0; อุณหภูมิ C = cTemp; tempF = fTemp; ชื้น = ความชื้น; Serial.print("อุณหภูมิใน C:\t"); Serial.println (สตริง (cTemp, 1)); Serial.print("อุณหภูมิใน F:\t"); Serial.println(สตริง(fTemp, 1)); Serial.print("ความชื้น:\t "); Serial.println(สตริง(ความชื้น 1)); }
ขั้นตอนที่ 5: รหัสสำหรับการโฮสต์เว็บเซิร์ฟเวอร์
เราได้โฮสต์เว็บเซิร์ฟเวอร์จากอุปกรณ์ของเราบน IP แบบคงที่
ไลบรารี่ ESP8266WebServer ใช้สำหรับโฮสต์เว็บเซิร์ฟเวอร์
- ก่อนอื่นเราต้องประกาศที่อยู่ IP, เกตเวย์และซับเน็ตมาสก์เพื่อสร้าง IP แบบคงที่ของเรา
- ตอนนี้ประกาศ ssid และรหัสผ่านสำหรับจุดเชื่อมต่อของคุณ เชื่อมต่อกับจุดเชื่อมต่อจากอุปกรณ์ STA ใดๆ
- โฮสต์เซิร์ฟเวอร์บนพอร์ต 80 ซึ่งเป็นพอร์ตเริ่มต้นสำหรับโปรโตคอลการสื่อสารทางอินเทอร์เน็ต Hypertext Transfer Protocol (HTTP) ป้อน 192.168.1.4 บนเว็บเบราว์เซอร์ของคุณสำหรับหน้าเว็บแนะนำและ 192.168.1.4/ค่าสำหรับหน้าเว็บการอ่านเซ็นเซอร์
// Ip แบบคงที่สำหรับ APIPAddress ap_local_IP(192, 168, 1, 4); IPAddress ap_gateway(192, 168, 1, 254); IPAddress ap_subnet(255, 255, 255, 0); //ssid และ AP สำหรับ WiFi ในพื้นที่ในโหมด STA const char WiFissid = "************"; const ถ่าน WiFipass = "************"; //ssid และ pass สำหรับ AP const char APssid = "*****"; const char APpass = "*****"; ESP8266เว็บเซิร์ฟเวอร์เซิร์ฟเวอร์(80); ถือเป็นโมฆะการตั้งค่า{server.on("/", onHandleDataRoot); server.on("/Value", onHandleDataFeed); server.onNotFound (onHandleNotFound);} เป็นโมฆะ taskAPCallback () { Serial.println ("taskAP เริ่มต้น"); server.handleClient(); } โมฆะ onHandleDataRoot(){ server.send(200, "text/html", PAGE1); } โมฆะ onHandleDataFeed(){ server.send(200, "text/html", PAGE2); } เป็นโมฆะ onHandleNotFound(){ ข้อความสตริง = "ไม่พบไฟล์\n\n"; ข้อความ += "URI: "; ข้อความ += server.uri(); ข้อความ += "\nวิธีการ: "; ข้อความ += (server.method() == HTTP_GET)?"GET":"POST"; ข้อความ += "\nอาร์กิวเมนต์: "; ข้อความ += server.args(); ข้อความ += "\n"; server.send(404, "ข้อความ/ธรรมดา", ข้อความ); } เป็นโมฆะ reconnectAPWiFi(){ WiFi.mode(WIFI_AP_STA); ล่าช้า (100); WiFi. ตัดการเชื่อมต่อ (); สถานะบูลีน = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet); if(status ==true){ Serial.print("กำลังตั้งค่า soft-AP … "); บูลีน ap = WiFi.softAP (APssid, APpass); if(ap==true){ Serial.print("เชื่อมต่อกับ:\t"); //IPAddress myIP = WiFi.softAPIP(); Serial.println(WiFi.softAPIP()); } server.begin();
}
ขั้นตอนที่ 6: การตั้งค่า Thingspeak
ThingSpeak เป็นแพลตฟอร์ม IoT ThingSpeak เป็นบริการเว็บฟรีที่ให้คุณรวบรวมและจัดเก็บข้อมูลเซ็นเซอร์ในคลาวด์
ในขั้นตอนนี้ เราจะให้ขั้นตอนสั้น ๆ ในการตั้งค่าบัญชี Thing Speak ของคุณ
- ลงทะเบียนบัญชีผู้ใช้ใหม่ใน ThingSpeak
- สร้างช่องใหม่โดยเลือกช่อง ช่องของฉัน แล้วเลือกช่องใหม่
- แก้ไขฟิลด์ของคุณ
- ฟิลด์เหล่านี้มีข้อมูลเซ็นเซอร์ของคุณ
- จดบันทึกรหัส API เขียนและรหัสช่อง
- บนสเก็ตช์ Arduino คุณสามารถใช้ไลบรารี ThingSpeak สำหรับ Arduino หรือคุณสามารถโพสต์ข้อมูลไปยัง ThingSpeak API ได้โดยตรง
- ขั้นตอนต่อไปจะอธิบายอย่างละเอียดเกี่ยวกับการโพสต์เนื้อหาไปยัง Thing Speak API
ขั้นตอนที่ 7: รหัสสำหรับการโพสต์ข้อมูลไปยัง Thing Speak
เรากำลังโพสต์การอ่านเซ็นเซอร์ไปที่ Thing Speak จำเป็นต้องมีขั้นตอนต่อไปนี้เพื่อทำงานนี้ให้สมบูรณ์ -
- สร้างบัญชีของคุณในสิ่งที่พูดสร้างช่องและฟิลด์เพื่อเก็บข้อมูลเซ็นเซอร์ของคุณ
- เราสามารถรับและโพสต์ข้อมูลจาก ESP ไปยัง thingSpeak และในทางกลับกันโดยใช้คำขอ GET และ POST ไปยัง api
- เราสามารถโพสต์ข้อมูลของเราไปที่ ThingSpeak ได้ดังนี้
รหัส taskWiFiCallback(){ WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) { สตริง postStr = apiKey; postStr +="&field1="; postStr += สตริง (ชื้น); postStr +="&field2="; postStr += สตริง (tempC); postStr +="&field3="; postStr += สตริง (tempF); postStr += "\r\n\r\n"; wifiClient.print("โพสต์ / อัปเดต HTTP/1.1\n"); wifiClient.print("โฮสต์: api.thingspeak.com\n"); wifiClient.print("การเชื่อมต่อ: ปิด\n"); wifiClient.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); wifiClient.print("Content-Type: application/x-www-form-urlencoded\n"); wifiClient.print("เนื้อหา-ความยาว: "); wifiClient.print(postStr.length()); wifiClient.print("\n\n"); wifiClient.print(postStr); } wifiClient.stop(); }
ขั้นตอนที่ 8: รหัสโดยรวม
รหัสโดยรวมมีอยู่ในที่เก็บ GitHub ของฉัน
ขั้นตอนที่ 9: เครดิต
- Arduino JSON
- ESP826เว็บเซิร์ฟเวอร์
- ตัวกำหนดเวลางาน
- SHT 31
- I2C Scan
- HIH6130 กวดวิชาสอน
- ลวด
- NCD.io
แนะนำ:
นาฬิกาดิจิตอล LED Dot Matrix - แอพ ESP Matrix สำหรับ Android: 14 ขั้นตอน
Digital Clock LED Dot Matrix - แอพ ESP Matrix สำหรับ Android: บทความนี้ได้รับการสนับสนุนอย่างภาคภูมิใจโดย PCBWAY.PCBWAY สร้าง PCB ต้นแบบคุณภาพสูงสำหรับผู้คนทั่วโลก ลองด้วยตัวคุณเองและรับ 10 PCBs เพียง $5 ที่ PCBWAY ด้วยคุณภาพที่ยอดเยี่ยมมาก ขอบคุณ PCBWAY บอร์ด ESP Matrix ที่ฉันพัฒนา
Mini Drawing Bot - แอพ Android แบบสด - Trignomentry: 18 ขั้นตอน (พร้อมรูปภาพ)
Mini Drawing Bot - แอพ Android แบบสด - Trignomentry: ขอบคุณพระเจ้าและพวกคุณทุกคนที่ทำให้โปรเจ็กต์ของฉัน Baby-MIT-Cheetah-Robot ชนะรางวัลที่หนึ่งใน Contest Make it Move ฉันมีความสุขมากเพราะเพื่อนจำนวนมากถามคำถามมากมายในการสนทนาและในข้อความ คำถามสำคัญประการหนึ่งก็คือว่า
แอพ Android ตอนที่ 1: หน้าจอเริ่มต้นโดยใช้ Fragments/Kotlin: 5 ขั้นตอน
แอป Android ตอนที่ 1: หน้าจอเริ่มต้นโดยใช้ Fragments/Kotlin: สวัสดีอีกครั้ง เป็นไปได้มากว่าคุณมี "ฟรี" อยู่บ้านช่วงโควิด19 แล้วย้อนไปดูหัวข้อที่เคยอยากเรียนได้ การพัฒนาแอพ Android เป็นหนึ่งในนั้นสำหรับฉัน และฉันตัดสินใจเมื่อไม่กี่สัปดาห์ก่อนที่จะให้
บ้านอัจฉริยะด้วย Arduino MKR1000 และ M.I.T. แอพ Android: 4 ขั้นตอน
บ้านอัจฉริยะด้วย Arduino MKR1000 และ M.I.T. แอพ Android: ในบทช่วยสอนนี้ ฉันจะอธิบายวิธีปรับปรุงบ้านอัจฉริยะของคุณด้วยส่วนประกอบเพียงไม่กี่อย่าง หัวใจของการออกแบบบ้านอัจฉริยะนี้คือบอร์ด Arduino MKR1000 ซึ่งควบคุมด้วยแอพที่ออกแบบบนเว็บไซต์การพัฒนาของ M.I.T. (สถาบันแมสซาชูเซตส์
อุณหภูมิและความชื้นโดยใช้ ESP32-DHT22-MQTT-MySQL-PHP: 7 ขั้นตอน
อุณหภูมิและความชื้นโดยใช้ ESP32-DHT22-MQTT-MySQL-PHP: แฟนสาวของฉันต้องการเรือนกระจก ฉันจึงสร้างเรือนกระจกให้เธอ แต่ฉันต้องการเซ็นเซอร์อุณหภูมิและความชื้นภายในเรือนกระจก ดังนั้นฉันจึงลองค้นหาตัวอย่างและเริ่มทดลอง ข้อสรุปของฉันคือตัวอย่างทั้งหมดที่ฉันพบไม่ใช่สิ่งที่