สารบัญ:
- ขั้นตอนที่ 1: ต้องใช้ฮาร์ดแวร์
- ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์
- ขั้นตอนที่ 3: รหัสสำหรับการจัดกำหนดการงาน
- ขั้นตอนที่ 4: รหัสสำหรับการอ่านค่าอุณหภูมิและความชื้น
- ขั้นตอนที่ 5: รหัสสำหรับการโฮสต์เว็บเซิร์ฟเวอร์
- ขั้นตอนที่ 6: รหัสสำหรับการโพสต์ข้อมูลไปยัง Thing Speak
- ขั้นตอนที่ 7: รหัสโดยรวม
วีดีโอ: Weather Web App โดยใช้ Esp8266: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
SHT 31 เป็นเซ็นเซอร์อุณหภูมิและความชื้นที่ผลิตโดย Sensirion SHT31 ให้ความแม่นยำสูงประมาณ ±2% RH ช่วงความชื้นอยู่ระหว่าง 0 ถึง 100% และช่วงอุณหภูมิระหว่าง -40 ถึง 125 °C เชื่อถือได้และรวดเร็วยิ่งขึ้นด้วยเวลาตอบสนองของเซนเซอร์ 8 วินาที ฟังก์ชันการทำงานรวมถึงการประมวลผลสัญญาณที่ได้รับการปรับปรุงและความเข้ากันได้ของ I2C มีโหมดการทำงานที่แตกต่างกันซึ่งทำให้ประหยัดพลังงาน
ในบทช่วยสอนนี้ เราได้เชื่อมต่อ SHT 31 กับบอร์ด Adafruit Huzzah สำหรับการอ่านค่าอุณหภูมิและความชื้น เราได้ใช้ตัวป้องกัน ESP8266 I2C อะแดปเตอร์นี้ทำให้ผู้ใช้สามารถเข้าถึงพินทั้งหมดได้และมีสภาพแวดล้อม I2C ที่เป็นมิตรกับผู้ใช้
ขั้นตอนที่ 1: ต้องใช้ฮาร์ดแวร์
ฮาร์ดแวร์ที่ใช้ในการทำงานนี้:
1. SHT31
2. Adafruit Huzzah ESP8266
3. อะแดปเตอร์ ESP8266 I2C
4. สายเคเบิล 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 ท้องถิ่น) ในการโทรกลับนี้
- ในงาน 3 เรากำลังโพสต์การอ่านเซ็นเซอร์บนคลาวด์ ThingSpeak API
- ภารกิจที่ 3 ทำงานทุก ๆ ห้าวินาทีจนกว่าจะหมดเวลา เช่น 50 วินาที
- เมื่อ Task3 หมดเวลา งาน 1 จะถูกเปิดใช้งานอีกครั้งและ Task3 ถูกปิดใช้งาน
- เมื่อไม่มีการเรียกกลับหรือไม่ได้ใช้งานอุปกรณ์ เครื่องจะเข้าสู่โหมด Light Sleep ซึ่งจะช่วยประหยัดพลังงาน
กำหนดการ ts;
//งานสำหรับ i2c โฮสต์เว็บเซิร์ฟเวอร์และโพสต์บน thingspeak
งาน 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 แบบคงที่สำหรับ AP
IPAddress 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 ถ่าน WiFissid = "************";
const ถ่าน WiFipass = "************";
// ssid และส่งต่อสำหรับ AP
const char APssid = "*****";
const char APpass = "*****";
ESP8266เว็บเซิร์ฟเวอร์เซิร์ฟเวอร์(80);
การตั้งค่าเป็นโมฆะ{
server.on("/", onHandleDataRoot);
server.on("/Value", onHandleDataFeed);
เซิร์ฟเวอร์.onNotFound(onHandleNotFound);
}
เป็นโมฆะงานAPCallback(){
Serial.println("taskAP เริ่มต้น");
server.handleClient();
}
เป็นโมฆะ onHandleDataRoot(){ server.send(200, "text/html", PAGE1); }
เป็นโมฆะบน HandleDataFeed(){
server.send(200, "ข้อความ/html", หน้า2); }
เป็นโมฆะบน HandleNotFound(){
ข้อความสตริง = "ไม่พบไฟล์\n\n";
ข้อความ += "URI: ";
ข้อความ += server.uri();
ข้อความ += "\nวิธีการ: ";
ข้อความ += (server.method() ==
ข้อความ += "\nอาร์กิวเมนต์: ";
ข้อความ += server.args();
ข้อความ += "\n";
server.send(404, "ข้อความ/ธรรมดา", ข้อความ);}
เป็นโมฆะ reconnectAPWiFi(){
WiFi.mode(WIFI_AP_STA);
ล่าช้า (100);
WiFi. ตัดการเชื่อมต่อ ();
สถานะบูลีน = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
ถ้า(สถานะ ==จริง){
Serial.print("กำลังตั้งค่า soft-AP … ");
บูลีน ap = WiFi.softAP (APssid, APpass);
ถ้า(ap==จริง){
Serial.print("เชื่อมต่อกับ:\t");
//IPAddress myIP = WiFi.softAPIP();
Serial.println(WiFi.softAPIP());
}
เซิร์ฟเวอร์.begin();
}
}
ขั้นตอนที่ 6: รหัสสำหรับการโพสต์ข้อมูลไปยัง 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(); }
ขั้นตอนที่ 7: รหัสโดยรวม
รหัสโดยรวมมีอยู่ในที่เก็บ github ของฉัน
เครดิต:
- Arduino JSON: ArduinoJson
- ESP826เว็บเซิร์ฟเวอร์
- ตัวกำหนดเวลางาน
- SHT 31
- I2C Scan
- HIH6130 กวดวิชาสอน
- สาย Arduino
- NCD.io
แนะนำ:
Simple Weather Station โดยใช้ ESP8266.: 6 ขั้นตอน (พร้อมรูปภาพ)
Simple Weather Station โดยใช้ ESP8266: ในคำแนะนำนี้ฉันจะแบ่งปันวิธีใช้ ESP8266 เพื่อรับข้อมูลเช่นอุณหภูมิ, ความดัน, สภาพภูมิอากาศ ฯลฯ และข้อมูล YouTube เช่นสมาชิก & จำนวนการดูทั้งหมด และแสดงข้อมูลบน Serial monitor และแสดงบน LCD ข้อมูลจะเ
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C - เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C โดยใช้ Arduino IDE: 5 ขั้นตอน
Neopixel Ws2812 Rainbow LED เรืองแสงพร้อม M5stick-C | เรียกใช้ Rainbow บน Neopixel Ws2812 โดยใช้ M5stack M5stick C การใช้ Arduino IDE: สวัสดีทุกคนในคำแนะนำนี้ เราจะเรียนรู้วิธีใช้ neopixel ws2812 LED หรือแถบนำหรือเมทริกซ์นำหรือวงแหวน LED พร้อมบอร์ดพัฒนา m5stack m5stick-C พร้อม Arduino IDE และเราจะทำ ลายรุ้งกับมัน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E - การสร้างรีโมทคอนโทรล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: 5 ขั้นตอน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E | การสร้างการควบคุมระยะไกล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: ในคำแนะนำนี้ฉันจะแสดงวิธีสร้างรีโมทคอนโทรล RADIO โดยใช้โมดูลตัวรับส่งสัญญาณ 433mhz พร้อมการเข้ารหัส HT12E & IC ถอดรหัส HT12D ในคำแนะนำนี้ คุณจะสามารถส่งและรับข้อมูลโดยใช้ส่วนประกอบราคาถูกมาก เช่น HT
วิธีควบคุม Wemos D1 Mini/ Nodemcu โดยใช้ Blynk App (IOT) (esp8266): 6 ขั้นตอน
วิธีควบคุม Wemos D1 Mini/ Nodemcu โดยใช้ Blynk App (IOT) (esp8266): สวัสดีเพื่อนๆ ในคำแนะนำนี้ ฉันจะแสดงวิธีควบคุม wemos D1 mini หรือ (nodemcu) โดยใช้ blynk app เป็นคู่มือสำหรับผู้เริ่มต้นใช้งานอย่างแท้จริง สำหรับรายละเอียดการสอน ต้องดูวิดีโอ อย่าลืมกดไลค์ แชร์ & ติดตามช่องของฉัน
Acurite 5 in 1 Weather Station โดยใช้ Raspberry Pi และ Weewx (เข้ากันได้กับสถานีตรวจอากาศอื่น ๆ ): 5 ขั้นตอน (พร้อมรูปภาพ)
Acurite 5 in 1 Weather Station โดยใช้ Raspberry Pi และ Weewx (สถานีตรวจอากาศอื่นเข้ากันได้): เมื่อฉันซื้อสถานีตรวจอากาศ Acurite 5 in 1 ฉันต้องการตรวจสอบสภาพอากาศที่บ้านของฉันในขณะที่ฉันไม่อยู่ เมื่อฉันกลับถึงบ้านและตั้งค่า ฉันรู้ว่าฉันต้องเชื่อมต่อจอแสดงผลกับคอมพิวเตอร์หรือซื้อฮับอัจฉริยะ