MQTT เป็นโปรโตคอลสื่อสารระหว่างอุปกรณ์ IoT ที่นิยมใช้กันมากในปัจจุบัน เนื่องจากข้อมูลที่รับ-ส่งบนเครือข่ายมีขนาดเล็ก ทำให้ใช้งานได้กับไมโครคอนโทรลเลอร์ที่มีแรมไม่มากได้อย่างรวดเร็ว ทำงานแบบ Real time ในทุกอุปกรณ์ เช่น เมื่อส่งข้อมูลจากแอพฯ ไปที่ MQTT ที่อุปกรณ์ (End-Device) จะได้รับข้อมูลเกือบจะทันที
การส่งข้อมูลระหว่างอุปกรณ์ผ่าน MQTT จำเป็นจะต้องอาศัยตัวกลาง เรียกว่า MQTT Broker โดยเมื่อมีอุปกรณ์ใหม่เข้ามาในระบบ MQTT Broker จะเป็นอนุญาต หรือ ไม่อนุญาตให้เชื่อมต่อ และมีหน้าที่ส่งต่อข้อมูลที่ได้รับจากอุปกรณ์หนึ่ง ไปยังอุปกรณ์หนึ่งด้วย
การตั้ง MQTT Broker ในอดีตนักพัฒนามักเลือกใช้ Eclipse Mosquitto แต่ด้วยข้อจำกัดหลายอย่างของ Mosquitto และความยุ่งยากในการใช้งาน ทำให้การจัดการอุปกรณ์ จัดการ Topic ต่าง ๆ ทำได้อยาก
ในบทความนี้เลือกนำเสนอ EMQX ซึ่งเป็น MQTT Broker ตัวใหม่มาแรง มีข้อดีสำคัญคือมีหน้าเว็บ (GUI) จัดการทุกอย่างได้หมด ตั้งแต่การรายงานจำนวนอุปกรณ์ที่เชื่อมต่ออยู่, จัดการ Username/Password, จัดการการส่งต่อข้อมูลไปยังบริการอื่น เช่น ฐานข้อมูล โดยเพียงกดใน GUI, จัดการระบบ API ที่ทำงานผ่าน HTTP เป็นต้น โดยบทความนี้จะเลือกติดตั้งลงใน Raspberry Pi 5 ใช้งานในลักษณะ Private MQTT Broker (ใช้งานได้เฉพาะในวงแลน/อุปกรณ์ทั้งหมดต้องอยู่ในเครือข่ายเดียวกัน)
ติดตั้ง OS, ตั้งค่าเชื่อมต่อเครือข่าย (WiFi/Ethernet) จากนั้นรีโมทผ่าน SSH เข้าไปจัดการ โดยแนะนำให้อ่านขั้นตอนดังกล่าวที่บทความ รู้จักและเริ่มต้นใช้งาน Raspberry Pi 5 คอมพิวเตอร์บอร์ดเดียว (Single-board computer)
SSH เข้าไปที่ Raspberry Pi จากนั้นส่งคำสั่งดังนี้
1. Download the EMQX repository (ผู้เขียนไม่แน่ใจว่าจะแปลประโยคนี้อย่างไร 😅)
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
2. ติดตั้ง EMQX ผ่าน apt-get
sudo apt-get install emqx
3. สั่งให้ EMQX เริ่มทำงาน
sudo systemctl start emqx
4. ดูสถานะ EMQX
systemctl status emqx
หากติดตั้งสำเร็จ จะขึ้นดังรูป
เข้าไปที่ลิ้ง http://<IP>:18083 (แทน <IP> ด้วยหมายเลข IP ของ Raspberry Pi) หน้าเว็บสำหรับจัดการจะขึ้นมา การใช้งานครั้งแรก ให้ Login ด้วยข้อมูลดังนี้
Login ครั้งแรก ระบบจะให้เปลี่ยนรหัสผ่านเพื่อความปลอดภัย ให้กรอกรหัสผ่านใหม่ในช่องที่ 1 และ 2 จากนั้นกดปุ่ม Confirm
หน้าภาพรวม (Dashboard) จะแสดงขึ้นมา ดังรูป
สร้างกลไก (Mechanism) การยืนยันตัวตน (Authentication) ด้วยฐานข้อมูลภายในดังนี้
1. กดเข้าไปที่เมนู Authentication
2. กดปุ่ม Create มุมบนขวา
3. ระบบจะให้เลือกกลไก (Mechanism) ที่ใช้ยืนยันตัวตน โดยแต่ละตัวเลือกแต่กต่างกันดังนี้
4. เลือกฐานข้อมูลที่ใช้เก็บข้อมูลการใช้ยืนยันตัวตน บทความนี้เลือกใช้ฐานข้อมูลภายใน จึงเลือก Build-in Database
5. กำหนดค่าต่าง ๆ ตามรูป แล้วกด Create
ผลที่ได้ หน้า Authentication จะมี Built-in Database ขึ้นมา (ดังรูป)
สร้าง Username และ Password ของ MQTT (Username/Password ที่อุปกรณ์ใช้ในขั้นตอนเชื่อมต่อ MQTT) ตามขั้นตอนดังนี้
1. กดที่ปุ่ม User
2. กดปุ่ม Add
3. ตั้ง Username และ Password ที่ต้องการ แล้วกด Save
ผลที่ได้ มี Username ที่สร้างไว้แสดงขึ้นมา (ดังรูป)
ทดสอบใช้โปรแกรม MQTTX เชื่อมต่อตามขั้นตอนดังนี้
ใส่ข้อมูลดังนี้
หากเชื่อมต่อสำเร็จ จะมีข้อความ Connected ขึ้น (ดังรูป)
การรับข้อมูลจาก Topic ใด ๆ เป็นต้อง Subscribe ก่อน มีขั้นตอนดังนี้
1. กด New Subscription
2. ใส่ Topic ที่ต้องการ Subscribe (ตัวอย่าง /led) แล้วกด Confirm
3. Topic ที่ Subscribe อยู่ จะแสดงขึ้นมา (ดังรูป)
ที่ EMQX ทดสอบเชื่อมต่อ รับ-ส่งข้อมูลผ่าน MQTT โดยใช้ WebSocket ดังนี้
1. กดไปที่เมนู WebSocket Client
2. กรอก Username และ Password ที่ได้สร้างไว้ แล้วกด Connect
3. หากเชื่อมต่อสำเร็จ ปุ่ม Connect จะเปลี่ยนเป็น Disconnect (ดังรูป)
4. Subscribe ไปที่ Topic ที่ต้องการรับข้อมูล โดยกรอก Topic แล้วกด Subscribe
ที่โปรแกรม MQTTX ทดสอบส่งข้อมูลเข้าไปที่ Topic ที่กำหนด (ตัวอย่าง /led) (1) ใส่ข้อมูลที่ต้องการส่ง (Payload) (2) แล้วกดปุ่มส่ง (3)
ที่โปรแกรม MQTTX จะขึ้นข้อมูลที่รับได้จากการ Subscribe (กรอบด้านซ้าย) และข้อมูลที่ส่ง (กรอบสีเขียวด้านขวา) ดังรูป
ที่ EMQX หัวข้อ Received จะเห็นข้อมูลที่ Subscribe ไว้ (/led) ขึ้นมาแล้ว
EMQX มีความสามารถอีกหลายอย่างให้ใช้งานผ่าน UX/UI ได้ เช่น การตั้งกฏการส่งข้อมูลใน Topic เพื่อไม่ให้ User มองเห็นข้อมูลใน Topic บาง Topic ได้, การส่งต่อข้อมูลจาก MQTT ไปยังฐานข้อมูลต่าง ๆ อัตโนมัติ, การยืนยันตัวตนโดยใช้ API เป็นต้น หากมีโอกาศจะแนะนำให้รู้จักในบทความถัดไป ๆ สำหรับบทความนี้จะแนะนำเบื้องต้นก่อน แล้วเจอกันใหม่ในบทความต่อไป
~ สวัสดีครับ ~