我正在使用 Visual Studio 在 PicoW 上开发一个应用程序(Thonny 给出了相同的结果)。
它使用umqtt.simple:
from machine import Pin, I2C
from time import sleep
import network
from umqtt.simple import MQTTClient
import config
# MQTT Parameters
MQTT_SERVER = config.mqtt_server
MQTT_PORT = 0
MQTT_USER = config.mqtt_username
MQTT_PASSWORD = config.mqtt_password
MQTT_CLIENT_ID = b"rPi_pico_train_1"
MQTT_KEEPALIVE = 7200
MQTT_SSL = True
led = Pin("LED", Pin.OUT)
def flash_led(count):
_count = count
while _count > 0:
led.value(True)
sleep(0.25)
led.value(False)
sleep(0.05)
_count -= 1
def init_wifi(ssid, password):
led.value(0)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
connection_timeout = 20
print("Waiting for WIFI Connection...")
while connection_timeout > 0:
if wlan.status() >= 3:
break
connection_timeout -= 1
print(f"Timeout in: {connection_timeout}")
sleep(1)
if wlan.status() != 3:
return False
else:
print("Connected!")
network_info = wlan.ifconfig()
print(f"IP: {network_info[0]}")
led.value(1)
return True
def sub_cb(topic, msg):
print("New message on topic {}".format(topic.decode('utf-8')))
msg = msg.decode('utf-8')
print(msg)
if init_wifi(config.wifi_ssid, config.wifi_password):
flash_led(2)
else:
print("NOT CONNECTED TO WIFI")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER,0, MQTT_USER, MQTT_PASSWORD, 3600,{'server_hostname' : MQTT_SERVER})
client.set_callback(sub_cb)
print('Connected to %s MQTT Broker'%(client))
print("Connecting to client")
flash_led(5)
print("Client listening")
while True:
client.subscribe('trains')
sleep(1)
我的终端输出是:
>>>
Connected to <MQTTClient object at 20012e80> MQTT Broker
Waiting for WIFI Connection...
Connected!
IP: 192.168.1.183
Connecting to client
Client listening
Traceback (most recent call last):
File "<stdin>", line 70, in <module>
File "/lib/umqtt/simple.py", line 157, in subscribe
AttributeError: 'NoneType' object has no attribute 'write'
>>>
大概,我的
client
iVar 没有正确初始化,但是在查看了 Hive 和 Tom's Hardware 后,我已经停止了。
我的代码如何无法正确连接到 Hive?
client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER,0, MQTT_USER, MQTT_PASSWORD, 3600,{'server_hostname' : MQTT_SERVER})
client.set_callback(sub_cb)
print('Connected to %s MQTT Broker'%(client))
您没有打电话
client.connect
即
client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER,0, MQTT_USER, MQTT_PASSWORD, 3600,{'server_hostname' : MQTT_SERVER})
client.set_callback(sub_cb)
client.connect()
print('Connected to %s MQTT Broker'%(client))
client.connect
设置 self.sock
使用 的 subscribe
(self.sock.write(pkt)
- simple.py
中的第 157 行);因此出现错误。