我正在尝试使用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)
答案 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);
}