这个很简单
只有固定报头
看下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(); } }下篇写下如何上传数据