You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP-IDF MQTT TCP示例报错(0x8006&0x8004)及后续问题求助

问题排查:ESP-IDF MQTT TCP示例连接失败

场景1:连接家用WiFi时的错误

操作步骤:

  • 使用ESP-IDF的protocal/mqtt/tcp示例
  • 通过idf.py menuconfig修改MQTT用户名和密码
  • 执行esptool.py --port /dev/ttyUSB0 erase_flash擦除闪存后,编译烧录至ESP32
  • 监控时出现以下错误日志:
I (4609) esp_netif_handlers: example_netif_sta ip: 192.168.69.134, mask: 255.255.255.0, gw: 192.168.69.50
I (4609) example_connect: Got IPv4 event: Interface "example_netif_sta" address: 192.168.69.134
I (5609) example_connect: Got IPv6 event: Interface "example_netif_sta" address: fe80:0000:0000:0000:7ae3:6dff:fe18:eeb8, type: ESP_IP6_ADDR_IS_LINK_LOCAL
I (5609) example_common: Connected to example_netif_sta
I (5619) example_common: - IPv4 address: 192.168.69.134,
I (5619) example_common: - IPv6 address: fe80:0000:0000:0000:7ae3:6dff:fe18:eeb8, type: ESP_IP6_ADDR_IS_LINK_LOCAL
I (5639) MQTT_EXAMPLE: Other event id:7
E (14809) esp-tls: [sock=54] delayed connect error: Connection reset by peer
E (14809) transport_base: Failed to open a new connection: 32772
E (14819) mqtt_client: Error transport connect
I (14819) MQTT_EXAMPLE: MQTT_EVENT_ERROR
E (14829) MQTT_EXAMPLE: Last error reported from esp-tls: 0x8004
E (14829) MQTT_EXAMPLE: Last error captured as transport's socket errno: 0x68
I (14839) MQTT_EXAMPLE: Last errno string (Connection reset by peer)
I (14849) MQTT_EXAMPLE: MQTT_EVENT_DISCONNECTED
E (83319) esp-tls: [sock=54] select() timeout
E (83319) transport_base: Failed to open a new connection: 32774
E (83319) mqtt_client: Error transport connect
I (83319) MQTT_EXAMPLE: MQTT_EVENT_ERROR
E (83329) MQTT_EXAMPLE: Last error reported from esp-tls: 0x8006

注:使用ESP-IDF的wifi/getting_started示例执行相同WiFi配置操作时完全正常,说明WiFi连接本身无问题。

对应的错误码及解释:

ESP_ERR_ESP_TLS_FAILED_CONNECT_TO_HOST (0x8004): Failed to connect to host
ESP_ERR_ESP_TLS_CONNECTION_TIMEOUT (0x8006): new connection in esp_tls_low_level_conn connection timeouted

场景2:连接ESP32软AP时的错误

操作步骤:将一台ESP32配置为软AP(使用wifi/getting_started/softAP示例),另一台ESP32运行同一MQTT TCP示例时,出现以下错误日志:

E (562605) esp-tls: couldn't get hostname for :mqtt.eclipseprojects.io: getaddrinfo() returns 202, addrinfo=0x0
E (562605) transport_base: Failed to open a new connection: 32769
E (562605) mqtt_client: Error transport connect
I (562615) MQTT_EXAMPLE: MQTT_EVENT_ERROR
E (562615) MQTT_EXAMPLE: Last error reported from esp-tls: 0x8001
I (562625) MQTT_EXAMPLE: Last errno string (Success)
I (562625) MQTT_EXAMPLE: MQTT_EVENT_DISCONNECTED
I (572635) MQTT_EXAMPLE: Other event id:7

排查建议

针对场景1的排查点

  • 确认menuconfig中配置的MQTT Broker地址、端口是否正确,用电脑ping默认的mqtt.eclipseprojects.io,测试当前网络能否访问该服务器
  • 检查家用路由器/防火墙是否拦截了MQTT默认端口(1883),可尝试临时关闭防火墙或在路由器后台开放对应端口
  • 验证MQTT用户名、密码的正确性,确认该账号有权限连接目标Broker
  • 更换公共MQTT Broker测试,比如test.mosquitto.org,排除目标服务器自身问题

针对场景2的排查点

  • ESP32软AP默认未连接外网,无法解析公共MQTT Broker的域名,这是预期现象。若要在该环境测试MQTT,需:
    • 在作为软AP的ESP32上搭建本地MQTT Broker
    • 配置软AP的ESP32同时开启STA模式连接外网,让软AP下的设备能访问公网
  • 检查软AP的DHCP配置,确保运行MQTT的ESP32获取到了有效的DNS服务器地址(可在监控日志中查看DNS配置信息)

内容的提问来源于stack exchange,提问作者Ohm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:45:45