สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์
- ขั้นตอนที่ 2: การสร้าง Captive Portal
- ขั้นตอนที่ 3: ระบุ WiFi และ UbiDots Credentials
- ขั้นตอนที่ 4: เผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots
- ขั้นตอนที่ 5: การแสดงภาพข้อมูล
- ขั้นตอนที่ 6: รหัสโดยรวม
วีดีโอ: UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
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
ขั้นตอนที่ 2: การสร้าง Captive Portal
พอร์ทัลแบบ Captive คือหน้าเว็บที่แสดงต่อผู้ใช้ที่เชื่อมต่อใหม่ก่อนที่จะได้รับสิทธิ์ในการเข้าถึงทรัพยากรเครือข่ายในวงกว้าง เราให้บริการหน้าเว็บสามหน้าเพื่อเลือกระหว่างการตั้งค่า DHCP และ IP แบบคงที่ เราสามารถกำหนดที่อยู่ IP ให้กับ ESP ได้สองวิธี
- ที่อยู่ IP DHCP- เป็นวิธีการกำหนดที่อยู่ IP ให้กับอุปกรณ์แบบไดนามิก ที่อยู่ IP เริ่มต้นของ ESP คือ 192.168.4.1
- ที่อยู่ IP แบบคงที่- กำหนดที่อยู่ IP ถาวรให้กับอุปกรณ์เครือข่ายของเรา เพื่อให้ IP แบบคงที่แก่อุปกรณ์ เราจำเป็นต้องกำหนดที่อยู่ IP ที่อยู่เกตเวย์ และซับเน็ตมาสก์
เว็บเพจแรกถูกโฮสต์อยู่ที่ 192.168.1.77 ที่นี่ผู้ใช้จะมีปุ่มตัวเลือกให้เลือกระหว่างการตั้งค่า DHCP และ IP แบบคงที่ ในหน้าเว็บถัดไป เราต้องให้ข้อมูลที่เกี่ยวข้องกับ IP เพื่อดำเนินการต่อไป
โค้ด HTML
โค้ด HTML สำหรับหน้าเว็บสามารถพบได้ในที่เก็บ Github คุณสามารถใช้ IDE หรือโปรแกรมแก้ไขข้อความ เช่น Sublime หรือ notepad++ เพื่อสร้างหน้าเว็บ HTML
- ขั้นแรก สร้างเว็บเพจ HTML ที่มีปุ่มตัวเลือกสองปุ่มเพื่อเลือกระหว่างการตั้งค่า DHCP และ IP แบบคงที่
- ตอนนี้สร้างปุ่มเพื่อส่งคำตอบของคุณ
- ตั้งชื่อปุ่มตัวเลือก
- คลาสเว็บเซิร์ฟเวอร์ ESP จะใช้ชื่อเหล่านี้เป็นอาร์กิวเมนต์และรับการตอบสนองของปุ่มตัวเลือกโดยใช้อาร์กิวเมนต์เหล่านี้
- ตอนนี้ให้ใส่ปุ่ม ' SUBMIT ' เพื่อส่งการตอบกลับไปยังอุปกรณ์ ในหน้าเว็บอื่นๆ เรามีกล่องข้อความ
- ระบุค่าชื่อและประเภทอินพุตให้กับกล่องข้อความและเพิ่มปุ่มส่งไปที่ ' SUBMIT ' ส่งคำตอบ
- สร้างปุ่ม ' RESET ' เพื่อรีเซ็ตเนื้อหาของฟิลด์ข้อความ
ขั้นตอนที่ 3: ระบุ WiFi และ UbiDots Credentials
ปัญหาหลักเกิดขึ้นขณะจัดการข้อมูลรับรอง WiFi ถึงแม้ว่าเราจะมีห้องสมุด WiFiMulti สำหรับที่ซึ่งเราสามารถให้ SSID และรหัสผ่านหลายอันกับอุปกรณ์ได้ และอุปกรณ์จะเชื่อมต่อกับเครือข่ายที่พร้อมใช้งาน แต่ถ้าเครือข่ายไม่อยู่ในรายการ WiFiMulti การกะพริบอุปกรณ์ ESP32 ตลอดเวลาไม่ใช่วิธีแก้ปัญหาที่เชื่อถือได้
เพื่อแก้ไขปัญหานี้ เรากำลังโฮสต์หน้าเว็บที่ผู้ใช้สามารถส่ง SSID และรหัสผ่านของเครือข่ายที่ใช้งานได้ มันทำงานดังนี้
- เว็บเพจโฮสต์อยู่ที่ IP แบบคงที่หรือ DHCP IP ตามที่ผู้ใช้เลือกจากพอร์ทัลแบบ Captive
- หน้าเว็บนี้มีฟิลด์ข้อความสำหรับป้อน SSID รหัสผ่าน และรหัสโทเค็น UBIDOTS เพื่อเชื่อมต่ออุปกรณ์กับ UbiDots
- ป้อน SSID และรหัสผ่านของ WiFi ในพื้นที่ของคุณในช่องป้อนข้อมูล ป้อนรหัสโทเค็นของ UbiDot และป้อน SUBMIT
- ข้อมูลประจำตัวเหล่านี้ถูกบันทึกไว้ใน EEPROM. ของ ESP32
- หลังจาก 60 วินาที อุปกรณ์จะตัดการเชื่อมต่อจาก AP. โดยอัตโนมัติ
- ครั้งถัดไปเมื่อคุณเปิดอุปกรณ์ ผู้ใช้ไม่ต้องทำตามขั้นตอนนี้ อุปกรณ์จะดึงข้อมูลรับรองผู้ใช้จาก EEPROM โดยอัตโนมัติและเผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots ต่อไป
ขั้นตอนที่ 4: เผยแพร่การอ่านเซ็นเซอร์ไปยัง UbiDots
ที่นี่เราใช้เซ็นเซอร์วัดอุณหภูมิและความชื้นแบบไร้สายกับอุปกรณ์ ESP 32 เพื่อรับข้อมูลอุณหภูมิและความชื้น เรากำลังส่งข้อมูลไปยัง UbiDots โดยใช้โปรโตคอล MQTT MQTT ปฏิบัติตามกลไกการเผยแพร่และสมัครรับข้อมูลแทนที่จะเป็นคำขอและการตอบสนอง เร็วกว่าและเชื่อถือได้มากกว่า HTTP นี้ทำงานดังนี้
- เรากำลังใช้ Task Scheduler เพื่อกำหนดเวลางาน เช่น การดึงข้อมูลจากเซ็นเซอร์ การเผยแพร่การอ่านเซ็นเซอร์ การสมัครหัวข้อ MQTT
- ขั้นแรก ให้รวมไฟล์ส่วนหัวของ Task Scheduler เป็นอินสแตนซ์และกำหนดเวลางาน
- เราได้จัดกำหนดการงานไว้สองงานโดยอ้างอิงถึงการดำเนินการควบคุมสองแบบที่แตกต่างกัน
#define _TASK_TIMEOUT#รวม
กำหนดการ 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 ไบต์จากเซ็นเซอร์อุณหภูมิและความชื้นไร้สาย เฟรมนี้ได้รับการจัดการเพื่อรับข้อมูลอุณหภูมิและความชื้นจริง
ข้อมูล uint8_t[29];
data[0] = Serial1.read(); ล่าช้า (k); //chck สำหรับไบต์เริ่มต้น if(data[0]==0x7E) { while (!Serial1.available()); สำหรับ (i = 1; i< 29; i++) { data = Serial1.read(); ล่าช้า(1); } if(data[15]==0x7F) /////// เพื่อตรวจสอบว่าข้อมูลที่ได้รับนั้นถูกต้องหรือไม่ { if(data[22]==1) //////// ตรวจสอบให้แน่ใจว่าประเภทเซ็นเซอร์ ถูกต้อง {
ความชื้น = ((((ข้อมูล[24])) * 256) + ข้อมูล[25]) /100.0); ความชื้น /=10.0; cTempint = (((uint16_t)(data[26])<<8)| ข้อมูล[27]); cTemp = (ลอย) cTempint /100.0; cTemp /= 10.0; fTemp = cTemp * 1.8 + 32; fTemp /= 10.0; แบตเตอรี่ = สุ่ม (100, 327); แรงดันไฟฟ้า = แบตเตอรี่/100; nodeId = ข้อมูล[16];}
กำลังเชื่อมต่อกับ UbiDots MQTT API
รวมไฟล์ส่วนหัวสำหรับกระบวนการ MQTT
#รวม
กำหนดตัวแปรอื่น ๆ สำหรับ MQTT เช่น ชื่อลูกค้า ที่อยู่นายหน้า รหัสโทเค็น (เรากำลังดึงรหัสโทเค็นจาก EEPROM)
#define MQTT_CLIENT_NAME "ClientVBShightime123"
ถ่าน mqttBroker = "things.ubidots.com";
เพย์โหลดถ่าน[100];หัวข้อถ่าน[150];
//สร้างตัวแปรเพื่อเก็บ token ID
สตริง tokenId;
สร้างตัวแปรเพื่อเก็บข้อมูลเซนเซอร์ต่างๆ และสร้างตัวแปร 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
ขั้นตอนที่ 5: การแสดงภาพข้อมูล
- ไปที่ Ubidots และลงชื่อเข้าใช้บัญชีของคุณ
- ไปที่แดชบอร์ดจากแท็บข้อมูลที่แสดงด้านบน
- ตอนนี้คลิกไอคอน "+" เพื่อเพิ่มวิดเจ็ตใหม่
- เลือกวิดเจ็ตจากรายการและเพิ่มตัวแปรและอุปกรณ์
- ข้อมูลเซ็นเซอร์สามารถมองเห็นได้บนแดชบอร์ดโดยใช้วิดเจ็ตต่างๆ
ขั้นตอนที่ 6: รหัสโดยรวม
โค้ด Over สำหรับ HTML และ ESP32 มีอยู่ในที่เก็บ GitHub นี้
เครดิต
- บอร์ดฝ่าวงล้อม ncd ESP32
- ncd อุณหภูมิไร้สายและเซ็นเซอร์ความชื้น
- ไคลเอนต์สาธารณะ
- UbiDots
- ตัวกำหนดเวลางาน
แนะนำ:
Ubidots + ESP32- การตรวจสอบเครื่องทำนาย: 10 ขั้นตอน
Ubidots + ESP32- Predictive Machine Monitoring: การวิเคราะห์การทำนายการสั่นและอุณหภูมิของเครื่องโดยการสร้างเหตุการณ์อีเมลและบันทึกการสั่นใน Google ชีตโดยใช้ Ubidots การบำรุงรักษาเชิงคาดการณ์และการตรวจสอบสภาพเครื่องจักรการเพิ่มขึ้นของเทคโนโลยีใหม่ เช่น อินเทอร์เน็ตของสรรพสิ่ง อุตสา
IoT- Ubidots- ESP32+Long-Range-Wireless-Vibration-And-Temperature-Sensor: 7 ขั้นตอน
IoT- Ubidots- ESP32+Long-Range-Wireless-Vibration-And-Temperature-Sensor: Vibration เป็นการเคลื่อนไหวหรือการสั่นของเครื่องจักรและส่วนประกอบในอุปกรณ์ขับเคลื่อนด้วยมอเตอร์อย่างแท้จริง การสั่นสะเทือนในระบบอุตสาหกรรมอาจเป็นอาการหรือเหตุจูงใจของความยุ่งยาก หรืออาจเกี่ยวข้องกับการทำงานประจำวัน ตัวอย่างเช่น osci
Esp32-Ubidots-Wireless-long-range อุณหภูมิและความชื้น: 6 ขั้นตอน
Esp32-Ubidots-Wireless-long-range Temperature-And-Humidity: ในบทช่วยสอนนี้ เราจะวัดข้อมูลอุณหภูมิและความชื้นต่างๆ โดยใช้เซ็นเซอร์อุณหภูมิและความชื้น คุณจะได้เรียนรู้วิธีส่งข้อมูลนี้ไปยัง Ubidots เพื่อให้คุณสามารถวิเคราะห์ได้จากทุกที่สำหรับการใช้งานที่แตกต่างกัน
เริ่มต้นใช้งาน ESP32 - การติดตั้งบอร์ด ESP32 ใน Arduino IDE - ESP32 Blink Code: 3 ขั้นตอน
เริ่มต้นใช้งาน ESP32 | การติดตั้งบอร์ด ESP32 ใน Arduino IDE | รหัสการกะพริบของ ESP32: ในคำแนะนำนี้ เราจะดูวิธีการเริ่มทำงานกับ esp32 และวิธีการติดตั้งบอร์ด esp32 ลงใน Arduino IDE และเราจะตั้งโปรแกรม esp 32 เพื่อเรียกใช้โค้ดกะพริบโดยใช้ arduino ide
การสร้าง-การแจ้งเตือน-การใช้-Ubidots+ESP32 และเซ็นเซอร์การสั่นสะเทือน: 8 ขั้นตอน
การสร้าง-การแจ้งเตือน-การใช้-Ubidots+ESP32 และเซ็นเซอร์การสั่นสะเทือน: ในโครงการนี้ เราจะสร้างการแจ้งเตือนทางอีเมลเกี่ยวกับการสั่นสะเทือนและอุณหภูมิของเครื่องโดยใช้เซ็นเซอร์การสั่นของ Ubidots และ ESP32 การสั่นสะเทือนเป็นการเคลื่อนไหวแบบไปๆ มาๆ - หรือการสั่น - ของ เครื่องจักรและส่วนประกอบในอุปกรณ์ขับเคลื่อนด้วยมอเตอร์ การสั่นสะเทือน ฉัน