สารบัญ:

การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT: 7 ขั้นตอน
การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT: 7 ขั้นตอน

วีดีโอ: การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT: 7 ขั้นตอน

วีดีโอ: การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT: 7 ขั้นตอน
วีดีโอ: สอนวิธีการติดตั้ง และตั้งค่า เพรสเซอร์สวิตช์ สำหรับปั้มน้ำหอยโข่ง (Pressure Switch) 2024, กรกฎาคม
Anonim
การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT
การเผยแพร่ข้อมูลเพรสเชอร์เซนเซอร์แบบไร้สายโดยใช้ MQTT

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
กำลังเชื่อมต่อกับ WiFi
กำลังเชื่อมต่อกับ WiFi
กำลังเชื่อมต่อกับ WiFi

เรากำลังใช้แคปทีฟพอร์ทัลเพื่อบันทึกข้อมูลรับรอง WiFi และเลื่อนเมาส์ผ่านการตั้งค่า IP สำหรับคำแนะนำโดยละเอียดเกี่ยวกับแคปทีฟพอร์ทัล คุณสามารถอ่านคำแนะนำต่อไปนี้ได้

พอร์ทัลแบบ Captive ช่วยให้เราเลือกระหว่างการตั้งค่าแบบคงที่และ DHCP เพียงป้อนข้อมูลประจำตัว เช่น IP แบบคงที่ Subnet Mask เกตเวย์ และ Wireless Sensor Gateway จะได้รับการกำหนดค่าบน IP นั้น

กำลังโฮสต์หน้าเว็บซึ่งมีรายการแสดงเครือข่าย WiFi ที่พร้อมใช้งานและมี RSSI เลือกเครือข่าย WiFi และรหัสผ่านและป้อนส่ง ข้อมูลประจำตัวจะถูกบันทึกไว้ใน EEPROM และการตั้งค่า IP จะถูกบันทึกไว้ใน SPIFFS ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถพบได้ในคำแนะนำนี้

ขั้นตอนที่ 4: การตั้งค่า UbiDots บน ESP32

การตั้งค่า UbiDots บน ESP32
การตั้งค่า 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

เผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots
เผยแพร่การอ่านเซ็นเซอร์ไปยัง 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
  • ตัวกำหนดเวลางาน

แนะนำ: