概述
之前讲了怎么使用DTU模块和ONENet建立连接,连接建立起来之后就该发送数据了。
使用的材料有STM32F103VBT6开发板一块,DTU模块一个。
STM32部分
由于ONENet的MQTT协议依旧需要使用json格式发送,所以我们需要首先将我们所需要发送的数据转换为json格式。Keil5提供了便捷的json解析库,下载地址:http://www2.keil.com/mdk5/partnerpacks/ 找到Jansson,点击Pack Download即可下载,安装时为默认路径无需修改。
安装成功后打开keil5,点击菜单栏里的绿色方块,选择Data Exchange——JSON——jansson,将旁边的勾勾选上,确定返回就行了,工程导入完成。
以ONENet开发文档中所给的示例为例:
json.c
#include "stm32f10x.h"
#include "bsp_usart.h"
#include <jansson.h>
#include "json.h"
//#include "cJSON.h"
void jansson_pack_test(void)
{
json_t *root;
char *out;
int i;
i=10;
/* Build the JSON array {"id": 123,"dp": {"temperatrue": [{ "v": 100 }]}} */
root = json_pack("{s:i,s:{s:[{s:i,}]}}", "id",123,"dp","temperature","v",i);
out = json_dumps(root, JSON_ENCODE_ANY);
printf("%srn", out);
json_delete(root);
// free(root);
free(out);
}
void jansson_pack_test1(void)
{
json_t *root;
char *out;
int i;
i=20;
root = json_pack("{s:i,s:{s:[{s:i,}]}}", "id",123,"dp","humidity","v",i);
out = json_dumps(root, JSON_ENCODE_ANY);
printf("%srn", out);
json_delete(root);
// free(root);
free(out);
}
main.c
int main(void)
{
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
USART_Config();
jansson_pack_test();
Delay_Ms(300);
jansson_pack_test1();
}
通过更改i的值,可以更改ONENet数据点的值。如果你想将两条及以上的数据分开发送,那么上一次次发送jansson_pack_test()函数和下一次发送该函数中间需要至少延时100ms,否则容易造成第二条数据发送失败。
可以先将开发板接串口助手看看发送出的内容是否正确。
内容正确,我们将串口接到DTU的串口上,让STM32通过DTU向ONENet发送数据。
更多jansson库中函数的使用方法请参考:https://jansson.readthedocs.io/en/latest/apiref.html#c.json_object_clear
ONENet部分
打开ONENet的新版MQTT物联网套件,新建数据流模板,也可以不新建,当有数据发送过来时,ONENet会自动生成一条以“dp”后面内容为名称的数据流。
可以看到数据已经成功上传到ONNet了。
最后
以上就是动听发卡为你收集整理的STM32使用MQTT协议向ONENet发送数据点的全部内容,希望文章能够帮你解决STM32使用MQTT协议向ONENet发送数据点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复