forked from micropython/micropython
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Closed
Description
CircuitPython version
Adafruit CircuitPython 0.8.0-beta1; Raspberry Pi Pico W
Code/REPL
"""
Based on https://gist.github.com/sammachin/b67cc4f395265bccd9b2da5972663e6d
http://www.steves-internet-guide.com/into-mqtt-python-client/
"""
import json
from secrets import secrets
import board
import digitalio
import busio
import socketpool
import wifi
import microcontroller
from binascii import hexlify
from adafruit_minimqtt.adafruit_minimqtt import MQTT
SSID, PASSWORD = secrets["ssid"], secrets["password"]
BROKER = "test.mosquitto.org"
TEXT_URL = "http://wifitest.adafruit.com/testwifi/index.html"
pool = socketpool.SocketPool(wifi.radio)
wifi.radio.connect(SSID, PASSWORD)
uid = microcontroller.Processor.uid
my_id = hexlify(b"{uid}").decode()
prefix = f"sdl-demo/picow/{my_id}/"
print(f"prefix: {prefix}")
onboard_led = digitalio.DigitalInOut(board.LED) # only works for Pico W
onboard_led.direction = digitalio.Direction.OUTPUT
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe(prefix + "GPIO/#", qos=0)
def callback(topic, msg):
t = topic.decode("utf-8").lstrip(prefix)
print(t)
if t[:5] == "GPIO/":
p = int(t[5:])
print(msg)
data = json.loads(msg)
onboard_led.value = data["value"]
payload = {"onboard_led_value": onboard_led.value}
print(payload)
client.publish(prefix + "onboard_led/", payload, qos=0)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
# Set up a MiniMQTT Client
client = MQTT(
client_id=prefix,
broker=BROKER,
username=None,
password=None,
is_ssl=False,
socket_pool=pool,
)
client.connect()
client.add_topic_callback(prefix + "GPIO/#", callback)
client.on_connect = on_connect
client.on_message = on_message
client.subscribe(prefix + "GPIO/#")
while True:
client.check_msg()
Behavior
prefix: sdl-demo/picow/<PICO ID>/
Traceback (most recent call last):
File "<stdin>", line 87, in <module>
File "adafruit_minimqtt/adafruit_minimqtt.py", line 741, in subscribe
File "adafruit_minimqtt/adafruit_minimqtt.py", line 876, in _wait_for_msg
MMQTTException:
For reference:
File "<stdin>", line 87, in <module>
is:
client.connect()
EDIT:
client.subscribe(prefix + "GPIO/#")
Description
- adafruit_minimqtt fails for Pico W
Additional information
I've been porting my MicroPython implementation at https://github.com/sparks-baird/self-driving-lab-demo/blob/main/src/public_mqtt_sdl_demo/main.py to CircuitPython. Part of the appeal of using CircuitPython is to use ArduCam, which only has C and CircuitPython support -- no MicroPython support as far as I can tell ArduCAM/PICO_SPI_CAM#8 namato/micropython-ov2640#6. I'd be OK with another basic color camera, but had trouble finding one that looked like it would work as easily as ArduCam.