MQTT Publish/Subscribe with Python: A Practical Guide
Introduction: The Internet of Things (IoT) thrives on efficient communication. MQTT (Message Queuing Telemetry Transport) emerges as a lightweight, publish-subscribe messaging protocol, ideal for connecting resource-constrained devices. This tutorial provides a hands-on guide to implementing MQTT communication using Python, covering both publishing and subscribing to messages.
Why Use MQTT?
- Lightweight and bandwidth-efficient.
- Publish-subscribe model simplifies communication.
- Real-time data transfer capabilities.
- Ideal for resource-constrained devices and unreliable networks.
Setting Up the Environment
Requirements:
- Python (3.6+ recommended)
- Paho MQTT Python Client Library:
pip install paho-mqtt
- MQTT Broker (e.g., Mosquitto): You can install it locally or use a public broker (for testing purposes only).
Implementing the Publisher
```python import paho.mqtt.client as mqtt # MQTT broker details broker_address = "localhost" # Or IP address of your broker broker_port = 1883 # Default MQTT port # Callback when connected to the broker def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) # Create a new MQTT client instance client = mqtt.Client() client.on_connect = on_connect # Connect to the broker client.connect(broker_address, broker_port, 60) # 60 is the keepalive time # Publish a message to the topic "test/message" client.publish("test/message", "Hello from Python!") # Disconnect client.disconnect() ```Code Breakdown (Publisher):
- Import the Paho MQTT library.
- Define broker address and port.
- The
on_connect
callback confirms connection status. - Create an MQTT client instance.
- Connect to the broker.
- Publish a message to the "test/message" topic.
- Disconnect gracefully.
Implementing the Subscriber
```python import paho.mqtt.client as mqtt # MQTT broker details (same as publisher) broker_address = "localhost" broker_port = 1883 # Callback when a message is received def on_message(client, userdata, msg): print(f"Received message: {msg.payload.decode()} from topic: {msg.topic}") # Create a new MQTT client instance client = mqtt.Client() client.on_message = on_message # Connect to the broker client.connect(broker_address, broker_port, 60) # Subscribe to the topic "test/message" client.subscribe("test/message") # Start the network loop to receive messages client.loop_forever() # Blocks until the client disconnects # Alternative (non-blocking): # client.loop_start() # Start a background thread for receiving messages # # Do other things # client.loop_stop() # Stop the background thread ```Code Breakdown (Subscriber):
- Import the Paho MQTT library.
- Define broker address and port.
- The
on_message
callback prints the received message and topic. - Create an MQTT client instance.
- Connect to the broker.
- Subscribe to the "test/message" topic.
client.loop_forever()
blocks and listens for messages indefinitely.- The alternative
loop_start()
andloop_stop()
methods allow for non-blocking operation.
How to Run:
- Start your MQTT broker (e.g., Mosquitto).
- Run the subscriber script. It will wait for messages.
- Run the publisher script. It will send a message to the broker.
- Observe the subscriber receiving and printing the message.
Comments
Post a Comment