MQTT (Message Queuing Telemetry Transport) คือ โปรโตคอลสำหรับการสื่อสารข้อมูลแบบเบา (lightweight) ซึ่งถูกออกแบบมาเพื่อให้เหมาะกับ อุปกรณ์ IoT ที่มีข้อจำกัดด้านพลังงานและการเชื่อมต่อ เช่น อุปกรณ์ที่ใช้แบตเตอรี่ หรือทำงานบนเครือข่ายที่ไม่เสถียร
จุดเด่นของ MQTT
ใช้ ทรัพยากรต่ำ ทั้ง CPU และ Bandwidth
เหมาะกับ เครือข่ายที่ไม่เสถียร
รองรับการทำงานแบบ Real-Time
มีระบบ QoS (Quality of Service) ให้เลือก 3 ระดับ
ใช้หลักการ publish/subscribe ที่เรียบง่าย
วิธีการทำงานของ MQTT
MQTT ทำงานโดยใช้สถาปัตยกรรมแบบ Publisher / Broker / Subscriber
- Publisher: อุปกรณ์ที่ส่งข้อมูล เช่น เซ็นเซอร์อุณหภูมิ
- Broker: ตัวกลางที่รับข้อมูลจาก Publisher แล้วแจกจ่ายไปยัง Subscriber (เช่น Mosquitto)
- Subscriber: อุปกรณ์หรือระบบที่ต้องการรับข้อมูล เช่น dashboard หรือ database
ตัวอย่างเช่น เซ็นเซอร์ส่งข้อมูลอุณหภูมิไปที่ topic ชื่อ
home/temperatureและมีระบบ dashboard subscribe อยู่บน topic เดียวกัน
โครงสร้างการทำงานแบบ Topic-Based
ข้อมูลใน MQTT ถูกส่งผ่าน “Topic” ซึ่งคล้ายกับชื่อหมวดหมู่ เช่น:
home/livingroom/temperaturefactory/line1/machineA/status
MQTT สามารถใช้ wildcard (+, #) เพื่อ subscribe ข้อมูลแบบยืดหยุ่นได้ เช่น:
home/+/temperature→ ทุกห้องที่มี temperaturefactory/#→ ทุกข้อมูลในโรงงาน
ระดับ QoS (Quality of Service)
| ระดับ | ความหมาย | การรับส่ง |
|---|---|---|
| 0 | At most once | ส่งครั้งเดียว ไม่รับประกันว่าได้รับ |
| 1 | At least once | ส่งซ้ำจนกว่าจะได้รับการยืนยัน |
| 2 | Exactly once | ส่งและรับอย่างแน่นอน ไม่ซ้ำ |
ความปลอดภัยใน MQTT
MQTT รองรับ:
- การยืนยันตัวตน (Authentication) ด้วย username/password
- การเข้ารหัส (Encryption) ด้วย TLS/SSL
- การควบคุมสิทธิ์การเข้าถึง topic (ACL)
ตัวอย่างการใช้งาน MQTT
- ระบบบ้านอัจฉริยะ (Smart Home)
- การควบคุมโรงงาน (Industrial Automation)
- การติดตามรถ (Vehicle Tracking)
- การเก็บข้อมูลเซ็นเซอร์แบบ Real-time
ตัวอย่างโค้ด 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()
MQTT Broker ยอดนิยม (ฟรี)
| ชื่อ | รายละเอียด |
|---|---|
| Mosquitto | ยอดนิยม, ติดตั้งง่าย |
| EMQX | รองรับความสามารถขั้นสูง |
| HiveMQ | มี dashboard และ API |
| VerneMQ | รองรับ High-Availability |
สรุป
| ข้อดี | ข้อจำกัด |
|---|---|
| ใช้งานง่ายและเบา | ไม่เหมาะกับข้อมูลขนาดใหญ่ |
| เหมาะกับ IoT | ต้องมี Broker ตรงกลาง |
| ใช้ Bandwidth น้อย | ไม่เหมาะกับงาน Multimedia |
