MQTT คืออะไร? ย่อมาจาก Message Queuing Telemetry Transport

MQTT (Message Queuing Telemetry Transport) คือ โปรโตคอลสำหรับการสื่อสารข้อมูลแบบเบา (lightweight) ซึ่งถูกออกแบบมาเพื่อให้เหมาะกับ อุปกรณ์ IoT ที่มีข้อจำกัดด้านพลังงานและการเชื่อมต่อ เช่น อุปกรณ์ที่ใช้แบตเตอรี่ หรือทำงานบนเครือข่ายที่ไม่เสถียร

จุดเด่นของ MQTT

  • :white_check_mark: ใช้ ทรัพยากรต่ำ ทั้ง CPU และ Bandwidth
  • :white_check_mark: เหมาะกับ เครือข่ายที่ไม่เสถียร
  • :white_check_mark: รองรับการทำงานแบบ Real-Time
  • :white_check_mark: มีระบบ QoS (Quality of Service) ให้เลือก 3 ระดับ
  • :white_check_mark: ใช้หลักการ publish/subscribe ที่เรียบง่าย

:compass: วิธีการทำงานของ MQTT

MQTT ทำงานโดยใช้สถาปัตยกรรมแบบ Publisher / Broker / Subscriber

  1. Publisher: อุปกรณ์ที่ส่งข้อมูล เช่น เซ็นเซอร์อุณหภูมิ
  2. Broker: ตัวกลางที่รับข้อมูลจาก Publisher แล้วแจกจ่ายไปยัง Subscriber (เช่น Mosquitto)
  3. Subscriber: อุปกรณ์หรือระบบที่ต้องการรับข้อมูล เช่น dashboard หรือ database

ตัวอย่างเช่น เซ็นเซอร์ส่งข้อมูลอุณหภูมิไปที่ topic ชื่อ home/temperature และมีระบบ dashboard subscribe อยู่บน topic เดียวกัน


:counterclockwise_arrows_button: โครงสร้างการทำงานแบบ Topic-Based

ข้อมูลใน MQTT ถูกส่งผ่าน “Topic” ซึ่งคล้ายกับชื่อหมวดหมู่ เช่น:

  • home/livingroom/temperature
  • factory/line1/machineA/status

MQTT สามารถใช้ wildcard (+, #) เพื่อ subscribe ข้อมูลแบบยืดหยุ่นได้ เช่น:

  • home/+/temperature → ทุกห้องที่มี temperature
  • factory/# → ทุกข้อมูลในโรงงาน

:antenna_bars: ระดับ QoS (Quality of Service)

ระดับ ความหมาย การรับส่ง
0 At most once ส่งครั้งเดียว ไม่รับประกันว่าได้รับ
1 At least once ส่งซ้ำจนกว่าจะได้รับการยืนยัน
2 Exactly once ส่งและรับอย่างแน่นอน ไม่ซ้ำ

:locked_with_key: ความปลอดภัยใน MQTT

MQTT รองรับ:

  • การยืนยันตัวตน (Authentication) ด้วย username/password
  • การเข้ารหัส (Encryption) ด้วย TLS/SSL
  • การควบคุมสิทธิ์การเข้าถึง topic (ACL)

:gear: ตัวอย่างการใช้งาน MQTT

  • ระบบบ้านอัจฉริยะ (Smart Home)
  • การควบคุมโรงงาน (Industrial Automation)
  • การติดตามรถ (Vehicle Tracking)
  • การเก็บข้อมูลเซ็นเซอร์แบบ Real-time

:wrench: ตัวอย่างโค้ด MQTT (ภาษา Python ด้วย paho-mqtt)

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe("home/temperature")

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload.decode()))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("broker.hivemq.com", 1883, 60)
client.loop_forever()

:test_tube: MQTT Broker ยอดนิยม (ฟรี)

ชื่อ รายละเอียด
Mosquitto ยอดนิยม, ติดตั้งง่าย
EMQX รองรับความสามารถขั้นสูง
HiveMQ มี dashboard และ API
VerneMQ รองรับ High-Availability

:books: สรุป

ข้อดี ข้อจำกัด
ใช้งานง่ายและเบา ไม่เหมาะกับข้อมูลขนาดใหญ่
เหมาะกับ IoT ต้องมี Broker ตรงกลาง
ใช้ Bandwidth น้อย ไม่เหมาะกับงาน Multimedia