mqtt客户端在从无限发布循环中收到少量订阅后重置微控制器

时间:2016-06-26 17:46:21

标签: mqtt paho

我正在尝试使用eclipse paho mqttPacket库在微控制器中实现MQTT订阅客户端。

在接收订阅主题时,mcu会在中间重置。

我正在使用python脚本运行延迟1秒的无限循环,而对于订阅,我只能获得15或17条消息并且mcu重置。

我正在使用atmega328p。 mcu代码在

之下
while(1){ 
    rc = transport_getdata(buf);
    if(rc == 0){ } 
    else if(rc < 0){
        softuart_puts("closed");
        goto stop;
    }
    else{
        flen=buf[1]-48;
        paylen=buf[3]-48;
        for(i=4;i<14;i++){
            softuart_putchar(buf[i]);
        }
        for(i=14;i<rc;i++){
            softuart_putchar(buf[i]);
        }
    }
    _delay_ms(1000);
}
stop: while(1);

我用来发布的python脚本

publish.single(topic="test/relay", payload="sheep", qos=0, retain=False, hostname="128.199.179.240", port=1883, client_id="", keepalive=60, will=None, tls=None, auth={'username': 'XXXXX', 'password': 'XXXXX'}, protocol=mqtt.MQTTv311)

1 个答案:

答案 0 :(得分:0)

hardlib感谢您的快速回复。问题是保持活跃时间,我增加了它,现在我可以收到消息。现在,当我同时订阅和发布时,mcu会重置或挂起。我忘了提到我正在使用gprs调制解调器进行tcp / ip通信。

while(1){
    rc = transport_getdata(buf);
    if((rc > 0)&&(buf[0]==0x30)){
        flen=buf[1]-48;
        paylen=buf[3]-48;
        for(i=4;i<14;i++){
            softuart_putchar(buf[i]);
        }
        for(i=14;i<rc;i++){
            softuart_putchar(buf[i]);
        }
    }
    else if(rc < 0){
        softuart_puts("closed");
        goto stop;
    }
    len = MQTTSerialize_publish(buf, buflen, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen);
    send_tcp(buf,len);
    transport_getdata(buf);
    _delay_ms(1000);
}