1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)

合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)

时间:2023-11-07 04:45:16

相关推荐

合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)

本篇目标

一、学习MQTT协议

二、发送温度湿度数据到OneNET

准备材料

感觉麻烦的小伙伴请移步到文末,那里有整个工程的链接。

关于串口和WiFi部分的内容,可以查看前一篇博文,链接:这个是传送大门)

一、合泰例程

链接:/iEbgskvq6pi

二、OneNET例程

链接:/it2D4kzs1gf

这个是在onenet论坛里面下载的,包含有麒麟座开发板的一些工程,里面几乎包含了所有onenet支持协议的通信例程,有需要的同学可以下载。

MQTT协议

推荐博文

一、IoT – (七)MQTT协议详解

这篇在理论的层面上讲得比较详细的,可以看看看。

二、MQTT协议-MQTT协议解析(MQTT数据包结构)

这篇主要结束了MQTT协议的数据包结构,我们写程序的时候需要参考到的。

报文格式

查看OneNET平台的V2.6版本的MQTT协议书可知,支持的报文格式有7种。

OneNET官网文档:https://open./doc/multiprotocol/book/develop/mqtt/device/doc-tool.html

中文版的MQTT协议文档

链接:/s/1NY7fDD7cUbTY2J351v45NA

提取码: kefy

代码实现

引脚连接

这次用的是USART0 口,才发现USART1的RX引脚PA5用跳线帽接到了DAP_Tx,如果需要用到的话需要接到RS232_Tx,就可以用了。

合泰的延时函数

之前下载过一些合泰的工程例程,发现里面的延时函数没有用定时器来实现延时的,而是用软件来延时的。这样的话延时时间不准确,从而可能会导致程序会出现一些未知的错误。

因此在这里贴出定时器/计数器的延时实现。

有时候用用国产芯片还是不错了,现在的stm32很贵![狗头保护]

delay.c

#include "delay.h"#include "usart.h"/* Private variables ---------------------------------------------------------------------------------------*/static vu32 DelayTime;/* Private function prototypes -----------------------------------------------------------------------------*/void Delay(u32 nTime);void TimingDelay(void);void delay_init(){/* SYSTICK configuration */SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK); // Default : CK_AHB/8SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000); // (CK_AHB/8/1000) = 1ms on chipSYSTICK_IntConfig(ENABLE);// Enable SYSTICK Interrupt}void delay_ms(u32 nTime){/* Enable the SysTick Counter */SYSTICK_CounterCmd(SYSTICK_COUNTER_CLEAR);SYSTICK_CounterCmd(SYSTICK_COUNTER_ENABLE);DelayTime = nTime;while(DelayTime != 0);/* Disable SysTick Counter */SYSTICK_CounterCmd(SYSTICK_COUNTER_DISABLE);/* Clear SysTick Counter */SYSTICK_CounterCmd(SYSTICK_COUNTER_CLEAR);}/*********************************************************************************************************//*** @brief Decrements the TimingDelay variable.* @retval None***********************************************************************************************************/void TimingDelay(void){if(DelayTime != 0){DelayTime--;}}

其实这个在合泰官方例程了也有,就在example–>SYSTICK文件里面,经过简单的移植、修改就可以了。

这个的定时中断服务函数在ht32f5xxxx_01_it.c里面!

需要例程的同学可以在这里下载:

/LiangWF22/article/details/113181696

OneNET部分代码

void OneNet_SendData(void) from onenet.c

//==========================================================//函数名称:OneNet_SendData////函数功能:上传数据到平台////入口参数:type:发送数据的格式////返回参数:无////说明://==========================================================void OneNet_SendData(void){MQTT_PACKET_STRUCTURE mqttPacket = {NULL, 0, 0, 0};//协议包char buf[128];short body_len = 0, i = 0;UsartPrintf(USART_DEBUG, "Tips:OneNet_SendData-MQTT\r\n");memset(buf, 0, sizeof(buf));body_len = OneNet_FillBuf(buf);//获取当前需要发送的数据流的总长度if(body_len){if(MQTT_PacketSaveData(DEVID, body_len, NULL, 5, &mqttPacket) == 0)//封包{for(; i < body_len; i++)mqttPacket._data[mqttPacket._len++] = buf[i];ESP8266_SendData(mqttPacket._data, mqttPacket._len);//上传数据到平台UsartPrintf(USART_DEBUG, "Send %d Bytes\r\n", mqttPacket._len);MQTT_DeleteBuffer(&mqttPacket);//删包}elseUsartPrintf(USART_DEBUG, "WARN:EDP_NewBuffer Failed\r\n");}}

实现效果

效果

因为手上的温湿度传感器坏了,这个数据仅仅是测试的,如果用到的话需要自己修改温湿度传感器对应的函数!

OneNET平台数据流显示界面:

串口信息打印输出如下:

存在问题

一、上传图片的时候合泰芯片会卡住,不能执行代码,不清楚是代码的问题还是合泰32的问题,有空再看看。[狗头\sm]

工程链接

链接1:/download/LiangWF22/14951875

链接2:/iXpNqkzxikb

1月28日

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。