สารบัญ:

การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266: 9 ขั้นตอน
การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266: 9 ขั้นตอน

วีดีโอ: การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266: 9 ขั้นตอน

วีดีโอ: การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266: 9 ขั้นตอน
วีดีโอ: NodeMCU ESP8266 ส่งค่าอุณหภูมิและความชื้นไปเก็บใน Google Sheets อัตโนมัติ 2024, มิถุนายน
Anonim
การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266
การเชื่อมต่อเซ็นเซอร์ DHT11/DHT22 กับคลาวด์ด้วยบอร์ดที่ใช้ ESP8266

ในบทความที่แล้ว ฉันเชื่อมต่อบอร์ด NodeMCU ที่ใช้ ESP8266 กับบริการ Cloud4RPi ตอนนี้ก็ถึงเวลาสำหรับโครงการจริง!

เสบียง

ข้อกำหนดด้านฮาร์ดแวร์:

  • บอร์ดใดๆ ที่ใช้ชิป ESP8266 (เช่น NodeMCU)
  • เซ็นเซอร์ DHT11 หรือ DHT22

ซอฟท์แวร์และบริการ:

  • ไลบรารีเซ็นเซอร์ DHT โดย Adafruit - v1.3.7
  • Adafruit Unified Sensor - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - แผงควบคุมระบบคลาวด์สำหรับอุปกรณ์ IoT
  • PlatformIO IDE สำหรับ VSCode

ขั้นตอนที่ 1: วัดอุณหภูมิและความชื้น

วัดอุณหภูมิและความชื้น
วัดอุณหภูมิและความชื้น

ฉันมีเซ็นเซอร์ DHT11 อยู่แล้ว ฉันจึงตัดสินใจใช้เซ็นเซอร์นี้ในการวัดอุณหภูมิและความชื้น มาเลือกห้องสมุด Arduino เพื่ออ่านข้อมูลเซ็นเซอร์กันเถอะ

รีจิสทรี Arduino มีหลายไลบรารี ซึ่งฉันเลือกไลบรารีที่ได้รับความนิยมมากที่สุด

ตามที่เก็บ GitHub เราจำเป็นต้องเพิ่มแพ็คเกจ Adafruit Unified Sensor ด้วย

ขั้นตอนที่ 2: สร้างและกำหนดค่า Project

สร้างและกำหนดค่าโครงการ
สร้างและกำหนดค่าโครงการ

ฉันได้อธิบายวิธีสร้างโปรเจ็กต์ PlatformIO และติดตั้งไลบรารีไว้ในส่วนแรกแล้ว โครงการของฉันชื่อ “MyNodeMCU” โครงสร้างแสดงไว้ด้านบน

โปรเจ็กต์นี้เป็นตัวอย่าง Cloud4RPi ที่ดัดแปลงเล็กน้อย ฉันตัดสินใจจัดเก็บโทเค็นของอุปกรณ์และข้อมูลรับรอง Wi-Fi ในไฟล์การกำหนดค่าแทนโค้ด

ไฟล์ platform.io มีลักษณะดังนี้:

[platformio]default_envs = nodemcuv2[env:nodemcuv2] แพลตฟอร์ม = espressif8266 framework = บอร์ด Arduino = nodemcuv2

ขั้นตอนที่ 3: ติดตั้งไลบรารี

ติดตั้งไลบรารี
ติดตั้งไลบรารี

การติดตั้งไลบรารีค่อนข้างง่าย คุณสามารถทำได้จากอินเทอร์เฟซแบบกราฟิกของ IDE หรือโดยการเพิ่มชื่อไลบรารีที่จำเป็นลงในส่วน lib_deps ของไฟล์ platform.io:

; …lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor DHT เซ็นเซอร์ไลบรารี build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_NAME=\"ASS_YOUR\"_WID_PASS_YOUR\" D CLOUD4RPI_TOKEN=\"_YOUR_DEVICE_TOKEN_\"

ไลบรารีที่เพิ่มจะถูกติดตั้งโดยอัตโนมัติในโฟลเดอร์ย่อยของโปรเจ็กต์

ส่วนหัว main.cpp มีลักษณะดังนี้:

#รวม #รวม #รวม #รวม "DHT.h"

ขั้นตอนที่ 4: เชื่อมต่อเซ็นเซอร์ DHT11

Adafruit ให้ตัวอย่าง DHTtester.ino ของการเชื่อมต่อเซ็นเซอร์

รหัสนี้เริ่มต้นเซ็นเซอร์และกำหนดโครงสร้างเพื่อเก็บผลการวัด (ในกรณีที่สำเร็จ):

#define DHTPIN 2 // พินดิจิตอลที่เชื่อมต่อกับเซ็นเซอร์ DHT#define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.begin(); // … จัดโครงสร้าง DHT_Result { float h; ลอย t; }; DHT_Result dhtResult;

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

เป็นโมฆะ readSensors () { float h = dht.readHumidity (); // อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น) float t = dht.readTemperature();

// ตรวจสอบว่าการอ่านล้มเหลวและออกหรือไม่

ถ้า (isnan (h) || isnan (t)) { Serial.println (F ("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!")); กลับ; } dhtResult.h = h; dhtResult.t = t; }

ขั้นตอนที่ 5: การส่งข้อมูลไปยัง Cloud

เมื่อเราได้ข้อมูลนั้นแล้ว ขั้นตอนต่อไปคือการส่งไปยังบริการ Cloud4RPi

หน้า Cloud4RPi สำหรับ Arduino อธิบายไลบรารี API ซึ่งเป็นชุดของวิธีการที่ใช้เพื่อ:

  • สร้าง อ่าน และปรับปรุงตัวแปร
  • ส่งค่าตัวแปรไปยังระบบคลาวด์โดยใช้โปรโตคอล MQTT

