MQTTClient 抛出错误 AttributeError: 'NoneType' 对象没有属性 'write'

问题描述 投票:0回答:1

我正在使用 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'

>>> 

这是我的服务器详细信息: enter image description here

大概,我的

client
iVar 没有正确初始化,但是在查看了 HiveTom's Hardware 后,我已经停止了。

我的代码如何无法正确连接到 Hive?

mqtt micropython raspberry-pi-pico raspberry-pico-w
1个回答
0
投票
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 行);因此出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.