当前位置:网站首页>合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)
合泰32-Onenet-WiFi模块-合泰单片机通过MQTT协议数据上云(二)
2022-07-21 05:03:00 【LiangWF22】
本篇目标
一、学习MQTT协议
二、发送温度湿度数据到OneNET
准备材料
感觉麻烦的小伙伴请移步到文末,那里有整个工程的链接。
(关于串口和WiFi部分的内容,可以查看前一篇博文,链接:这个是传送大门)
一、合泰例程
链接:https://leoeinstein.lanzous.com/iEbgskvq6pi
二、OneNET例程
链接:https://leoeinstein.lanzous.com/it2D4kzs1gf
这个是在onenet论坛里面下载的,包含有麒麟座开发板的一些工程,里面几乎包含了所有onenet支持协议的通信例程,有需要的同学可以下载。
MQTT协议
推荐博文
一、IoT – (七)MQTT协议详解
这篇在理论的层面上讲得比较详细的,可以看看看。
这篇主要结束了MQTT协议的数据包结构,我们写程序的时候需要参考到的。
报文格式
查看OneNET平台的V2.6版本的MQTT协议书可知,支持的报文格式有7种。
OneNET官网文档:https://open.iot.10086.cn/doc/multiprotocol/book/develop/mqtt/device/doc-tool.html
Type | 内容 |
---|---|
1 | JSON格式1字符串 |
2 | 二进制数据 |
3 | JSON格式2字符串 |
4 | JSON格式3字符串 |
5 | 自定义分隔符 |
6 | 带时间自定义分隔符 |
7 | 可离散浮点数数据流 |
中文版的MQTT协议文档
链接:https://pan.baidu.com/s/1NY7fDD7cUbTY2J351v45NA
提取码: kefy
代码实现
引脚连接
这次用的是USART0 口,才发现USART1的RX引脚PA5用跳线帽接到了DAP_Tx,如果需要用到的话需要接到RS232_Tx,就可以用了。
ESP8266 | HT32 |
---|---|
RX | PA2 |
TX | PA3 |
3.3V | 3.3V |
GND | GND |
合泰的延时函数
之前下载过一些合泰的工程例程,发现里面的延时函数没有用定时器来实现延时的,而是用软件来延时的。这样的话延时时间不准确,从而可能会导致程序会出现一些未知的错误。
因此在这里贴出定时器/计数器的延时实现。
有时候用用国产芯片还是不错了,现在的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/8
SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000); // (CK_AHB/8/1000) = 1ms on chip
SYSTICK_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 里面!
需要例程的同学可以在这里下载:
https://blog.csdn.net/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); //删包
}
else
UsartPrintf(USART_DEBUG, "WARN: EDP_NewBuffer Failed\r\n");
}
}
实现效果
效果
因为手上的温湿度传感器坏了,这个数据仅仅是测试的,如果用到的话需要自己修改温湿度传感器对应的函数!
OneNET平台数据流显示界面:
串口信息打印输出如下:
存在问题
一、上传图片的时候合泰芯片会卡住,不能执行代码,不清楚是代码的问题还是合泰32的问题,有空再看看。[狗头\sm]
工程链接
链接1:https://download.csdn.net/download/LiangWF22/14951875
链接2:https://leoeinstein.lanzous.com/iXpNqkzxikb
2021年1月28日
边栏推荐
- Quartz create scheduled tasks (getting started)
- Flutter通过Geolocator定位插件获经纬度调用高德周边信息接口
- In fastjason data type, there is a problem of $ref: "$.list[0]" when parsing jsonobject
- 快捷键、命令
- 类加载器及双亲委派机制
- 1.从零开始学习paddlepaddle之环境安装与基础计算
- 基于GeoServer开发的地理场景可视化系统
- fastJson数据类型中,解析JSONObject出现$ref: “$.list[0]“问题
- 数据类型Map判空 、空字符串、空key值等各种判断方法,全网最详细
- PyTorch基础知识
猜你喜欢
Jd.com's popular architect growth manual is launched, and you deserve the architect aura
One of the project optimization: the installation and use of redis cache database in the project, and strengthen the project reading operation
JSON tool class
Jenkins plug-in development - provide external access interface
[untitled]
【3D建模】Solidworks 3D建模及PrusaSlicer切片打印学习笔记
From March to June, after summary, more than 200 pages of true question notes and detailed explanations (including core test sites and 6 major factories)
5.paddlepaddle之10行代码深度学习图片分类(cifar)
Flutter obtains longitude and latitude through geolocator positioning plug-in and calls Gaode peripheral information interface
Analyse du principe du Centre de configuration nacos
随机推荐
From March to June, after summary, more than 200 pages of true question notes and detailed explanations (including core test sites and 6 major factories)
Fluent customizes form and encapsulates form components
PyTorch的模型定义
简单认清深拷贝和浅拷贝
2.从零开始学习paddlepaddle之向量计算
@Scheduled 定时任务详解
APISIX微服务网关
Nacos-注册中心原理解析
快捷键、命令
【3D建模】Solidworks 3D建模及PrusaSlicer切片打印学习笔记
整合ssm框架的项目
forms表单验证
Six relationships between UML models and classes
bert-serving
How do I optimize from 20s to 500ms
ownCloud 9.0 更好的跨服务器共享和扩展性
kingbase转换时间
Classloader and parental delegation mechanism
利用反汇编调试与补码解释0x80000000 / -1整形输出异常不一致
Development tools supporting data + code generation, yyds