ปฐมบท MQTT

ปฐมบท MQTT

MQTT คืออะไร

        MQTT ย่อมาจาก Message Queuing Telemetry Transport เป็นโปรโตคอลสำหรับใช้ในสื่อสารข้อมูลระหว่าง Machine to Machine (M2M) ถูกคิดค้นขึ้นในปี ค.ศ. 1999 โดย Dr Andy Stanford-Clark จาก IBM และ Arlen Nipper จาก Arcom (now Eurotech) ออกแบบมาเพื่อใช้สื่อสารในระบบเครือข่ายที่มีทรัพยากรค่อนข้างจำกัด ใช้งานแบนด์วิธต่ำ สามารถ publish-subscribe ข้อมูลระหว่าง Device เพื่อสื่อสารกันระหว่างอุปกรณ์ และถ้ามองในด้านที่เกี่ยวกับ Internet of Things จะสามารถประยุกต์ให้อุปกรณ์ต่างๆเชื่อมต่อกันผ่านเครือข่ายของอินเทอร์เน็ตได้ ทำให้เราสามารถสร้างสรรค์โครงงานที่เกี่ยวกับการติดตามอุปกรณ์ เช่น มอนิเตอร์อุปกรณ์ผ่านอินเทอร์เน็ต ควบคุมอุปกรณ์ผ่านอินเทอร์เน็ต เป็นต้น

MQTT ประกอบด้วย 2 ส่วน คือ

– MQTT Client เป็นส่วน publish ข้อมูลต่างๆ ขึ้นไปยัง MQTT Broker และสามารถ Subscribe ข้อมูลต่างๆจาก MQTT Broker ผ่านทาง TCP/IP Protocol ถ้ามองในมุมมองของ Internet of Things (IoT) อุปกรณ์จำพวกนี้จะเป็น Device ที่สามารถเชื่อมต่อกับระบบเครือข่ายได้ เช่น บอร์ด Arduino Uno Wifi 2, Arduino MKR Wifi 1010, บอร์ด ESP32, บอร์ด ESP8266, บอร์ด Raspberry Pi, เว็ปไซต์, สมาร์ทโฟน

– MQTT Broker หรือ MQTT Server เป็นซอฟต์แวร์สำหรับรับข้อมูลจาก MQTT Client ที่ได้ publish เข้ามาและสามารถ publish ข้อมูลจาก MQTT Broker ไปยัง MQTT Client ที่ได้ Subscribe ข้อมูลไว้ได้ หากมองในมุมมองของ Internet of Things อุปกรณ์นี้อาจจะเป็น Cloud Server ของค่ายต่างๆ เช่น CloudMQTT, NETPIE, Azure, AWS เป็นต้น หรือใช้ Single Board Computer เช่นบอร์ด Raspberry Pi, LattePanda, Beagle Bone, nanoPi, อื่นๆ แล้วติดตั้งซอฟต์แวร์เพิ่มเติมก็สามารถใช้งานได้เช่นกัน

ตัวอย่างการสื่อสารเบื้องต้นของ MQTT (ในกรณีต้องการมอนิเตอร์ค่าของเซ็นเซอร์ผ่านมือถือ) มีขั้นตอนคร่าวๆ ดังนี้

1. กำหนดให้ Client Device ในตัวอย่างนี้จะเป็นสมาร์ทโฟน ทำการ Subscribe MQTT Broker ตาม Topic ที่ต้องการ ตัวอย่างนี้ติดตาม Topic “temp” ไว้

2. กำหนดให้ Client Device (Device ที่ต่อกับเซ็นเซอร์วัดอุณหภูมิ) แล้วทำการ Publish ค่าขึ้นไปยัง MQTT Broker

3. MQTT Broker Publish ไปยังอุปกรณ์ที่ Subscribe ไว้ ดังนั้นในตัวอย่างนี้สมาร์ทโฟนจะได้รับข้อมูลจาก Client ที่ต่ออยู่กับเซ็นเซอร์เรียบร้อย

        จากตัวอย่างการสื่อสารเบื้องต้นของ MQTT จะเห็นได้ว่าการสื่อสารระหว่างอุปกรณ์นั้นสามารถเชื่อมต่อกันได้อย่างกว้างขวาง ไม่จำกัดในเรื่องชนิดอุปกรณ์ว่าจำเป็นต้องเป็นอุปกรณ์ชนิดเดียวกัน สามารถสื่อสารกันได้หลากหลายแพลตฟอร์ม มีตัวอย่างการใช้งานสำหรับการพัฒนาโปรแกรมด้วยภาษาต่างๆ มากมายเช่น ภาษา C, Python และอื่นๆ ทำให้การเชื่อมต่อแบบ MQTT นี้น่าสนใจสำหรับการนำมาประยุกต์ใช้เป็นงานพอสมควร

ทดลองใช้งาน MQTT Broker

ในขั้นตอนนี้จะเป็นการแนะนำ การทดลองใช้งาน MQTT Broker ซึ่งปัจจุบันนั้นมีผู้ให้บริการ MQTT Broker อยู่หลากหลายผู้ให้บริการ หรือผู้ใช้งานจะตั้งเซิร์ฟเวอร์เองได้ เพื่อให้ง่ายแก่การทดลองตัวอย่างนี้จะขอแนะนำเป็นใช้งาน MQTT Broker ของ CloudMQTT ซึ่งมีให้ทดลองใช้บริการฟรีได้ 5 Clients ซึ่งเพียงพอต่อการทดลองใช้งานทั่วไป หากต้องการใช้งานเพิ่มเติมสามารถอัพเกรด เพิ่มเติม ได้ในภายหลัง