ไลบรารีรองรับตัวแปรสามประเภท: Bool, Numeric และ String

เวิร์กโฟลว์ของไลบรารีเริ่มต้นด้วยการสร้างอินสแตนซ์ API โดยใช้ Device Token จากเว็บไซต์ cloud4rpi.io (ดูรายละเอียดในส่วนที่ 1 ของบทความ)

#if กำหนด (CLOUD4RPI_TOKEN) Cloud4RPi c4r (CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #endif

จากนั้นประกาศตัวแปรสำหรับการอ่าน DHT11:

c4r.declareNumericVariable("DHT11_Temp");c4r.declareNumericVariable("DHT11_Hum");

จากนั้น รับข้อมูลจากเซ็นเซอร์ บันทึกลงในตัวแปร และเผยแพร่ข้อมูลไปยัง Cloud4RPi:

c4r.setVariable("DHT11_Temp", dhtResult.t);c4r.setVariable("DHT11_Hum", dhtResult.h); c4r.publishData();

อุณหภูมิและความชื้นไม่เปลี่ยนแปลงอย่างรวดเร็ว ดังนั้นจึงไม่จำเป็นต้องส่งมากกว่าหนึ่งค่าใน 5 นาที

ขั้นตอนที่ 6: การวินิจฉัย

Cloud4RPi รองรับข้อมูลการวินิจฉัยพร้อมกับค่าตัวแปร ฉันใช้เวลาทำงาน ความแรงของสัญญาณ Wi-Fi และที่อยู่ IP เป็นข้อมูลการวินิจฉัย:

c4r.declareDiagVariable("IP_Address");c4r.declareDiagVariable("RSSI"); // ความแรงของสัญญาณ WiFi c4r.declareDiagVariable("Uptime");

หมายเหตุ: ฟังก์ชันมิลลิวินาทีที่ฉันใช้เพื่อรับการรีเซ็ตเวลาทำงานเป็นศูนย์ทุก ~50 วัน ซึ่งมากเกินพอสำหรับโครงการของฉัน

รหัสต่อไปนี้ตั้งค่าตัวแปรการวินิจฉัย:

c4r.setDiagVariable("RSSI", (String)WiFi. RSSI() + " dBm");c4r.setDiagVariable("IP_Address", WiFi.localIP().toString()); c4r.setDiagVariable ("Uptime", uptimeHumanReadable (currentMillis)); c4r.publishDiag();

ฟังก์ชัน uptimeHumanReadable แปลงมิลลิวินาทีเป็นรูปแบบที่สะดวก:

สตริง uptimeHumanReadable (มิลลิวินาทีแบบยาวที่ไม่ได้ลงนาม) { อักขระคงที่ uptimeStr [32]; วินาทียาวที่ไม่ได้ลงนาม = มิลลิวินาที / 1,000; unsigned long mins = วินาที / 60; ชั่วโมง int ที่ไม่ได้ลงนาม = นาที / 60; วัน int ที่ไม่ได้ลงนาม = ชั่วโมง / 24; วินาที -= นาที * 60; นาที -= ชั่วโมง * 60; ชั่วโมง -= วัน * 24; sprintf(uptimeStr, "%d วัน %2.2d:%2.2d:%2.2d", (ไบต์) วัน (ไบต์) ชั่วโมง (ไบต์) นาที (ไบต์) วินาที); ส่งคืนสตริง (uptimeStr); }

ฟังก์ชันจะแสดงผลสตริงเช่นนี้ 5 วัน 10:23:14 น. แทนที่จะเป็นตัวเลขขนาดใหญ่แปลก ๆ

ขั้นตอนที่ 7: เริ่มและดีบักโครงการ

เริ่มและดีบักโครงการ
เริ่มและดีบักโครงการ

หลังจากรวบรวมโค้ดที่สร้างและแฟลชลงใน NodeMCU แล้ว อุปกรณ์จะเชื่อมต่อกับบริการคลาวด์และเริ่มส่งข้อมูล

คุณสามารถเพิ่มความละเอียดของการบันทึกได้โดยการตั้งค่าตัวแปรตัวประมวลผลล่วงหน้า CLOUD4RPI_DEBUG เป็น 1 (เพิ่ม -D CLOUD4RPI_DEBUG=1 ลงในส่วน build_flags ในไฟล์ platform.io)

ถัดไป เปิดไซต์ cloud4rpi.io และสังเกตเห็นอุปกรณ์ใหม่ทางออนไลน์ เปิดเพื่อดูค่าตัวแปรทั้งหมดที่ได้รับจากอุปกรณ์: เซ็นเซอร์และการวินิจฉัย

ขั้นตอนที่ 8: การกำหนดค่าแดชบอร์ด

การกำหนดค่าแดชบอร์ด
การกำหนดค่าแดชบอร์ด

ในขั้นตอนนี้ การเชื่อมต่อข้อมูลกับระบบคลาวด์ใช้งานได้ ตอนนี้ มากำหนดค่าการแสดงข้อมูลด้วยภาพ

ฉันใช้ UI การกำหนดค่าแดชบอร์ดเพื่อสร้างแดชบอร์ดต่อไปนี้

แดชบอร์ดนั้นแชร์ได้ ฉันจึงแชร์กับเพื่อนทันที

ขั้นตอนที่ 9: สรุป

บทสรุป
บทสรุป

รหัสโครงการฉบับเต็มมีอยู่ในส่วนสำคัญ

นั่นคือทั้งหมดที่สำหรับตอนนี้!

ยินดีต้อนรับคำถามและข้อเสนอแนะในความคิดเห็น

แนะนำ: