这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 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 跳转至

回复

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