问题
使用了 MQTT 例程(esp-idf 4.2.1),链接阿里云的 mqtt borker,使用单个设备测试的时候就可以正常链接,一但使用多个设备链接的时候,每个设备只能链接一会儿,就会报错,报错后有从能重新连接;报的错误具体如下:
I (3803079) mqtt_event: Other event id:7
I (3804639) mqtt_event: MQTT_EVENT_CONNECTED
E (4407399) MQTT_CLIENT: mqtt_message_receive: transport_read() error: errno=128
I (4407399) mqtt_event: Other event id:0
E (4407399) MQTT_CLIENT: mqtt_process_receive: mqtt_message_receive() returned -1
I (4407409) mqtt_event: MQTT_EVENT_DISCONNECTED
I (4422409) mqtt_event: Other event id:7
I (4423939) mqtt_event: MQTT_EVENT_CONNECTED
E (5027969) MQTT_CLIENT: mqtt_message_receive: transport_read() error: errno=128
I (5027969) mqtt_event: Other event id:0
E (5027979) MQTT_CLIENT: mqtt_process_receive: mqtt_message_receive() returned -1
I (5027989) mqtt_event: MQTT_EVENT_DISCONNECTED
I (5042989) mqtt_event: Other event id:7
I (5043859) mqtt_event: MQTT_EVENT_CONNECTED
解决方案
单设备测试没有问题,多设备通信就会被报错,所以通过排查设备登录 borker 时的参数,最终发现是 因为编程的bug 导致每个设备的 clientid 都是一样的,所以当有多设备登录时,clientid 冲突(类似与IP冲突)
知道问题,解决就很好办了!
我们修复获取每个设备 clientid 时的bug, 保证每个设备的 clientid 不一样,就不会再报此错误!
如果文章对您有帮助,记得点赞,关注哦!