micropython运行esp32,连接到了WiFi,电脑笔记本的,也是连接到WiFi,同一个WiFi,电脑上下载了mqttx,但是esp32却不能连接本地服务器

问题代码:


>>> %Run -c $EDITOR_CONTENT ip
network config: ('192.168.0.111', '255.255.255.0', '192.168.0.1', '192.168.1.1')
Traceback (most recent call last):
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/449320790186121.png "#left")
 
  File "", line 37, in 
  File "umqtt/simple.py", line 68, in connect
OSError: [Errno 113] ECONNABORTED
>>> 

如图所示:

img

所应用的软件:

img

img

防火墙状态:但不确定关着了么

img

多次尝试:更换代码

具体代码:
方案一:


import time
from machine import Pin  # ---- 添加 --------
import network
from umqtt.simple import MQTTClient
 
 
def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('TP    5555G', '2580.xuan')
        i = 1
        while not wlan.isconnected():
            print("正在链接...{}".format(i))
            i += 1
            time.sleep(1)
    print('network config:', wlan.ifconfig())
 
 
def sub_cb(topic, msg): # 回调函数,收到服务器消息后会调用这个函数
    print(topic, msg)
    # ---- 添加 --------
    if topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "on":
        led_pin.value(1)
    elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "off":
        led_pin.value(0)
    # ---- 添加 --------
 
 
# 1. 联网
do_connect()
 
# 2. 创建mqt
c = MQTTClient("umqtt_client","192.168.0.103")  # 建立一个MQTT客户端
c.set_callback(sub_cb)  # 设置回调函数
c.connect()  # 建立连接
c.subscribe(b"ledctl")  # 监控ledctl这个通道,接收控制命令
 
# ---- 添加 --------
# 3. 创建LED对应Pin对象
led_pin = Pin(2, Pin.OUT)
# ---- 添加 --------
 
while True:
    c.check_msg()
    time.sleep(1)

方案二:

import time
from machine import Pin  
import network
from umqttsimple import MQTTClient
 
def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('TP    5555G', '2580.xuan')
        i = 1
        while not wlan.isconnected():
            print("正在链接...{}".format(i))
            i += 1
            time.sleep(1)
    print('network config:', wlan.ifconfig())
 
def sub_cb(topic, msg): 
    print(topic, msg)
    
    if topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "on":
        led_pin.value(1)
    elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "off":
        led_pin.value(0)
 
do_connect()
 
c = MQTTClient("umqtt_client","192.168.0.103")  
c.set_callback(sub_cb)  
c.connect()  
c.subscribe(b"ledctl")  
 
led_pin = Pin(2, Pin.OUT)
 
while True:
    try:
        c.check_msg()
    except OSError as e:
        print("error:", e)
        c.connect()
    time.sleep(1)

方案三:


import network
from umqtt.simple import MQTTClient
 
# 设置WiFi连接信息
ssid = 'TP    5555G'
password = '2580.xuan'
 
# 设置MQTT连接信息
mqtt_server = '192.168.0.103'
mqtt_port = 1883
mqtt_user = 'admin'
mqtt_password = 'duanwensheng123'
mqtt_topic = 'your_mqtt_topic'
 
# 连接WiFi
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, password)
while not sta_if.isconnected():
    pass
 
# 连接MQTT
client = MQTTClient("esp32", mqtt_server, port=mqtt_port, user=mqtt_user, password=mqtt_password)
client.connect()

结果都连不上上面的本地服务器

img

以上这个问题怎么解决,怎么连接上

img

img

这种情况可能是因为网络连接出现了问题导致ESP32无法连接到电脑的本地服务器。以下是一些可能的解决方法:

确保ESP32与电脑在同一个局域网内,可以通过ping指令或其他方式测试它们之间的连接情况。

检查ESP32的代码,确保它使用正确的IP地址和端口号来连接到本地服务器。

