สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์
- ขั้นตอนที่ 2: เซ็นเซอร์ความดันและอุณหภูมิแบบไร้สาย
- ขั้นตอนที่ 3: การเชื่อมต่อกับ WiFi
- ขั้นตอนที่ 4: การตั้งค่า UbiDots บน ESP32
- ขั้นตอนที่ 5: เผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots
- ขั้นตอนที่ 6: การแสดงภาพข้อมูล
- ขั้นตอนที่ 7: รหัสโดยรวม
วีดีโอ: การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ESP32 และ ESP 8266 เป็น SoC ที่คุ้นเคยมากในด้าน IoT สิ่งเหล่านี้เป็นประโยชน์สำหรับโครงการ IoT ESP 32 เป็นอุปกรณ์ที่มี WiFi และ BLE ในตัว เพียงแค่ให้การกำหนดค่า SSID รหัสผ่านและ IP ของคุณและรวมสิ่งต่าง ๆ เข้ากับคลาวด์ ในคำแนะนำนี้ เราจะพิจารณาเงื่อนไขพื้นฐานบางอย่างของ IoT เช่น แพลตฟอร์ม IoT, MQTT, พอร์ทัลแบบ Captive เป็นต้น ให้เราดำเนินการต่อไป
- สถาปัตยกรรม IoT พูดง่ายๆ ว่าประกอบด้วยอุปกรณ์ฝังตัวและแพลตฟอร์ม IoT เพื่อวางอุปกรณ์ไว้ในระบบคลาวด์ ที่นี่เราใช้แพลตฟอร์ม UbiDots IoT เพื่อแสดงภาพข้อมูลเซ็นเซอร์
- การจัดการการตั้งค่า IP และข้อมูลรับรองผู้ใช้อาจทำให้ผู้ใช้ปวดหัวได้ จะเกิดอะไรขึ้นหากผู้ใช้ต้องการเปลี่ยนข้อมูลรับรอง WiFi จะเกิดอะไรขึ้นหากผู้ใช้ต้องการเปลี่ยนการตั้งค่า DHCP/Static IP? การกระพริบ ESP32 ทุกครั้งไม่น่าเชื่อถือและไม่ใช่แม้แต่วิธีแก้ปัญหาเหล่านี้ ดังนั้น เราจะดำเนินการผ่านพอร์ทัลแบบ Captive เพื่อบันทึกข้อมูลรับรอง WiFi และการกำหนดค่าอื่นๆ
- MQTT กำลังกลายเป็นคำที่ใช้กันทั่วไปในโลก IoT มันเกินคำขอและการตอบสนอง (HTTP) โดย Publish และ Subscribe เนื่องจากสถาปัตยกรรมที่รวดเร็ว แข็งแกร่ง และมีประสิทธิภาพ
ในคำแนะนำนี้เราจะสาธิต
- มอบข้อมูลรับรอง WiFi และ MQTT โดยใช้ Captive Portal
- เผยแพร่และสมัครรับข้อมูลเซ็นเซอร์หลายตัวไปยัง UbiDots
- การอ่านข้อมูลเซ็นเซอร์จากเซ็นเซอร์ความดันและอุณหภูมิแบบไร้สาย
- การโฮสต์เว็บฟอร์มจาก ESP32
- การอ่านและการเขียนจาก SPIFFS ESP32
ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์
ข้อกำหนดฮาร์ดแวร์
- ESP32 WiFi/BLE
- เซ็นเซอร์ความดันและอุณหภูมิแบบไร้สาย
ข้อกำหนดซอฟต์แวร์
- Arduino IDE
- XCTU
- ยูทิลิตี้ Labview
ขั้นตอนที่ 2: เซ็นเซอร์ความดันและอุณหภูมิแบบไร้สาย
คุณสมบัติ
- เซนเซอร์ระดับอุตสาหกรรม เซนเซอร์วัดอุณหภูมิความดันแบบไร้สายระยะไกล
- ช่วงการทำงาน 0 ถึง 14000 mbar -40° ถึง +85°C (-40° ถึง 185°F)
- คำนวณแรงดันภายในที่กำหนดค่าได้ ความละเอียด 0.012 ถึง 0.065 mbar
- กำหนดความละเอียดในการคำนวณภายในได้ 0.002 ถึง 0.012 °C
- ความแม่นยำ ±2.5 mbar, ±2 °C
- แรงดันสัมบูรณ์ แรงดันสัมพัทธ์ และการเปลี่ยนแปลงระดับความสูงสัมพัทธ์
- ระยะสายตา 2 ไมล์พร้อมเสาอากาศในตัว
- ช่วง LOS ที่เหนือกว่าถึง 28 ไมล์พร้อมเสาอากาศกำลังสูง
- อินเทอร์เฟซสำหรับ Raspberry Pi, Microsoft® Azure®, Arduino และอื่นๆ
- เครือข่ายไร้สายแบบเมชโดยใช้DigiMesh®
การกำหนดค่าเซ็นเซอร์ความดันและอุณหภูมิแบบไร้สายโดยใช้ Labview Utility และ XCTU
เซนเซอร์ทำงานในสองโหมด
- โหมดการกำหนดค่า: กำหนดค่า Pan ID, ความล่าช้า, จำนวนการลองใหม่ ฯลฯ เพิ่มเติมเกี่ยวกับสิ่งนี้อยู่นอกเหนือขอบเขตของคำแนะนำนี้และจะอธิบายในคำแนะนำต่อไป
- โหมดรัน: เรากำลังใช้งานอุปกรณ์ในโหมดรัน และเพื่อวิเคราะห์ค่าเหล่านี้ เรากำลังใช้ Labview Utility
Labview UI นี้แสดงค่าเป็นกราฟที่ดี แสดงค่าปัจจุบันและค่าในอดีต คุณสามารถไปที่ลิงค์นี้เพื่อดาวน์โหลด Labview UI คลิกที่ไอคอนเรียกใช้จากเมนูหน้า Landing Page เพื่อไปที่โหมดการทำงาน
ขั้นตอนที่ 3: การเชื่อมต่อกับ WiFi
เรากำลังใช้แคปทีฟพอร์ทัลเพื่อบันทึกข้อมูลรับรอง WiFi และเลื่อนเมาส์ผ่านการตั้งค่า IP สำหรับคำแนะนำโดยละเอียดเกี่ยวกับแคปทีฟพอร์ทัล คุณสามารถอ่านคำแนะนำต่อไปนี้ได้
พอร์ทัลแบบ Captive ช่วยให้เราเลือกระหว่างการตั้งค่าแบบคงที่และ DHCP เพียงป้อนข้อมูลประจำตัว เช่น IP แบบคงที่ Subnet Mask เกตเวย์ และ Wireless Sensor Gateway จะได้รับการกำหนดค่าบน IP นั้น
กำลังโฮสต์หน้าเว็บซึ่งมีรายการแสดงเครือข่าย WiFi ที่พร้อมใช้งานและมี RSSI เลือกเครือข่าย WiFi และรหัสผ่านและป้อนส่ง ข้อมูลประจำตัวจะถูกบันทึกไว้ใน EEPROM และการตั้งค่า IP จะถูกบันทึกไว้ใน SPIFFS ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ในคำแนะนำนี้
ขั้นตอนที่ 4: การตั้งค่า UbiDots บน ESP32
ที่นี่เราใช้เซ็นเซอร์ความดันและอุณหภูมิแบบไร้สายกับอุปกรณ์ ESP 32 เพื่อรับข้อมูลอุณหภูมิและความชื้น เรากำลังส่งข้อมูลไปยัง UbiDots โดยใช้โปรโตคอล MQTT MQTT ปฏิบัติตามกลไกการเผยแพร่และสมัครรับข้อมูลแทนที่จะเป็นคำขอและการตอบสนอง เร็วกว่าและเชื่อถือได้มากกว่า HTTP นี้ทำงานดังนี้
- เรากำลังใช้ Task Scheduler เพื่อกำหนดเวลางาน เช่น การดึงข้อมูลจากเซ็นเซอร์ การเผยแพร่การอ่านเซ็นเซอร์ การสมัครหัวข้อ MQTT
- ขั้นแรก ให้รวมไฟล์ส่วนหัวของ Task Scheduler เป็นอินสแตนซ์และกำหนดเวลางาน
- เราได้จัดกำหนดการงานไว้สองงานโดยอ้างอิงถึงการดำเนินการควบคุมสองแบบที่แตกต่างกัน
#define _TASK_TIMEOUT#include ตัวกำหนดเวลา ts; //--------- งาน ------------// งาน tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); งาน tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);
- ภารกิจที่ 1 ใช้สำหรับอ่านค่าเซ็นเซอร์ งานนี้ทำงานเป็นเวลา 1 วินาทีจนกว่าจะหมดเวลา 10 วินาที
- เมื่อ Task1 หมดเวลา เรากำลังเชื่อมต่อกับนายหน้า Wifi และ MQTT ในพื้นที่
- ตอนนี้เปิดใช้งาน Task 2 และเรากำลังปิดการใช้งาน Task 1
- งานที่ 2 ใช้สำหรับเผยแพร่ข้อมูลเซ็นเซอร์ไปยังโบรกเกอร์ UbiDots MQTT งานนี้ทำงานเป็นเวลา 20 วินาทีจนกว่าจะหมดเวลา 20 วินาที
- เมื่อ Task2 หมดเวลา งาน 1 จะถูกเปิดใช้งานอีกครั้งและ Task2 ถูกปิดใช้งาน ที่นี่อีกครั้ง เราได้รับค่าที่อัปเดตและดำเนินการต่อไป
การอ่านข้อมูลเซ็นเซอร์ I2C
เราได้รับเฟรม 29 ไบต์จากเซ็นเซอร์อุณหภูมิและความชื้นไร้สาย เฟรมนี้ได้รับการจัดการเพื่อให้ได้ข้อมูลอุณหภูมิและความชื้นจริง
ถ้า (Serial1.available())
{ data[0] = Serial1.read(); ล่าช้า (k); if(data[0]==0x7E) { ในขณะที่ (!Serial1.available()); สำหรับ (i = 1; i< 36; i++) { data = Serial1.read(); ล่าช้า(1); } if(data[15]==0x7F) /////// เพื่อตรวจสอบว่าข้อมูลที่ได้รับนั้นถูกต้องหรือไม่ { if(data[22]==0x06) //////// ตรวจสอบให้แน่ใจว่าประเภทเซ็นเซอร์ ถูกต้อง { int cTemp = ((((data [24]) * 256) + data [25])); int16_t abs_pressure = ((((uint16_t)(data[26])<<8)| data[27])*0.001); int rlt_pressure = ((((ข้อมูล[28])) * 256) + ข้อมูล[29])*0.001); int16_t delta_alt = ((((uint16_t)(data[30])<<8)| data[31])*0.01); แบตเตอรี่ลอย = ((ข้อมูล [18] * 256) + ข้อมูล [19]); แรงดันไฟลอย = 0.00322 * แบตเตอรี่; Serial.print("หมายเลขเซนเซอร์"); Serial.println (ข้อมูล [16]); Serial.print("ประเภทเซนเซอร์"); Serial.println(ข้อมูล[22]); Serial.print ("เวอร์ชันเฟิร์มแวร์"); Serial.println (ข้อมูล [17]); Serial.print("อุณหภูมิในเซลเซียส:"); Serial.print(cTemp); Serial.println("C"); Serial.print("ความดันสัมบูรณ์:"); Serial.println(abs_pressure); Serial.print("mbar"); Serial.print("ความดันสัมพัทธ์:"); Serial.println(rlt_pressure); Serial.print("mbar"); Serial.print("ระดับความสูงเดลต้า:"); Serial.println (delta_alt); Serial.print("เมตร"); Serial.print("ค่า ADC:"); Serial.println (แบตเตอรี่); Serial.print("แรงดันแบตเตอรี่:"); Serial.print (แรงดันไฟฟ้า); Serial.println("\n"); ถ้า (แรงดันไฟฟ้า < 1) { Serial.println ("ถึงเวลาเปลี่ยนแบตเตอรี่"); } } }อื่น{ สำหรับ (i = 0; i< 36; i++) { Serial.print(data); Serial.print(", "); ล่าช้า(1); }} } }
กำลังเชื่อมต่อกับ UbiDots MQTT API
รวมไฟล์ส่วนหัวสำหรับกระบวนการ MQTT
#รวม
กำหนดตัวแปรอื่นๆ สำหรับ MQTT เช่น ชื่อลูกค้า ที่อยู่นายหน้า ID โทเค็น
#define TOKEN "BBFF-************************************" // Ubidots TOKEN ของคุณ #define MQTT_CLIENT_NAME "****************************"
ถ่าน mqttBroker = "things.ubidots.com";
เพย์โหลดถ่าน[100]; หัวข้อถ่าน[150]; //สร้างตัวแปรเพื่อเก็บ token ID toke
ขั้นตอนที่ 5: เผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots
สร้างตัวแปรเพื่อเก็บข้อมูลเซนเซอร์ต่างๆ และสร้างตัวแปร char เพื่อจัดเก็บหัวข้อ
#define VARIABLE_LABEL_TEMPF "tempF" // กำหนดป้ายกำกับตัวแปร#define VARIABLE_LABEL_TEMPC "tempC" // กำหนดป้ายกำกับตัวแปร #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // กำหนดป้ายกำกับตัวแปร
หัวข้อถ่าน1[100];
ถ่าน หัวข้อ2[100]; หัวข้อถ่าน3[100];
เผยแพร่ข้อมูลไปยังหัวข้อ MQTT ที่กล่าวถึง payload จะมีลักษณะดังนี้ { "tempc": {value: "tempData"}}
sprintf(หัวข้อที่ 1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(เพย์โหลด, "%s", ""); // ทำความสะอาด payload sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // เพิ่มค่า sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // เพิ่มค่า sprintf(payload, "%s}", payload); // ปิดวงเล็บพจนานุกรม Serial.println(payload); Serial.println(client.publish(topic1, payload) ? "published": "notpublished"); //ทำแบบเดียวกันกับหัวข้ออื่นด้วย
client.publish() เผยแพร่ข้อมูลไปยัง UbiDots
ขั้นตอนที่ 6: การแสดงภาพข้อมูล
- ไปที่ Ubidots และลงชื่อเข้าใช้บัญชีของคุณ
- ไปที่แดชบอร์ดจากแท็บข้อมูลที่แสดงด้านบน
- ตอนนี้คลิกไอคอน "+" เพื่อเพิ่มวิดเจ็ตใหม่
- เลือกวิดเจ็ตจากรายการและเพิ่มตัวแปรและอุปกรณ์
- ข้อมูลเซ็นเซอร์สามารถมองเห็นได้บนแดชบอร์ดโดยใช้วิดเจ็ตต่างๆ
ขั้นตอนที่ 7: รหัสโดยรวม
รหัส Over สำหรับ HTML และ ESP32 สามารถพบได้ในที่เก็บ GitHub นี้
เครดิต
- บอร์ดฝ่าวงล้อม ncd ESP32
- ncd เซ็นเซอร์ความดันและอุณหภูมิแบบไร้สาย
- ไคลเอนต์สาธารณะ
- UbiDots
- ตัวกำหนดเวลางาน
แนะนำ:
MQTT Mood Lights พร้อม ESP32: 4 ขั้นตอน (พร้อมรูปภาพ)
MQTT Mood Lights พร้อม ESP32: ฉันถูกล่อลวงมาเป็นเวลานานแล้วที่จะกระโดดขึ้นไปบนแถบ LED ดังนั้นฉันจึงวิ่งออกไปหยิบแถบ LED ขึ้นมาเพื่อเล่น ฉันลงเอยด้วยการสร้างแสงอารมณ์เหล่านี้ สามารถควบคุมได้ด้วย MQTT ทำให้สามารถเพิ่มสมาร์ทได้ทุกประเภท นี่คือ
เครื่องวัดอุณหภูมิสระว่ายน้ำ MQTT: 7 ขั้นตอน (พร้อมรูปภาพ)
ตัวตรวจสอบอุณหภูมิสระว่ายน้ำ MQTT: โปรเจ็กต์นี้เป็นโครงการร่วมกับโครงการ Home Automation อื่นๆ ของฉัน ตัวควบคุมไกเซอร์บันทึกข้อมูลอัจฉริยะ (Geyser Controller) บันทึกข้อมูลอัจฉริยะ และระบบควบคุมแสงสว่างในห้องอเนกประสงค์และเครื่องใช้ไฟฟ้า เป็นจอภาพติดริมสระที่วัดอุณหภูมิน้ำในสระ อากาศแวดล้อม
MQTT บนบอร์ด Armtronix: 3 ขั้นตอน
MQTT บนบอร์ด Armtronix: ในคำแนะนำนี้ เราต้องการแสดงให้คุณเห็นว่าคุณสามารถใช้ระบบที่ใช้ Linux (Debian หรือ Ubuntu) ได้อย่างไร และติดตั้ง Mosquitto (Mqtt Broker) บนนั้น แสดงวิธีใช้ไคลเอ็นต์ Mqtt บนโทรศัพท์ของคุณ ( Android)/ ระบบที่ใช้ Linux การส่งและ
เซ็นเซอร์ประตูและล็อคโรงเก็บของที่ใช้แบตเตอรี่ Solar, ESP8266, ESP-Now, MQTT: 4 ขั้นตอน (พร้อมรูปภาพ)
เซ็นเซอร์ประตูและตัวล็อคโรงเก็บของที่ใช้แบตเตอรี่ Solar, ESP8266, ESP-Now, MQTT: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันสร้างเซ็นเซอร์ที่ใช้พลังงานจากแบตเตอรี่เพื่อตรวจสอบสถานะประตูและล็อคของโรงรถจักรยานระยะไกลของฉันได้อย่างไร ฉันไม่มีไฟหลัก ดังนั้นฉันจึงใช้พลังงานจากแบตเตอรี่ แบตเตอรี่ถูกชาร์จโดยแผงโซลาร์เซลล์ขนาดเล็ก โมดูลนี้เ
การสื่อสารไร้สาย SmartHome: พื้นฐานขั้นสูงสุดของ MQTT: 3 ขั้นตอน
การสื่อสารไร้สาย SmartHome: พื้นฐานขั้นสูงของ MQTT: ข้อมูลพื้นฐาน MQTT: **ฉันกำลังจะทำซีรีส์ Home Automation ฉันจะทำตามขั้นตอนต่างๆ ที่ฉันทำเพื่อเรียนรู้ทุกสิ่งที่ฉันทำในอนาคต คำแนะนำนี้เป็นพื้นฐานในการตั้งค่า MQTT สำหรับใช้ใน Instructables ในอนาคตของฉัน อย่างไรก็ตาม