OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32G070RB探测37-MQTT协议剖析3PUBLISH②

共11条 1/2 1 2 跳转至

STM32G070RB探测37-MQTT协议剖析3PUBLISH②

高工
2021-05-30 01:39:45    评分

publish协议已经解析完了,这篇写程序,实际单片机应用中很多都不用心跳,因为心跳的作用就是告诉服务器自己没有死,实际单片机应用中隔一段时间上报一次,起到一样的作用,所以很多都不用心跳,这篇依然使用onenet之前写好的库。依然是上次的文件中

写法应该跟CONNECE差不多,大概就是下边这样

void OneNet_Publish(const char *topic, const char *msg)
{

	MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0};

	UsartPrintf("Publish Topic: %s, Msg: %s\r\n", topic, msg);

	if(MQTT_PacketPublish(MQTT_PUBLISH_ID, topic, msg, strlen(msg), MQTT_QOS_LEVEL0, 0, 1, &mqttPacket) == 0)
	{
		ESP8266_SendData(mqttPacket._data, mqttPacket._len);

		MQTT_DeleteBuffer(&mqttPacket);
	}

}

其中 topic就是发送的主题,msg就是所要上传的信息

主题可以直接定义好,类似下边

const char devPubTopic[] = "$sys/407529/G0701/dp/post/json";

msg跟之前的POST一样,是json数据,这里依然使用字符串拼接的方法。

void OneNet_FillBuf(char *buf)
{
	char buf1[64];

	memset(buf1, 0, sizeof(buf1));

	sprintf(buf1, "{\"id\":123,\"dp\":{\"tem\":[{\"v\":%.1f,}],",pv.tem);

	strcat(buf, buf1);

	memset(buf1, 0, sizeof(buf1));

	sprintf(buf1, "\"hum\":[{\"v\":%d,}],",pv.hum);

	strcat(buf, buf1);

	memset(buf1, 0, sizeof(buf1));

	sprintf(buf1, "\"lux\":[{\"v\":%d,}]}}",pv.lux_16);

	strcat(buf, buf1);
}

下边就是把程序整合起来

while (1)
{
  if(time6_count1>10)
  {
  	time6_count1 = 0;
  	AHT10ReadData(&pv.tem,&pv.hum);
	BH1750_Read_Dat(pv.lux);//读取数据
	pv.lux_16 = BH1750_Dat_To_Lux(pv.lux);//转换数据
	printf("lux:%d\r\n",pv.lux_16);
	printf("tem:%.1f\r\nhum:%d%%\r\n",pv.tem,pv.hum);
  	BH1750_Send_Cmd(ONCE_H_MODE);//单次模式
	sprintf(buf,"tem:%.1f",pv.tem);
	OLED_P8x16Str(0u,4u,(uint8_t *)buf);
	sprintf(buf,"hum:%d%%",pv.hum);
	OLED_P8x16Str(64u,4u,(uint8_t *)buf);
	sprintf(buf,"lux:%d     ",pv.lux_16);
	OLED_P8x16Str(0u,6u,(uint8_t *)buf);
  }
  if(time6_count>120)
  {
  	time6_count = 0;
  	memset(PUB_BUF, 0, sizeof(PUB_BUF));
  	OneNet_FillBuf(PUB_BUF);
  	printf("PUB_BUF:%s\r\n",PUB_BUF);
  	OneNet_Publish(devPubTopic, PUB_BUF);
  }
}

5s中采集一次并刷新一次OLED屏幕,然后一分钟上传一次



专家
2021-05-30 07:26:22    评分
2楼

学习


高工
2021-05-30 11:32:50    评分
3楼

Very Nice


助工
2021-05-30 15:33:17    评分
4楼

q


高工
2021-05-30 23:46:43    评分
5楼

代码写的非常简单


高工
2021-05-31 00:03:06    评分
6楼

感谢楼主的分享,很实用了。


工程师
2021-05-31 00:11:32    评分
7楼

感谢楼主的分享,很实用了。


专家
2021-05-31 06:28:50    评分
8楼
谢谢分享!



工程师
2021-06-12 23:59:32    评分
9楼

代码写的蛮不错的


高工
2021-07-08 22:04:27    评分
10楼

谢谢分享


共11条 1/2 1 2 跳转至

回复

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