检查防火墙和网络配置,防止其阻止ESP32连接到特定端口。你可以尝试将电脑和ESP32之间的防火墙关闭,然后再次尝试连接。

尝试使用其他开源工具如MQTT等进行数据传输,以确认是否由于MDT-TX的问题导致无法连接。

如果以上方法都不能解决问题,建议进一步检查ESP32的运行日志以确定具体出错位置。同时,也可以参考ESP32的官方文档和用户社区进行深入探究。

以下内容部分参考ChatGPT模型:


首先需要确认本地服务器是否正常运行,可以尝试在电脑上使用mqttx连接本地服务器,如果连接成功,则本地服务器正常运行。

其次,需要确认esp32是否能够连接到WiFi,可以通过打印网络配置信息来确认。

如果WiFi连接正常,可以尝试使用MQTT客户端连接本地服务器,确保MQTT客户端的连接信息正确,包括服务器地址、端口号、用户名和密码等信息。

如果仍然无法连接本地服务器,可以尝试关闭防火墙或者将MQTT服务器添加到防火墙的白名单中。同时,也可以尝试使用其他MQTT客户端库,例如paho-mqtt等。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

搜了一下这个Errno 113,看看下面这个帖子。
https://forum.micropython.org/viewtopic.php?f=18&t=12109&sid=81e2149801a64db148207a5121bc45d6&start=10

有一楼的回复,是把下面这行代码放在你的代码前面。试试看...


network.WLAN(network.AP_IF).active(False)

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据报错信息来看,是在连接到mqtt服务器时出现了错误。可能原因有以下几个:

  1. mqtt服务器地址不正确,可以检查一下服务器地址是否输对

  2. mqtt服务器端口不正确,可以检查一下服务器端口是否输对

  3. mqtt服务器的用户名和密码不对,可以检查一下用户名和密码是否正确

综上所述,可以检查一下mqtt服务器的地址、端口、用户名和密码是否正确,确保连接时可以正常接收到mqtt服务器发送的消息。

以下是针对你提供的方案一进行的部分修改和完善,可以参考一下:

import time
from machine import Pin
import network
from umqtt.simple import MQTTClient

# 设置WiFi连接信息
ssid = 'your_wifi_ssid'
password = 'your_wifi_password'

# 设置MQTT连接信息
mqtt_server = 'your_mqtt_server_ip'
mqtt_port = 1883
mqtt_user = 'your_mqtt_username'
mqtt_password = 'your_mqtt_password'
mqtt_topic = b'ledctl'

# 连接WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    print('connecting to network...')
    wlan.connect(ssid, password)
    while not wlan.isconnected():
        time.sleep(1)
print('network config:', wlan.ifconfig())

# 连接MQTT
client_id = b'esp32'
client = MQTTClient(client_id, mqtt_server, port=mqtt_port, user=mqtt_user, password=mqtt_password)
client.connect()

# 创建LED对应Pin对象
led_pin = Pin(2, Pin.OUT)

def sub_cb(topic, msg):
    print(topic, msg)
    if topic == mqtt_topic and msg == b'on':
        led_pin.value(1)
    elif topic == mqtt_topic and msg == b'off':
        led_pin.value(0)

client.set_callback(sub_cb)
client.subscribe(mqtt_topic)

while True:
    client.check_msg()
    time.sleep(1)

在这里,我们首先按照上述步骤设置了WiFi和MQTT的连接信息,在连接之前使用isconnected()函数进行检查,确保连接成功后再进行后续操作。

然后创建一个回调函数sub_cb(),在接收到mqtt服务器发送的消息时,如果收到的消息为"on",则打开LED灯,如果收到的消息为"off",则关闭LED灯。

最后在循环中使用check_msg()函数检查是否有mqtt服务器发送的消息,由于我们在回调函数中已经处理了LED的开关控制,所以在这里只需要调用check_msg()函数即可。

希望这个修改后的代码能够帮到你!
如果我的回答解决了您的问题,请采纳!