- MQTT Protocol คืออะไร?
- MQTT ทำงานอย่างไร
- นายหน้า Eclipse Mosquitto
- ส่วนประกอบที่จำเป็น
- วงจรทดสอบ Eclipse MQTT - แผนผัง
- การเขียนโปรแกรม ESP8266 เพื่อสร้างการสื่อสารกับโบรกเกอร์
- ทดสอบ MQTT ด้วย ESP8266 โดยใช้ Arduino
ในช่วงไม่กี่ปีที่ผ่านมาอุปกรณ์IoT (Internet of Things)ได้กลายเป็นส่วนหนึ่งในชีวิตประจำวันของเราอย่างแยกไม่ออก ตั้งแต่บ้านอัจฉริยะหลอดไฟอัจฉริยะไปจนถึงเครื่องใช้ไฟฟ้าอัจฉริยะ ครีเอเตอร์และนักพัฒนากำลังผสมผสานเทคโนโลยีนี้เพื่อสร้างเครือข่ายอุปกรณ์เชื่อมต่อที่ทำให้ชีวิตประจำวันของเราน่าตื่นเต้นขึ้นเล็กน้อย ทั้งหมดนี้เกิดขึ้นได้เนื่องจากความสะดวกในการสื่อสาร มีวิธีการที่เป็นไปได้มากในการสื่อสารระหว่างอุปกรณ์ แต่ในผลิตภัณฑ์ในเชิงพาณิชย์และงานอดิเรกเป็นโปรโตคอลเดียวที่เป็นที่นิยมใช้คือการจัดคิวข้อความ Telemetry ขนส่ง (MQTT) ก่อนหน้านี้เราได้สร้างวิทยุ FM ที่ควบคุมด้วยเสียงโดยใช้ Arduino และ Google Assistant ที่ใช้ MQTT เพื่อสื่อสารกับบอร์ด NodeMCU ตรวจสอบว่าสิ่งนั้นน่าสนใจสำหรับคุณหรือไม่
ในโครงการนี้เราจะใช้ฟรีและเป็นที่นิยมนายหน้าคราส MQTTและเรียนรู้วิธีการเชื่อมต่ออุปกรณ์ IOT (ในกรณีของเราก็โมดูล NodeMCU) เพื่อข้อมูลนายหน้าและการถ่ายโอน MQTT ในหมู่นายหน้า MQTT และ NodeMCU
MQTT Protocol คืออะไร?
ก่อนที่เราจะดำเนินการใด ๆ ต่อไปมันจะดีกว่าที่จะมีความคิดที่ชัดเจนเกี่ยวกับMQTT (จัดคิวข้อความ Telemetry ขนส่ง) โปรโตคอลเป็นโปรโตคอลการส่งข้อความที่มีน้ำหนักเบาซึ่งใช้วิธีการเผยแพร่ / สมัครสมาชิกและแปลข้อความระหว่างอุปกรณ์หลายเครื่อง ด้วยการใช้โปรโตคอล MQTT เรายังสามารถส่ง / รับข้อมูลและควบคุมอุปกรณ์เอาต์พุตต่างๆเช่นอ่านข้อมูลเซ็นเซอร์เป็นต้นได้รับการพัฒนาบน TCP ซึ่งเป็นสาเหตุที่เร็วกว่าโปรโตคอลที่คล้ายกันเช่น HTTP นอกจากนั้นยังมีข้อดีอื่น ๆ อีกมากมายที่เหนือกว่าโปรโตคอลอื่น ๆ เช่นมีน้ำหนักเบามากดังนั้นจึงไม่ใช้หน่วยความจำส่วนเกินสามารถทำงานได้โดยใช้แบนด์วิดท์เครือข่ายน้อยมากนอกจากนี้ยังมีโปรโตคอลความปลอดภัยที่มีอยู่ในตัว คุณสมบัติเหล่านี้ทำให้เหมาะสำหรับการใช้งานจำนวนมาก
MQTT ทำงานอย่างไร
เพื่อให้เข้าใจการทำงานของโปรโตคอล MQTT เราต้องเข้าใจสามสิ่งพื้นฐาน แผนภาพด้านบนแสดงให้เห็นว่า นอกจากนี้เราได้อธิบายไว้ด้านล่างในบทความ
ลูกค้า MQTT:
ลูกค้า MQTTเป็นอุปกรณ์ใด ๆ (มันอาจจะเป็นไมโครคอนโทรลเลอร์หรือเซิร์ฟเวอร์) ที่ทำงานฟังก์ชั่น MQTT และติดต่อสื่อสารกับเซิร์ฟเวอร์กลางซึ่งเป็นที่รู้จักในฐานะ“ นายหน้า.” นายหน้าจัดการการสื่อสารข้อมูลระหว่างไคลเอนต์ที่เชื่อมต่อ
สำนักพิมพ์ MQTT:
เมื่อลูกค้าต้องการส่งข้อมูลใด ๆ ลูกค้าเรียกว่า“ ผู้เผยแพร่” สำนักพิมพ์จะเผยแพร่ข้อมูลในหัวข้อใดหัวข้อหนึ่ง “ หัวข้อ ” เป็นเส้นทางที่เราสามารถเผยแพร่ / สมัครรับข้อความ จากนั้นโบรกเกอร์จะส่งข้อมูลที่เผยแพร่โดยผู้ใช้ไปยังลูกค้า (หรือที่เรียกว่าSubscriber) ที่สมัครรับหัวข้อเฉพาะนั้น
สมาชิก MQTT:
MQTT สมาชิก สมัครสมาชิกหัวข้อบน MQTT นายหน้าในการอ่านข้อความที่ส่งมาจากนายหน้า
นายหน้า Eclipse Mosquitto
Eclipse Mosquittoเป็นโบรกเกอร์ MQTT แบบโอเพ่นซอร์สซึ่งมีน้ำหนักเบาและเหมาะสำหรับใช้กับอุปกรณ์ IoT เพื่อการสื่อสาร โปรโตคอล MQTTมีวิธีการที่มีน้ำหนักเบาของการถ่ายโอนข้อมูลโดยใช้เผยแพร่ / สมัครรุ่น หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับหัวข้อนี้คุณสามารถเยี่ยมชมเว็บไซต์อย่างเป็นทางการของยุง
การตั้งค่านายหน้า Eclipse Mosquitto:
ในการสร้างการสื่อสารกับนายหน้าเราจำเป็นต้องตั้งค่าก่อน ในโครงการนี้แอปพลิเคชัน Android ใช้เพื่อเผยแพร่และสมัครรับข้อมูลกับนายหน้า ขั้นตอนต่อไปนี้จะช่วยให้คุณทราบขั้นตอนการตั้งค่าได้ดีขึ้น
ขั้นตอนที่ 1:
ก่อนอื่นให้ดาวน์โหลดแอปพลิเคชัน“ ไคลเอนต์ MQTT” ที่มีอยู่ใน Google Play Store / App Store และติดตั้ง ในโปรเจ็กต์นี้มีการใช้แอพพลิเคชั่นชื่อ“ ไคลเอนต์ MQTT”ซึ่งมีลักษณะดังภาพด้านล่าง
ขั้นตอนที่ 2:
คลิกที่เครื่องหมาย“ +” เพื่อแสดงตัวเลือกเพิ่มเติมในแอปพลิเคชันซึ่งเราจะเพิ่มโบรกเกอร์ใหม่ เมื่อคลิกปุ่มหน้าจอใหม่จะปรากฏขึ้นดังภาพด้านล่าง
ขั้นตอนที่ 3:
หลังจากนั้นจะต้องกรอกรายละเอียดของนายหน้าในช่องที่กำหนด ขั้นแรกให้คลิกที่ตัวเลือก“ เปิดใช้งาน” ที่แสดงในแอปพลิเคชัน ในโปรเจ็ก ต์นี้ใช้โบรกเกอร์ Eclipse MQTTรายละเอียดที่จะต้องกรอกมีดังต่อไปนี้:
ชื่อเล่น:ตั้งชื่อตามที่คุณต้องการ
โฮสต์: mqtt.eclipse.org
ท่าเรือ: 1883
รหัสลูกค้า:ระบุรหัสที่คุณต้องการ
รายละเอียดข้างต้นจะต้องกรอกในฟิลด์ที่เกี่ยวข้อง ช่องอื่น ๆ ทั้งหมดไม่จำเป็นและสามารถเว้นว่างได้ หลังจากทำสำเร็จให้คลิกปุ่มบันทึกเพื่อบันทึกรายละเอียดนายหน้า
เมื่อเสร็จแล้วขั้นตอนการตั้งค่าแอปพลิเคชัน Android จะสิ้นสุดลงและตอนนี้เราสามารถไปยังด้านฮาร์ดแวร์
ส่วนประกอบที่จำเป็น
รายการชิ้นส่วนที่จำเป็นทั้งหมดได้อธิบายไว้ด้านล่าง เนื่องจากวงจรนี้เรียบง่ายคุณสามารถค้นหาชิ้นส่วนที่จำเป็นทั้งหมดได้ที่ร้านขายอุปกรณ์งานอดิเรกในพื้นที่ของคุณ
- NodeMCU
- LED
- เขียงหั่นขนม
- การเชื่อมต่อสายไฟ
- สายเคเบิลโปรแกรม
วงจรทดสอบ Eclipse MQTT - แผนผัง
แผนภาพวงจรสำหรับโครงการ MQTT พื้นฐานแสดงไว้ด้านล่าง:
การเขียนโปรแกรม ESP8266 เพื่อสร้างการสื่อสารกับโบรกเกอร์
รหัส Arduinoง่ายๆจะดูแลการสื่อสารที่จำเป็นทั้งหมดระหว่างโบรกเกอร์ MQTT และ NodeMCU ในส่วนนี้เราจะเรียนรู้วิธีการทำงานของฟังก์ชันนี้โดยละเอียด
ตั้งค่า Arduino IDE และอัปโหลดรหัส:
หากคุณอัปโหลดโค้ดไปยังNodeMCUเป็นครั้งแรกคุณต้องตั้งค่าArduino IDEก่อน โดยทำตามคำแนะนำง่ายๆด้านล่าง
ก่อนเปิด Arduino IDE แล้วไปที่File-> Preferences-> การตั้งค่า
จากนั้นคัดลอก URL ด้านล่างและวางลงใน ฟิลด์ " URLของBoard Manager เพิ่มเติม " แล้วคลิก "ตกลง" คุณสามารถตรวจสอบภาพด้านล่างเพื่อทราบว่าเราได้ดำเนินการอย่างไร
ลิงก์:
จากนั้นไปที่ เครื่องมือ> คณะกรรมการ> ผู้จัดการบอร์ด ในหน้าต่าง Board's Manager พิมพ์ ESP 8266ในช่องค้นหาและกด Enter จากนั้นเลือกเวอร์ชันล่าสุดจากเมนูแบบเลื่อนลงและคลิกที่ติดตั้ง ภาพด้านล่างจะให้แนวคิดที่ชัดเจน
สุดท้ายเมื่อการติดตั้งเสร็จสิ้นให้ไปที่ Tools -> Board -> แล้วเลือก NodeMCU 1.0 (ESP-12E Module) ตอนนี้คุณสามารถตั้งโปรแกรม NodeMCU ด้วย Arduino IDE ได้แล้ว เมื่อเราตั้งค่า Arduino IDE เสร็จแล้วเราก็สามารถอัปโหลดโค้ดทั้งหมดได้แล้ว แต่ก่อนอื่นให้อ่านคำอธิบายสั้น ๆ เกี่ยวกับโค้ดทั้งหมด
ประการแรกเราได้รวม “ ESP8266WiFi.h” สำหรับการใช้ ESP8266 และ “ PubSubClient.h” สำหรับ MQTT
คุณสามารถค้นหาไลบรารี ESP8266 ที่สร้างไว้ล่วงหน้าภายในไลบรารี Arduino แต่คุณต้องดาวน์โหลดไลบรารี PubSubClient จากที่เก็บ GitHub ที่เกี่ยวข้อง
# รวม
จากนั้นกำหนดข้อมูลรับรองเครือข่ายเช่นชื่อผู้ใช้และรหัสผ่าน Wi-Fi ของคุณ แทนที่ข้อมูลรับรองของคุณแทน“ ผู้ดูแลระบบ” และ“ 12345678” ตามลำดับ
const ถ่าน * ssid = "ผู้ดูแลระบบ"; const ถ่าน * รหัสผ่าน = "12345678";
ต่อไปเราจะต้องกำหนดค่าเซิร์ฟเวอร์ MQTT เราได้ใช้เซิร์ฟเวอร์ Eclipse MQTT สำหรับโปรเจ็กต์นี้ซึ่งเป็นสาเหตุที่กำหนดแอดเดรสเซิร์ฟเวอร์เป็น “ mqtt.eclipse.org” แต่ถ้าคุณวางแผนที่จะใช้เซิร์ฟเวอร์อื่นเช่น Mosquitto, Adafruit คุณสามารถแทนที่ด้วยที่อยู่เซิร์ฟเวอร์และหมายเลขพอร์ตเฉพาะของคุณได้
const ถ่าน * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
จากนั้นอินสแตนซ์จะถูกสร้างขึ้นสำหรับคลาส WiFiClient และ PubSubClient ซึ่งจะถูกใช้ตลอดทั้งโปรแกรม
WiFiClient espClient; ไคลเอนต์ PubSubClient (espClient);
ในส่วนการ ตั้งค่า () เราเรียก WiFi.begin () ก่อนการเรียกวิธีนี้จะเชื่อมต่อ ESP กับ HotSpot ที่คุณต้องการ
WiFi.begin (ssid รหัสผ่าน);
ต่อไปเราจะตรวจสอบการเชื่อมต่อเครือข่ายที่ประสบความสำเร็จโดยใช้ WiFi.status () วิธีการ หลังจากการเชื่อมต่อสำเร็จข้อความจะถูกพิมพ์บน Serial Monitor พร้อม SSID ของเครือข่ายที่เชื่อมต่อ
ในขณะที่ (WiFi.status ()! = WL_CONNECTED) {ล่าช้า (500); Serial.println ("กำลังเชื่อมต่อกับ WiFi.. "); } Serial.print ("เชื่อมต่อกับ WiFi:"); Serial.println (WiFi.SSID ());
ตอนนี้เราต้องสร้างโบรกเกอร์ ด้วยเหตุนี้เราจึงใช้เมธอด setServer วิธีนี้รับสองอาร์กิวเมนต์ซึ่งเราได้กำหนดไว้ล่วงหน้าก่อนหน้านี้ ตอนนี้ถ้าเราต้องการรับข้อความจากเซิร์ฟเวอร์เราจำเป็นต้องสร้างฟังก์ชันโทรกลับ เพื่อที่เราจะใช้ setCallback (โทรกลับ) วิธีการ
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
ตอนนี้เราได้ใช้ฟังก์ชัน connect (clientID) เพื่อเชื่อมต่อกับไคลเอนต์ ESP8266 ที่นี่clientIDคือชื่อของไคลเอ็นต์และต้องไม่ซ้ำกัน หากมีการเชื่อมต่อข้อความแสดงความสำเร็จจะแสดงขึ้นภายในมอนิเตอร์แบบอนุกรม
ถ้า (client.connect ("ESP8266")) {Serial.println ("connected"); } else {Serial.print ("failed with state") Serial.println (client.state ()); ล่าช้า (2000); }
ต่อไปเราเรียกว่า client.subscribe () ซึ่งเป็นฟังก์ชัน MQTT ในตัวซึ่งใช้เพื่อสมัครสมาชิกหัวข้อใดหัวข้อหนึ่ง สำหรับโครงการนี้เราได้ใช้“ esp / test ” เป็นชื่อสมาชิกของเรา
client.subscribe ("esp / test");
ขณะนี้ฟังก์ชัน MQTTcallback ถูกเรียกใช้เพื่อตรวจสอบว่ามีข้อมูลที่อัปเดตแล้วหรือไม่ หากมีข้อมูลใหม่ฟังก์ชันนี้จะจัดการข้อมูลที่ได้รับและพิมพ์ข้อความในมอนิเตอร์แบบอนุกรมพร้อมข้อความต้นฉบับและชื่อหัวข้อที่ได้รับข้อความ
ต่อไปเราจะแปลงข้อความเป็นสตริงเพื่อให้สามารถเปรียบเทียบและตรวจสอบการกระทำที่เรียกใช้ ในโปรเจ็กต์นี้ LED จะเปิด / ปิดโดยใช้คำสั่ง MQTT ดังแสดงในโค้ดด้านล่าง
สำหรับ (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (ข้อความ); ถ้า (ข้อความ == "เปิด") {digitalWrite (LED, HIGH); }
สุดท้ายเพื่อเผยแพร่ข้อมูลในหัวข้อ client.publish () ฟังก์ชั่นถูกนำมาใช้ ในโปรเจ็กต์นี้จะมีการตรวจสอบสถานะปุ่มกดหากกดปุ่มข้อความจะถูกเผยแพร่ไปยังหัวข้อ“ esp / test1 ” ดังที่แสดงด้านล่าง
ถ้า (digitalRead (D1) == 0)) {client.publish ("esp / test1", "สวัสดีจาก ESP8266"); } อื่น ๆ; client.loop ();
ทดสอบ MQTT ด้วย ESP8266 โดยใช้ Arduino
สำหรับการทดสอบขั้นสุดท้ายเราจะใช้แอปพลิเคชัน Android ซึ่งเราได้ตั้งค่าไว้ก่อนหน้านี้
เปิดแอปพลิเคชันไคลเอนต์ MQTT และตรวจสอบให้แน่ใจว่ามือถือของคุณมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้ นอกจากนี้ฮอตสปอตที่เชื่อมต่อกับ NodeMCU ควรมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้ เมื่อทุกอย่างเชื่อมต่อกับอินเทอร์เน็ตแล้วเราจะส่งสตริง“ สวัสดีจาก ESP8266”จากโมดูล ESP ซึ่งจะแสดงในแอป Android และเราจะได้รับการแจ้งเตือน ต่อไปเราจะส่งสตริงจากแอพ Android ซึ่งจะเปิด LED ที่เชื่อมต่อกับบอร์ด ESP8266 Node MCU
ขั้นตอนที่ 1: (สมัครสมาชิกหัวข้อ):
คลิกที่ตัวเลือก MQTT ที่บันทึกไว้บนแอปซึ่งเราได้กำหนดค่าไว้ก่อนหน้านี้ มันจะโผล่หน้าจอขึ้นมาพร้อมกับข้อความว่า“ สมัครสมาชิกหัวข้อ” ก่อนหน้านี้เราได้กำหนดค่าหัวข้อเป็น“ esp / test1 ” ดังนั้นในแอป Android เราจะเขียน“ esp / test1 ” คลิกที่สมัครเพื่อแสดงหน้าจอด้านล่างซึ่งจะเขียนว่า“ ไม่ได้รับข้อความ” จากหัวข้อนั้น ๆ
ตอนนี้คลิกปุ่ม 'เชื่อมต่อ' ซึ่งเชื่อมต่อกับ nodeMCU ตอนนี้ตามรหัสของเราข้อความ“ สวัสดีจาก ESP8266 ” จะเผยแพร่ไปยังหัวข้อและจะมีการแจ้งเตือนบนหน้าจอพร้อมข้อความที่ได้รับดังที่แสดงด้านล่าง
ขั้นตอนที่ 2: เผยแพร่ในหัวข้อ:
ตอนนี้เพื่อเผยแพร่ในหัวข้อคลิกที่ปุ่มลูกศรขึ้นของแอปพลิเคชันและจะเปิดหน้าจอดังที่แสดงด้านล่าง
ตอนนี้ในช่องหัวข้อให้เขียน " esp / test " และในช่องข้อความเขียน " on " หรือ " off " เพื่อเปิดและปิด LED ตามลำดับ ตัวอย่างเช่นหากมีการเผยแพร่“ เปิด” ไปยังหัวข้อไฟ LED จะเปิดและหากมีการเผยแพร่ "ปิด" ไปที่หัวข้อไฟ LED จะปิด
ฉันหวังว่าคุณจะชอบบทความนี้และเรียนรู้สิ่งใหม่ ๆ หากคุณมีคำถามเกี่ยวกับบทความนี้โปรดอย่าลังเลที่จะแสดงความคิดเห็นด้านล่างหรือคุณสามารถใช้ฟอรัมของเราแทน