上篇完成了连接云平台,这篇写心跳

这个很简单

只有固定报头
看下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();
}
}下篇写下如何上传数据
我要赚赏金