เริ่มต้นใช้งาน CloudMQTT

1. เริ่มต้นสมัครใช้งาน โดยสามารถสมัครได้ที่ https://www.cloudmqtt.com

2. หลังจากสร้าง Account สำเร็จแล้ว ขั้นต่อมาคือการสร้าง MQTT Server โดยให้คลิกที่ปุ่ม Create New Instance และตั้งค่าให้เรียบร้อย

3. ทดลอง pubish ข้อมูลจาก MQTT Broker โดยทำการใช้ “WEBSOCKET UI” ของ CloudMQTT

แค่นี้ก็สามารถ pubic ข้อมูลไปให้ Client ที่ทำการ subscribe MQTT Topic ได้แล้ว

ทดลองใช้งาน MQTT Client ด้วยการ pubic และ subscribe ด้วยสมาร์ทโฟน

        หลังจากการตั้งค่า MQTT Broker สำเร็จแล้ว ขั้นต่อมาคือการให้ Client ทำการ Publish และ Subscribe โดยในขั้นตอนนี้เราจะใช้สมาร์ทโฟน Android ทำ Publish และ Subscribe ด้วย Application บนมือถือก่อนเพื่อทดสอบว่า เราสามารถใช้งาน MQTT Broker ได้จริง

เข้าไปยัง Play Store

ค้นหา และทำการติดตั้ง Application “MQTT Dash”จากนั้นเปิด Application “MQTT Dash” ขึ้นมา

กดที่เครื่องหมาย +

ตั้งค่า MQTT Dash โดยอ้างอิงจาก Instance Info ของ CloudMQTT และบันทึกการตั้งค่า

– ตั้งชื่อ Dash 
– ใส่ Address ของ Server
– ใส่ Port ของ Server
– ใส่ User และ Password

เมื่อบันทึกสำเร็จจะปรากฎ Dashboard ที่เราสร้างขึ้น

กดเข้าไปใน Dashboard ที่เราสร้างขึ้นมา แล้วกดที่เครื่องหมาย +

จะปรากฎเมนูให้เราเลือกชนิดของตัวสั่งงานและตัวสร้างผลที่จะเอามาวางบน Dashboard ของเรา

ทดลองเลือก Range/progress เพื่อนำมาแสดงผล Topic “temp”

ตั้งชื่อของ Object และกำหนด Topic ที่จะให้นำมาแสดงผลยัง Object Range/progress นี้

– กำหนดค่า Max-Min ที่ต้องการแสดงผล 

– กำหนด Precision ให้แสดงทศนิยม 2 ตำแหน่ง

– เลือกสีของ progress ตามต้องการ

– Save การตั้งค่า

– จะปรากฎ Range/progress ที่เราสร้างขึ้น และสามารถแสดงค่า Temp ถูก Publish มาจาก Client หรือ Broker ได้

– สร้าง Range/progress เพิ่มเพื่อแสดงค่า Humidity โดยรับค่าจาก Topic “Humi”

– สร้าง Switch/Button เพื่อควบคุม LED

– ตั้งชื่อ Object 
– กำหนด Topic ที่ต้องการ Subscribe (ในที่นี้คือ Topic “led”) 
– เลือกเครื่องหมายถูกหน้า Enable publishing และถ้าหากไม่มีการกำหนด Topic ที่จะ Publish จะเป็นการนำเอา Topic ที่ Subscribe เอาไว้ในขั้นตอนที่ 2 มาเป็น Topic สำหรับ Publish แทน


– กำหนด Message เมื่อกด On และ Off 
– เลือกรูปที่ใช้เป็น Button ขณะ On/Off
– กำหนดสีของ Button ขณะ On/Off
– Save การตั้งค่า

– ทดลองกดที่ object Switch/Button ที่สร้างขึ้น และสังเกตุ Websocket ว่ามี message เข้ามาที่ Broker เรียบร้อยจากนั้น Broker ก็จะทำการ publish ไปยัง Client อื่นๆที่ subscribe ไว้ต่อไป

        จากตัวอย่างการสื่อสารการทดลอง pubic และ subscribe ด้วยสมาร์ทโฟนจะเห็นได้ว่า เราสามารถใช้งานสมาร์ทโฟน ใน pubic และ subscribe ข้อมูลได้ดังนั้นเราสามารถประยุกต์ใช้งานเป็นมอนิเตอร์อุปกรณ์ที่ได้ทำการ publish ข้อมูลออกมา หรือสามารถใช้งานเป็นสวิทต์ควบคุมการทำงานของอุปกรณ์ที่ subscribe topic ได้เช่นเดียวกัน และในทำนองเดียวกันเราสามารถใช้เว็บไซต์เช่น freeboard ไปผูกกับ MQTT Broker ที่ใช้เพื่อใช้งานเป็นมอนิเตอร์หรือสวิทต์ควบคุมการทำงานได้เช่นกัน

ข้อมูลขอบคุณข้อมูลจาก

– http://mqtt.org/

– https://en.wikipedia.org/wiki/MQTT