ESP32-WROOM-32E,MQTT报错mqtt_message_receive:transport_read() error:errno=128

ESP32-WROOM-32E,MQTT使用采坑经验之transport_read() error:errno=128

配置MQTT的是 esp_mqtt_client_config_t 结构体,里面包含了MQTT的信息,可根据具体场景配置。

问题

使用MQTT建立连接后,不收发数据,每隔35秒会有如下报错:

mqtt_message_receive:transport_read() error:errno=128 mqtt_process_receive:mqtt_message_receive() returned -1

分析

百度直接搜报错内容不容易找到,还是需要找mqtt有关的内容才发现。大概操作如下:

一、设置client id:类似于IP冲突可能会导致如上报错。

二、设置保持连接:
disable_auto_reconnect = false;
结构体中这样描述:
bool disable_auto_reconnect; /*!< this mqtt client will reconnect to server (when errors/disconnect). Set disable_auto_reconnect=true to disable */

三、设置心跳间隔
keepalive = 10;
原先出现问题时观察到35秒就出现一次报错。考虑到mq要确定终端是否在线,可能有心跳来维持在线。
结构体中这样描述:
int keepalive; /*!< mqtt keepalive, default is 120 seconds */

四、设置连接协议
esp_mqtt_transport_t transport; /*!< overrides URI transport /
int out_buffer_size; /
!< size of MQTT output buffer. If not defined, both output and input buffers have the same size defined as buffer_size /
int buffer_size; /
!< size of MQTT send/receive buffer, default is 1024 (only receive buffer size if out_buffer_size defined) */
这三个是要一起写的,不然会报错。

解决

具体程序如下:

    esp_mqtt_client_config_t mqtt_cfg = {
        .host = "icsdn", //MQTT 地址
        .port = 111,    //MQTT端口
        .username = "77",//用户名字
        .password = "7777",//密码
        .client_id = client_id,//设置mqtt的client id
        .disable_auto_reconnect = false,//设置保持连接
        .keepalive = 10,//设置心跳间隔
        .transport = MQTT_TRANSPORT_OVER_TCP,//设置连接协议
        .out_buffer_size = 2048,//设置发送缓冲区大小
        .buffer_size = 2048,    //设置接收缓冲区大小
    };  

以上数据是随意写的。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值