สารบัญ:

แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266: 9 ขั้นตอน
แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266: 9 ขั้นตอน

วีดีโอ: แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266: 9 ขั้นตอน

วีดีโอ: แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266: 9 ขั้นตอน
วีดีโอ: NodeMCU ESP8266 ส่งค่าอุณหภูมิและความชื้นไปเก็บใน Google Sheets อัตโนมัติ 2024, พฤศจิกายน
Anonim
แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266
แอพ THINGSPEAK อุณหภูมิและความชื้นโดยใช้ ESP8266

ขณะกำลังแก้ไขอุปกรณ์อิเล็กทรอนิกส์ ฉันได้รับแนวคิดนี้ในการสร้างแอปพยากรณ์อากาศบนเว็บ เว็บแอปนี้ใช้เซ็นเซอร์ 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: ต้องใช้ฮาร์ดแวร์

ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น
ฮาร์ดแวร์ที่จำเป็น

ฮาร์ดแวร์ที่ใช้ในการทำงานนี้:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. อะแดปเตอร์ ESP8266 I2C
  4. สายเคเบิล I2C

ขั้นตอนที่ 2: การเชื่อมต่อฮาร์ดแวร์

การเชื่อมต่อฮาร์ดแวร์
การเชื่อมต่อฮาร์ดแวร์

ขั้นตอนนี้รวมถึงคู่มือการเชื่อมต่อฮาร์ดแวร์ ส่วนนี้โดยทั่วไปจะอธิบายการเชื่อมต่อสายไฟที่จำเป็นระหว่างเซ็นเซอร์กับ ESP8266 การเชื่อมต่อมีดังนี้

  1. SHT31 ทำงานบน I2C ภาพด้านบนแสดงการเชื่อมต่อระหว่างโมดูล ESP8266 และ SHT31 เราใช้สายเคเบิล I2C สำหรับมันทั้งที่เราสามารถใช้สายจัมเปอร์ 4 F ถึง F
  2. สายหนึ่งใช้สำหรับ Vcc สายที่สองสำหรับ GND และอีกสองสายสำหรับ SDA และ SCL ตามลำดับ
  3. ตาม 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
ตั้งค่า Thingspeak
ตั้งค่า Thingspeak
ตั้งค่า Thingspeak
ตั้งค่า Thingspeak
ตั้งค่า Thingspeak

ThingSpeak เป็นแพลตฟอร์ม IoT ThingSpeak เป็นบริการเว็บฟรีที่ให้คุณรวบรวมและจัดเก็บข้อมูลเซ็นเซอร์ในคลาวด์

ในขั้นตอนนี้ เราจะให้ขั้นตอนสั้น ๆ ในการตั้งค่าบัญชี Thing Speak ของคุณ

  • ลงทะเบียนบัญชีผู้ใช้ใหม่ใน ThingSpeak
  • สร้างช่องใหม่โดยเลือกช่อง ช่องของฉัน แล้วเลือกช่องใหม่
  • แก้ไขฟิลด์ของคุณ
  • ฟิลด์เหล่านี้มีข้อมูลเซ็นเซอร์ของคุณ
  • จดบันทึกรหัส API เขียนและรหัสช่อง
  • บนสเก็ตช์ Arduino คุณสามารถใช้ไลบรารี ThingSpeak สำหรับ Arduino หรือคุณสามารถโพสต์ข้อมูลไปยัง ThingSpeak API ได้โดยตรง
  • ขั้นตอนต่อไปจะอธิบายอย่างละเอียดเกี่ยวกับการโพสต์เนื้อหาไปยัง Thing Speak API

ขั้นตอนที่ 7: รหัสสำหรับการโพสต์ข้อมูลไปยัง Thing Speak

รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ Thing Speak
รหัสสำหรับโพสต์ข้อมูลไปที่ 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

แนะนำ: