将esp32连接到本地MQTT代理时出现问题

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

我在使用以下 micropython 代码将 esp32 连接到本地 MQTT 代理时遇到问题

from umqtt.simple import MQTTClient import network import utime as time # 设备设置 DEVICE_ID = "wokwi001" MQTT_CONTROL_TOPIC = "iot/control" # WiFi 设置 WIFI_SSID = "####" WIFI_PASSWORD = "######" # MQTT 设置 #MQTT_BROKER = "broker.mqttdashboard.com" MQTT_BROKER = "localhost" #MQTT_BROKER = "192.168.1.105" MQTT_CLIENT = DEVICE_ID def did_recieve_callback(topic, message): print(' 数据已收到! topic = {0}, message = {1}'.format(topic, message)) # device_id/lamp/color/state # device_id/lamp/state # lamp/state if topic == MQTT_CONTROL_TOPIC.encode(): #if message == ('{0}/lamp/red/on'.format(DEVICE_ID)).encode(): # RED_LED.on() #elif message == ('{0}/lamp/red/off'. format(DEVICE_ID)).encode(): # RED_LED.off() if message == ('{0}/lamp/blue/on'.format(DEVICE_ID)).encode(): BLUE_LED.on() elif message == ('{0}/lamp/blue/off'.format(DEVICE_ID)).encode(): BLUE_LED.off() elif message == ('{0}/lamp/on'.format(DEVICE_ID)) .encode() 或 message == b'lamp/on': #RED_LED.on() BLUE_LED.on() elif message == ('{0}/lamp/off'.format(DEVICE_ID)).encode()或 message == b'lamp/off': #RED_LED.off() BLUE_LED.off() else: return send_led_status() def mqtt_connect(): print("正在连接到 MQTT 代理 ...", end="") mqtt_client = MQTTClient(MQTT_CLIENT, MQTT_BROKER, user="", password="") mqtt_client.set_callback(did_recieve_callback) mqtt_client.connect() print("已连接。") mqtt_client.subscribe(MQTT_CONTROL_TOPIC) return mqtt_client # 连接 Wifi wifi_client = network.WLAN(network.STA_IF) wifi_client.active(True) print("正在将设备连接到 WiFi") wifi_client.connect(WIFI_SSID, WIFI_PASSWORD) # 等待 WiFi 连接,而未连接 wifi_client.isconnected(): print("连接中" ) time.sleep(0.1) print("WiFi已连接!") print(wifi_client.ifconfig()) # 连接到 MQTT mqtt_client = mqtt_connect() #等待 MQTT 连接 #while not mqtt_client.isconnected(): # print( "连接中") # time.sleep(0.1) print("Mqtt 已连接!")

错误信息是

Connecting to MQTT broker ...Traceback (most recent call last):
  File "<stdin>", line 67, in <module>
  File "<stdin>", line 48, in mqtt_connect
  File "umqtt/simple.py", line 68, in connect
OSError: [Errno 104] ECONNRESET

但是,相同的代码(除了 MQTT_BROKER 从“localhost”更改为“broker.mqttdashboard.com”)可以正常工作。

我尝试过添加

listener 1883

Allow anonymous True

没有成功。有人能给我指个方向吗?预先感谢

mqtt esp32 micropython
1个回答
0
投票

First

localhost
always 指向运行代码的机器,因此在这种情况下
localhost
将是 esp32,而不是运行代理的机器。

如果机器运行代理,您将需要使用 IP 地址。

其次,mosquitto 配置文件中的正确条目是

listener 1883
allow_annonymous true

下划线和大小写很重要

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