aiomqttc - Asynchronous MQTT Client for Micropython and Python
Project description
aiomqttc - Asynchronous MQTT Client
An asynchronous MQTT client implementation compatible with both standard Python and MicroPython environments, particularly optimized for ESP32 platforms.
Tested on:
- ESP32-PICO
- MicroPython v1.23.0
- RAM: 2MB
Features
- Fully asynchronous operation using Python's
asyncio - Support for both CPython and MicroPython runtimes
- Automatic reconnection with configurable backoff strategy
- QoS 0 and QoS 1 message support
- SSL/TLS connection support
- Topic subscription and message callback handling
- Keep-alive and ping management
- Clean connection termination
Development Setup
This project uses pre-commit to enforce code quality using Ruff.
Install it once:
pip install pre-commit
pre-commit install
Then, every time you commit, it will run the configured hooks.
Installation
For Python environments:
Install UV if you don't have it yet
curl -sSf https://install.ultraviolet.rs | sh
Clone the repository
git clone https://github.com/Tangerino/aiomqttc.git
cd aiomqttc
Install the package
uv venv && uv pip install -e .
Run the example
uv run main.py
2025-05-18 08:53:34.922 Stating aiomqttc example
Error reading config file: [Errno 2] No such file or directory: 'config.json'
Config file created with default values.
2025-05-18 08:53:34.923 Running... (Press Ctrl+C to exit)
2025-05-18 08:53:34.923 Connecting to broker...
2025-05-18 08:53:34.923 MQTTClient:connect. Connecting to :0
- ⚠️ Remember to configure the
config.jsonfile with your MQTT broker details.
For MicroPython environments:
Copy aiomqttc.py to your device
Configuration
The client can be configured via a JSON file. Here's an example config.json:
{
"wifi": {
"ssid": "your_wifi_name",
"password": "your_wifi_password"
},
"mqtt": {
"broker": "broker.example.com",
"port": 8883,
"username": "your_username",
"password": "your_password",
"tls": true
}
}
Basic usage
import asyncio
from aiomqttc import MQTTClient
async def on_connect_callback(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
# Subscribe to a topic
await client.subscribe("home/+/status", qos=1)
async def message_callback(topic, message, retain):
print(f"Received message on {topic}: {message}")
async def main():
# Create an MQTT client
client = MQTTClient(
client_id="my_client",
server="mqtt.example.com",
port=1883,
user="username",
password="password",
keepalive=60
)
# Set up callback for incoming messages
client.on_connect = on_connect_callback
client.on_message = message_callback
# Connect to broker
await client.connect()
# Keep the connection alive
try:
while True:
# Publish a message
await client.publish("home/status", "online", qos=1, retain=True)
await asyncio.sleep(1)
except KeyboardInterrupt:
await client.disconnect()
if __name__ == "__main__":
asyncio.run(main())
Cross-Environment Development Benefits
One of the key advantages of aiomqttc is its ability to run identical code in both standard Python and MicroPython environments, which offers several benefits:
Streamlined Development Workflow
- Test on desktop, deploy to microcontrollers: Debug complex MQTT interactions on your PC before deploying to resource-constrained devices
- Faster iteration cycles: Develop and test on CPython where debugging tools are more advanced, then deploy tested code to MicroPython
- Consistent behavior: The same code behaves predictably across platforms, reducing environment-specific bugs
Simplified Debugging
- Use Python's rich debugging tools in your development environment before deploying
- Test network recovery and edge cases on your development machine
- Validate MQTT communication patterns without flashing hardware repeatedly
Advanced Use Cases
-
Run the same code on ESP32 edge devices and Python-based gateways
-
Create IoT systems with identical protocol handling across the entire device ecosystem
-
Maintain a single codebase for all MQTT-connected components in your project
-
Performance Optimizations
The library automatically adjusts its behavior based on the runtime environment:
- Optimizes memory usage on MicroPython platforms
- Takes advantage of more advanced asyncio features when running in CPython
- Maintains consistent API despite different underlying implementations
API Reference
MQTTClient Class
MQTTClient(client_id=None, server=None, port=1883, user=None,
password=None, keepalive=60, ssl=False, ssl_params=None,
verbose=0)
Parameters
- client_id: Unique client identifier (auto-generated if not provided)
- server: MQTT broker hostname or IP address
- port: MQTT broker port (default: 1883)
- user: Username for authentication
- password: Password for authentication
- keepalive: Keepalive interval in seconds (default: 60)
- ssl: Enable SSL/TLS connection (default: False)
- ssl_params: SSL parameters as dictionary
- verbose: Logging verbosity (0-2)
Methods
- async connect(timeout_sec=10): Connect to the MQTT broker
- async disconnect(): Disconnect from the broker
- async publish(topic, message, qos=1, retain=False): Publish message
- async subscribe(topic, qos=0): Subscribe to topic
- async unsubscribe(topic): Unsubscribe from topic
- reconnect_delay_set(min_delay=1, max_delay=10): Configure reconnection parameters
- get_last_error(): Get last error message
Callbacks
- on_connect: Callback for successful connection
- on_disconnect: Callback for disconnection
- on_message: Callback for incoming messages
License
This software is released into the public domain.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aiomqttc-1.0.6.tar.gz.
File metadata
- Download URL: aiomqttc-1.0.6.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
017d7faf1975e7780db428a75e0d29f97730bf57e69dc4f4c9d8a12ae54c8df2
|
|
| MD5 |
fbd7bd52d88efb34e947a8ebadab217a
|
|
| BLAKE2b-256 |
eca9e95944c964c07998b85ae3ffa254d6ece16c949caba100d7d86b85407d1e
|
File details
Details for the file aiomqttc-1.0.6-py3-none-any.whl.
File metadata
- Download URL: aiomqttc-1.0.6-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5d8d3bda7c0f7f665fd6f13225a2c534e38caa81a5f920659c550d1219b912a
|
|
| MD5 |
a0640cd516645b783e5619f3f2faac8b
|
|
| BLAKE2b-256 |
fe05de982eeedffb040df07cf8db59343537d309e270029d403d619ab4d08a8e
|