สารบัญ:

Weather Web App โดยใช้ Esp8266: 7 ขั้นตอน
Weather Web App โดยใช้ Esp8266: 7 ขั้นตอน

วีดีโอ: Weather Web App โดยใช้ Esp8266: 7 ขั้นตอน

วีดีโอ: Weather Web App โดยใช้ Esp8266: 7 ขั้นตอน
วีดีโอ: Nodemcu Esp8266 Weather Application Using HTML, CSS and Js | M42 TECH 2024, พฤศจิกายน
Anonim
Weather Web App โดยใช้ Esp8266
Weather Web App โดยใช้ Esp8266

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 การเชื่อมต่อมีดังนี้

  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 ท้องถิ่น) ในการโทรกลับนี้
  • ในงาน 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
รหัสสำหรับโพสต์ข้อมูลไปที่ 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(); }

ขั้นตอนที่ 7: รหัสโดยรวม

รหัสโดยรวมมีอยู่ในที่เก็บ github ของฉัน

เครดิต:

  • Arduino JSON: ArduinoJson
  • ESP826เว็บเซิร์ฟเวอร์
  • ตัวกำหนดเวลางาน
  • SHT 31
  • I2C Scan
  • HIH6130 กวดวิชาสอน
  • สาย Arduino
  • NCD.io

แนะนำ: