Posted 16 Oct 2020 15:08 | 19,687 views
MQTT เป็น Protocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (Machine-to-machine) คือ อุปกรณ์ติดต่อหรือสื่อสารกับอุปกรณ์ โดยเป็นส่วนหนึ่งของเทคโนโลยี IoT (Internet of Things) ซึ่งเป็นเทคโนโลยีที่อินเตอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่างๆ
MQTT สำหรับระบบ IoT นั้น การติดต่อสู่ Internet นั้นเป็นสิ่งสำคัญอย่างยิ่ง เพราะอินเทอเน็ตทำให้อุปกรณ์ IoT ต่างๆ สามารถติดต่อสื่อสารและแลกเปลี่ยนข้อมูลกันได้ MQTT (Message Queue Telemetry Transport) ซึ่งพัฒนาต่อมาจาก TCP/IP อีกทีนั้นได้กลายเป็น protocol มาตรฐานสำหรับระบบ IoT และเนื่องจากมันสร้างมาจาก TCP/IP นั้นทำให้ MQTT ประกันว่าข้อมูลที่ส่งกันระหว่างอุปกรณ์ IoT นั้นจะไม่มีการหล่นหายระหว่างทาง
MQTT ใช้โมเดล publish/subscribe และออกแบบมาเพื่ออุปกรณ์ที่มีความเร็วในการรับและส่งข้อมูลต่ำ (low bandwidth) ซึ่งส่วนมากแล้วอุปกรณ์ของระบบ IoT จะเป็นแบบนั้น จุดประสงค์ของ MQTT ก็คือเพื่อที่จะให้ระบบของเรานั้นมีการส่งหรือรับข้อมูลที่มีประสิทธิภาพมากขึ้น รวมทั้งทำให้อุปกรณ์นั้นใช้พลังงานน้อยลง ซึ่งในระบบ IoT เราต้องการส่งข้อมูลแบบ real-time และไม่ต้องการให้อุปกรณ์ของเราใช้พลังงานเยอะเกินไปโดยไม่จำเป็น ดังนั้น MQTT จึงเหมาะสมกับระบบเหล่านี้
หลังจากรู้ว่าเจ้า MQTT คืออะไรแล้ว เรามาลองดูว่ามันทำงานยังไงกันอย่างคร่าว ๆ ดีกว่า แต่ก่อนที่จะพูดถึงการทำงานของ MQTT ซึ่งใช้โมเดล publish/subscribe นั้น เราอยากจะขอพูดถึง TCP/IP และ HTTP กันสักหน่อยอย่างคร่าว ๆ
TCP/IP (Transmission Control Protocol/Internet Protocol)
ระบบการสื่อสารผ่านอินเตอร์เน็ตระหว่าง 1 อุปกรณ์กับอีก 1 อุปกรณ์ โดยที่จะต้องทำการ connect กันก่อนถึงจะส่งหรือรับข้อมูลหากันได้ อย่างที่ได้บอกไปว่าการทำงานของ TCP/IP นั้นจะรับประกันว่าข้อมูลที่ส่งไปจะไม่หล่นหายระหว่างทาง และรับประกันว่าผู้รับจะได้รับข้อมูลที่ส่งไปทั้งหมด (ไม่เหมือนกับ UDP ที่ส่งข้อมูลไปแล้วจะไม่สนใจว่าผู้รับจะได้รับข้อมูลครบหรือไม่) แต่อย่างที่ได้กล่าวไปข้างต้น TCP/IP เป็นการสื่อสารแบบ point-to-point หน้าที่ของมันคือการที่ต้องรับประกันว่าข้อมูลนั้นได้ถูกส่งไปครบถ้วนเท่านั้น TCP/IP อาจจะใช้กับระบบ IoT ได้ แต่ลองคิดดูถ้าเรามีหลายๆอุปกรณ์อยู่ในระบบ แล้วต้องไปไล่ส่งข้อมูลอุปกรณ์ต่ออุปกรณ์ทีล่ะคู่ๆนั้นทำให้เปลืองพลังงานมากแถมยังต้องมาคอย connect กันอีกทำให้ TCP/IP ไม่เหมาะสมกับระบบ IoT ใหญ่ ๆ สักเท่าไหร่นัก ดังนั้นเราควรเลือกใช้ protocol ที่เหมาะสมกับระบบและความต้องการจะดีกว่า
ข้อจำกัดของการสื่อสารแบบ request/response มีดังนี้
จากข้อมูลข้างต้นทั้ง TCP/IP และ HTTP จึงไม่เหมาะกับระบบ IoT เท่าไหร่นัก เพราะสิ่งที่ต้องการในระบบ IoTคือการส่งข้อมูลแบบ one-to-many ความเร็วในการส่งข้อมูลซึ่งเป็นแค่ข้อมูลขนาดเล็ก และ สุดท้ายคือการรับข้อมูลตลอดเวลาเมื่อข้อมูลมีการอัพเดตดังนั้นระบบสื่อสารแบบ publish/subscribe นั้นจึงเหมาะสมกว่า ทีนี้เรามาเริ่มเข้าการทำงานของ MQTT กันดีกว่าว่า MQTT ทำงานยังไง
การสื่อสารแบบ request/response
[ภาพจาก : https://medium.com/icreativesystems/basic-http-3a2b05e5aa19 ]
MQTT จะมี Broker (Server) และ Clients (Publisher/Subscriber) เป็นหลัก เราจะเรียกการส่งข้อมูลใน MQTT ว่า publish และรับข้อมูลว่า subscribe ก่อนอื่นต้องมาทำความรู้จัก คำศัพท์ด้านล่างกันก่อน
Publish/Subscribe
Publish ก็คือการส่งข้อมูลแต่เราจะต้องบอกด้วยว่าข้อมูลที่เราส่งไปนั้น เราจะส่งไปใน Topic ไหน ส่วน Subscribe คือการรับข้อมูลแต่จะรับข้อมูลเฉพาะที่มาจาก Topic ที่เรา Subscribe เท่านั้น
Topic
คือหัวข้อที่เราสนใจ ซึ่งเอาไว้บ่งบอกว่า เราสนใจที่จะส่งข้อมูลไปยัง topic นี้หรือรอรับข้อมูลสำหรับ topics นี้อยู่ตลอด ตัวอย่าง เช่น home/office/temperature หรือ home/thermostat/temperature เป็นต้น
Broker
คือตัวกลางที่จะรับข้อมูลมาทั้งหมดมาจาก clients (publisher) ไม่ว่าจะเป็น topics อะไรก็ตาม แล้วทำการจัดการส่งข้อมูลไปยัง clients (subscriber) ที่ได้ทำการ subscribe สำหรับ topic ที่ได้รับข้อมูลมานั้นสามารถหา global broker หรือ cloud MQTT broker ได้ในหลาย ๆ เว็ปไซต์ และสร้างภายใน network ได้โดยใช้ Mosquitto broker ซึ่งติดตั้งได้บน Raspberry Pi
การส่งผ่านข้อมูลผ่านระบบ MQTT
[ภาพจาก : https://1sheeld.com/mqtt-protocol/pure-javascript-mqtt-broker/]
DAM สามารถรองรับการสื่อสารแบบไร้สายได้ และยังสามารถตั้งค่าเป็น AP และSTA เพื่อรองรับอุปกรณ์อื่น ๆให้เข้าร่วมเครือข่ายได้ เพื่อตอบสนองการใช้งานให้มากที่สุด (Data Acquisition Modules)