How can we use MQTT protocol to send messages over micropython(esp32) board?
Concepts
Basically, you got two actions available.
One is publish.
Another is subscribe.
If we want to send some message out to others, we need to use publish.
If we want to just receive messages from others, we use subscribe.
publish
from umqtt.simple import MQTTClient
c = MQTTClient("clients/a", SERVICE_IP)
c.connect()
c.publish(b"a_topic", b"hello")
c.disconnect()
subscribe
import time
from umqtt.simple import MQTTClient
# Received messages from subscriptions will be delivered to this callback
def callback(topic, msg):
print((topic, msg))
c = MQTTClient("clients/b", SERVICE_IP)
c.set_callback(callback)
c.connect()
c.subscribe(b"a_topic")
while True:
if True:
# Blocking wait for message
c.wait_msg()
else:
# Non-blocking wait for message
c.check_msg()
# Then need to sleep to avoid 100% CPU usage (in a real
# app other useful actions would be performed instead)
time.sleep(1)
c.disconnect()
- You can’t receive a topic before you subscribe to it.
- You won’t receive anything if you don’t call
client.check_msg()orclient.wait_msg(). - You may need a timer to execute the
check_msg()function since you can’t use threading in micropython.
The author and more info
https://yingshaoxo.blogspot.com
https://mpython.readthedocs.io/en/master/library/mPython/umqtt.simple.html