MQTT กับระบบ IoT


Posted 16 Oct 2020 15:08 | 18,296 views

MQTT เป็น Protocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (Machine-to-machine) คือ อุปกรณ์ติดต่อหรือสื่อสารกับอุปกรณ์ โดยเป็นส่วนหนึ่งของเทคโนโลยี IoT (Internet of Things) ซึ่งเป็นเทคโนโลยีที่อินเตอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่างๆ

MQTT กับระบบ IoT

         

          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 มีดังนี้

  1. การที่จะได้ข้อมูลนั้น ฝั่ง Clients จะต้องส่ง request ไปก่อน ซึ่งเราจะไม่สามารถรับข้อมูลได้เลย หากไม่ส่ง request ไปก่อน ในระบบของ IoT บางระบบนั้นไม่ได้ต้องการที่จะอัพเดตทุกครั้งที่ที่มีการกดส่งข้อมูล แต่ต้องการข้อมูลที่อัพเดตอยู่ตลอดเวลา
  2. ทั้ง TCP/IP และ HTTP เป็นการสื่อสารแบบ 1–1 หมายความว่า การส่งข้อมูล 1 ครั้ง จะมีผู้รับแค่คนเดียวเท่านั้น และมันจะเป็นการยากมากที่เราจะต้องส่งข้อมูลให้กับหลายอุปกรณ์ทั้งหมดในระบบของเราซึ่งเป็นเรื่องปกติมากที่ในระบบ IoT จะมีหลายอุปกรณ์
  3. การส่งข้อมูลแบบ HTTP จะรวมข้อมูลที่เรียกว่า headers เข้าไปด้วยซึ่งมีขนาดที่ค่อนข้างใหญ่ และเนื่องจากอุปกรณ์ IoT ส่วนใหญ่จะมีความเร็วในการส่งที่ต่ำ ดังนั้นมันจะทำให้การแลกเปลี่ยนข้อมูลช้า

     จากข้อมูลข้างต้นทั้ง 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
  • Topics
  • Broker
     

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