สารบัญ:

UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว: 6 ขั้นตอน
UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว: 6 ขั้นตอน

วีดีโอ: UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว: 6 ขั้นตอน

วีดีโอ: UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว: 6 ขั้นตอน
วีดีโอ: NodeMCU (ESP32) + Firebase Realtime Database 2024, พฤศจิกายน
Anonim
UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว
UbiDots-การเชื่อมต่อ ESP32 และการเผยแพร่ข้อมูลเซ็นเซอร์หลายตัว

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 และ UbiDots Credentials
ให้ 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
  • ตัวกำหนดเวลางาน

แนะนำ: