MQTT คืออะไร
MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium
Message Queuing Telemetry Transport (MQTT) เป็น Protocol ที่ออกแบบมาเพื่อเชื่อมต่อแบบ machine-to-machine (M2M) สนับสนุนเทคโนโลยี iot (Internet of Things) เนื่องจากตัว Protocolมีน้ำหนักที่เบาเหมาะกับอุปกรณ์ขนาดเล็กใช้
หลักการทำงานของ MQTT คล้ายกับหลักการที่ใช้ใน Web Service คือใช้หลักการแบบ publisher / subscriber และใช้ตัวกลางที่เรียกว่า Broker เพื่อทำหน้าที่ จัดการคิว รับ — ส่ง ข้อมูลระหว่างอุปกรณ์ และทั้งในส่วนที่เป็น Publisher และ Subscriber
เราจะพอมองเห็นภาพแล้วว่า MQTT เป็น Protocol ที่เหมาะสมในงานเกี่ยวกับ iot และ MQTT Broker ที่ให้บริการอยู่ก็มีหลายเจ้า เช่น cloundmqtt, anto, hivemq หรือว่าอยากจะติดตั้ง MQTT Broker เองก็ได้ เพราะตัว MQTT เองเป็น Open source สามารถนำมาติดตั้งและ ปรับแต่งเองได้เช่น Mosquitto
สรุปองค์ประกอบของ MQTT
Broker : ทำหน้าที่เป็นตัวกลางคอยจัดการกับข้อมูลต่างๆโดย อ้างอิงจาก Topic
Publisher : ทำหน้าที่คอยส่งข้อมูลไปยัง Topic ที่กำหนด
Subscriber : ทำหน้าที่คอยรับข้อมูลจจาก Topic ที่กำหนด
การออกแบบ MQTT Topic
การออกแบบ Topic ของ MQTT ให้มีความสัมพันธ์กับข้อมูลที่ส่ง เป็นอีกเรื่องที่สำคัญ โดยหลักการออกแบบง่ายๆ ก็คือ
/<Micro_controller>_<Order>/<Sensor_type/Variable_name>
เช่น /ESP32_1/Temp ก็คือ Topic ของ ESP32 ตัวที่ 1 ข้อมูลที่ส่งหรือรับคือ ข้อมูล อุณหภูมิ
รู้จักกับเครื่องมือที่จะใช้กันก่อน
- CloudMQTT
MQTT Broker ที่มาพร้อมกับ WebSocket UI ที่จะช่วยให้คุณทดสอบระบบได้ง่ายยิ่งขึ้น
- MQTTLens
ดาวน์โหลดได้จาก https://chrome.google.com/webstore/detail/mqttlens/hemojaaeigabkbcookmlgmdigohjobjm?hl=en
เป็น chrome extension ที่ช่วยให้คุณสามารถดูข้อมูลที่ส่งผ่าน MQTT ได้เลยผ่าน chrome
สร้าง MQTT Broker กัน
เมื่อเราลงเครื่องมือต่างๆพร้อมแล้วขั้นตอนต่อไปเพื่อเริ่มใช้งาน MQTT เราต้องมี Broker ก่อน Broker ที่เราจจะเลือกใช้ในครั้งนี้ก็คือ CloudMQTT
เข้าเว็บ CloudMQTT ที่ https://www.cloudmqtt.com/
เลื่อนลงมาแล้วคลิ๊ก Get a managed IoT broker today
จากนั้นให้เลื่อนลงมาข้างล่างแล้วเลือก Cute Cat (ฟรี ไม่เสียค่าใช้จ่าย)
จากนั้นก็จะขึ้นหน้าให้ล็อคอิน ถ้าต้องการผูกไอดีไว้กับ google หรือ github ก็สามารถทำได้ที่หน้านี้เลย ถ้าไม่มี ID ทั้ง 2 อย่างนี้ให้คลิกที่ Sign Up แล้วสมัครสมาชิกให้เรียบร้อย
ให้กรอกข้อมูลลงไปทั้งหมด 2 ช่องคือ ชื่อของ Broker ของเราและ Tags เพื่อบ่งบอกว่า Broker ของเราจะใช้กับงานประเภทอะไร (กรอกหรือไม่ก็ได้) จากนั้นให้กดปุ่มสีเขียว (Select Region) ที่ด้านล่างมุมขวา
หน้านี้เป็นหน้าต่างเลือกที่ตำแหน่งที่ตั้งของ Broker ในหน้านี้ให้กด Review ได้เลยเพราะไม่มี Broker อยู่ในโซนเอเชีย จึงไม่จำเป็นต้องเลือก(เลือกอะไรใกล้ๆก็ได้)
จากนั้นจะปรากฏหน้าต่างให้เราตรวจดูอีกครั้งว่าข้อมูลต่างๆถูกต้องหรือไม่ หากถูกต้องให้กด Create Instance ได้เลยหากไม่ให้กด Back เพื่อกลับไปแก้ไขอีกครั้ง
เมื่อทำการสร้างสำเร็จ Broker ก็จะปรากฏขึ้นบนหน้าเว็บของเรา โดยให้เราคลิกที่ Broker ที่เราพึ่งทำการสร้างเพื่อเริ่มต้นใช้งาน
โดยจะปรากฏข้อมูลต่างๆของ Broker ของเรานั้นเอง
ใน CloudMQTT เรามีหน้าที่จะใช้อยู่ 3 หน้าคือ
Detail ในหน้า detail จะประกอบไปด้วยข้อมูลทางความปลอดภัยต่างๆ แต่ข้อมูลที่เราจะใช้กันบ่อยๆคือ Server, Port,Connection limit(เพราะว่ามันฟรีดูดีๆนะ)
Websocket UI เป็นส่วนของการดูว่ามีข้อมูล (Message) และหัวข้อ (Topic) ใดบ้างที่กำหนดรับ-ส่งอยู่บน Broker ของเราและเรายังสามารถส่งข้อความจากบนเว็บไปยัง Topic ที่เรากำหนดได้
Connections ส่วนของเช็คว่ามีอุปกรณ์อะไรกำลังเชื่อมต่อกับ Broker ของเราเพราะแบบฟรีมันจำกัดแค่ 5 อุปกรณ์ ถ้าเกินกว่านี้อุปกรณ์ที่เข้ามาทีหลังจะเข้าไม่ได้
ตอนนี้ Broker เราก็พร้อมใช้งาน มาลองทดสอบกัน เราจะทดสอบโดยใช้ Websocket UI กับ MQTTLens
ทดสอบ MQTT Broker กับ MQTTLens
ลง MQTTLens ใน chrome ให้เรียบร้อยตามลิ้งด้านล่างเลย
ลงเรียบร้อยและ เปิด MQTTLens เราจะเห็นหน้าตาแบบนี้ ให้คลิ๊ก เครื่องหมายบวก ที่ Connections
จะเห็นหน้าต่างตั้งค่าแบบนี้ ส่วนที่สำคัญคือ Hostname, Port, Username, Password
- Connection name : ชื่อของ Connections ตั้งอะไรก็ได้
- Hostname : ให้เลือก tcp:// แล้ว Url มาจาก หน้า Details ของ CloudMQTT
- Port : Port จาก Details ของ CloudMQTT
- Username / Password : สร้างใน CloudMQTT หน้า Users and ACL ตามที่ต้องการได้เลย ( อย่าลืมรหัสนะ มันกดดูไม่ได้ )
ACLs หน้าที่ให้ Permissions แก่ Topic ต่าง ( ต้องกำหนดก่อนถึงจะรับส่งได้ )
เมื่อเราใส่ค่าไปหมดแล้วหน้าตาของหน้าตั้งค่าจะออกมาหน้าตาประมาณนี้
กำหนด Topic ที่จะใช้สื่อสารคือ /ESP32_1/Test (/ESP32_1/# ไปตั้งค่าใน ACLs ของ CloudMQTT ก่อนนะ) จะใช้ Topic นี้ในการ Subscribe และ Publish กับ CloudMQTT WebSocket UI
กด Publish แล้วมาเปิด WebSocket UI ใน CloudMQTT มาดูกันว่าได้รับข้อความ “Hello From MQTTLens” ไหม
ลองส่งข้อมูลกลับมาบ้าง แต่ก่อน ต้องกด Subscribe ใน MQTTLens ก่อนนะ
เราจะเห็นข้อความเพิ่มเข้ามาใน MQTTLens แล้ว
เป็นยังไงกันบ้างครับ การใช้ MQTT แบบเบื้องต้น พอจะเข้าใจ MQTT กันบ้างไหมในบทความหน้าเราจะนำเอา MQTT มารับส่งบน M5GO กัน รอติดตามกันนะ