MQTT: IoT Device Communication Protocol Stack
Around us, more and more smart devices are quietly changing our lives. Have you ever wondered what happens behind the scenes when you use a mobile app to turn on the smart bulb at home? Today, let’s explore the “delivery guy” of communication between IoT devices – the MQTT protocol.
What is MQTT?
MQTT (Message Queuing Telemetry Transport) is a lightweight messaging protocol. To put it simply, it is like “WeChat” in the IoT world, responsible for delivering messages between different devices.
Core Features
-
Lightweight: Small data transmission, suitable for low bandwidth environments -
Publish/Subscribe Model: More flexible communication between devices -
Reliability Guarantee: Supports three levels of message QoS -
Strong Real-time Performance: Low latency, quick response
How MQTT Works
Publish/Subscribe Model
Imagine a smart home system:
-
The smart bulb is the publisher, regularly publishing its status -
The mobile app is the subscriber, receiving the status information from the bulb -
The MQTT server is the broker, responsible for forwarding messages
Python code example for publisher
# MQTT Publisher Example
import paho.mqtt.client as mqtt
# Create MQTT client
client = mqtt.Client()
client.connect("localhost", 1883)
# Publish message
client.publish("home/light", "on")
Topics
MQTT uses topics to categorize messages. For example:
-
home/light/status -
home/temperature -
home/humidity
Python code example for subscriber
# MQTT Subscriber Example
import paho.mqtt.client as mqtt
def on_message(client, userdata, message):
print(f"Received message: {message.payload.decode()}")
client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("home/light/#")
client.loop_forever()
QoS Levels
MQTT provides three levels of Quality of Service:
-
QoS 0: At most once delivery, like a lost package -
QoS 1: At least once delivery, may be duplicated -
QoS 2: Exactly once delivery, the most reliable but the slowest
Practical Case: Smart Temperature Monitoring
Let’s implement a simple temperature monitoring system.
Python code example
import paho.mqtt.client as mqtt
import random
import time
# Simulate temperature sensor
def publish_temperature():
client = mqtt.Client()
client.connect("localhost", 1883)
while True:
temperature = round(random.uniform(20, 30), 2)
client.publish("sensor/temperature", str(temperature))
time.sleep(5)
# Temperature monitoring client
def monitor_temperature():
def on_message(client, userdata, message):
temp = float(message.payload.decode())
if temp > 28:
print(f"Warning: High temperature ({temp}°C)! ")
else:
print(f"Current temperature: {temp}°C")
client = mqtt.Client()
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("sensor/temperature")
client.loop_forever()
Exercises
-
How to implement a simple MQTT chat room? -
Use MQTT protocol to control the smart bulb switch -
How to handle MQTT reconnection issues?
⚠️ Precautions
-
Ensure the security of the MQTT server -
Design the topic structure reasonably -
Choose the appropriate QoS level -
Handle reconnection mechanisms properly
Tips
-
It is recommended to use Mosquitto as the MQTT broker -
You can use the MQTT Explorer tool to debug messages -
Set an appropriate heartbeat interval to maintain the connection
Friends, today’s programming lesson ends here! Remember to practice hands-on, and feel free to ask me questions in the comments. I wish you a pleasant learning experience and smooth sailing on your programming journey! See you next time!