这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» STM32» STM32G070RB探测35-MQTT协议剖析2PINGREQ

共7条 1/1 1 跳转至

STM32G070RB探测35-MQTT协议剖析2PINGREQ

高工
2021-05-30 01:38:27 打赏
上篇完成了连接云平台,这篇写心跳

这个很简单

只有固定报头

看下onenet写好的驱动

//========================================================== // 函数名称: MQTT_PacketPing // // 函数功能: 心跳请求组包 // // 入口参数: mqttPacket:包指针 // // 返回参数: 0-成功 1-失败 // // 说明: //========================================================== uint1 MQTT_PacketPing(MQTT_PACKET_STRUCTURE *mqttPacket) { MQTT_NewBuffer(mqttPacket, 2); if(mqttPacket->_data == NULL) return 1; /*************************************固定头部***********************************************/ //固定头部----------------------头部消息------------------------------------------------- mqttPacket->_data[mqttPacket->_len++] = MQTT_PKT_PINGREQ << 4; //固定头部----------------------剩余长度------------------------------------------------- mqttPacket->_data[mqttPacket->_len++] = 0; return 0; }

也很简单

看下心跳返回

固定的返回值 0xd0 0x00

照着上篇中的CONNECT写一个心跳发送并解析
void OneNet_PINGREQ(void) { MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0}; if(!MQTT_PacketPing(&mqttPacket)) { ESP8266_SendData(mqttPacket._data, mqttPacket._len); uint16_t delay_count = 5000; while(delay_count--) { HAL_Delay(1); ipd_rx = ESP8266_GetIPD(); if(ipd_rx.len>0) { if(ipd_rx.IPD_buff[0]==0xd0&&ipd_rx.IPD_buff[1]==0x00) { UsartPrintf("Tips: 心跳成功 \r\n"); MQTT_DeleteBuffer(&mqttPacket); Clear_Usart(&usart1_rx); //清空缓存 return; } } } UsartPrintf("ERR: 心跳失败 \r\n"); Clear_Usart(&usart1_rx); //清空缓存 } }
在主程序中添加,一分钟心跳一次
while (1) { if(time6_count>120) { time6_count = 0; OneNet_PINGREQ(); } }
下篇写下如何上传数据


专家
2021-05-30 07:27:06 打赏
2楼

收藏


高工
2021-05-30 11:32:21 打赏
3楼

Very Nice



高工
2021-05-30 23:46:25 打赏
4楼

不错的技术


工程师
2021-06-12 23:59:17 打赏
5楼

讲解的挺细致的


高工
2021-07-09 21:44:22 打赏
6楼

谢谢分享


助工
2023-08-17 16:55:15 打赏
7楼

感谢分享


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]