在鸿蒙开发板上使用MQTT协议、OneNET实现第一个物联网项目
https://harmonyos.51cto.com/#zz
通常来说,一个物联网产品应当包括设备、云平台、手机APP。我将在鸿蒙系统上移植MQTT协议、OneNET接入协议,实现手机APP、网页两者都可以远程(跨网络,不是局域网的)访问开发板数据,并控制开发板的功能。
理论上来说,任何以MQTT协议为基础的物联网云平台都可以支持接入。
关于phomqtt 和onenet软件包,已提供下载,声明:所有源码均遵守开源协议。
支持鸿蒙系统的 harmony_mqtt 代码仓库:
https://gitee.com/qidiyun/harmony_mqtt
支持鸿蒙系统的 onenet接入软件包仓库:
https://gitee.com/qidiyun/harmony_onenet
3.11.1 效果
先看下效果,我这边使用的是OneNET物联云平台,进入应用,可以看到如下网页界面。该网页的温度、湿度数据由 鸿蒙开发板(Hi3861)上传,同时有一个开关按钮,可以控制开发板的LED灯。
![](https://s2.51cto.com/oss/202011/18/21b8e871faac99a0977e719babf225ca.jpg)
另外,也提供一个手机APP,
![](https://s5.51cto.com/oss/202011/18/5b24869c080f113d05e70dbb36dc1a0b.jpg)
以上界面比较简陋,但不妨碍我们使用,另外选择OneNET云平台的主要是原因是接入方式比较简单方便,易于学习,另外一个是OneNET提供了物联网云平台、手机APP,不需要大家自己再去实现,可以更多地将注意力放在鸿蒙系统开发上。
当我们按下开关按钮时,可以看到开发板打印信息如下:
![](https://s5.51cto.com/oss/202011/18/64cd27f7e4292fee6d34df460fe47513.jpg)
云平台发送过来的时一串json字符串,key为“ledSwitch”,值为1时,可以看到开发板的LED灯亮,值为0时,开发板LED灯灭。
3.11.2 软件包
我这边已经将mqtt 和 onenet 以软件包的形式发布,两个软件包分别是:
(1)onenet——实现onenet 接入能力
(2)pahomqtt——实现MQTT协议功能
![](https://s5.51cto.com/oss/202011/18/1f0034aa88cba71727920f03e38c9e4c.jpg)
只需要将这两个软件包放到 third_party 文件夹下即可。然后修改code-1.0vendorhisihi3861hi3861BUILD.gn 文件,将pahomqtt和onenet加入到编译中。
![](https://s6.51cto.com/oss/202011/18/ebc78c5eaf39a4dcf55faff0218a5de2.jpg)
我们来看下onenet 文件夹:
![](https://s3.51cto.com/oss/202011/18/9192d1cf8e958870fdd3e32033eb2e6c.jpg)
其中 onenet.h 是头文件
onenet_mqtt.c 是全部源码,它基于paho mqtt的MQTTClient编程模型。
另外 samples文件夹下是一个示例代码,代码内容如下:
- #include <stdio.h>
- #include <unistd.h>
- #include "MQTTClient.h"
- #include "onenet.h"
- #define ONENET_INFO_DEVID "597952816"
- #define ONENET_INFO_AUTH "202005160951"
- #define ONENET_INFO_APIKEY "zgQdlB5y3Bi9pNd2bUYmS8TJHIY="
- #define ONENET_INFO_PROID "345377"
- #define ONENET_MASTER_APIKEY "gwaK2wJT5wgnSbJYz67CVRGvwkI="
- extern int rand(void);
- void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
- {
- printf("recv data is %.*s ", recv_size, recv_data);
- *resp_data = NULL;
- *resp_size = 0;
- }
- int mqtt_test(void)
- {
- device_info_init(ONENET_INFO_DEVID, ONENET_INFO_PROID, ONENET_INFO_AUTH, ONENET_INFO_APIKEY, ONENET_MASTER_APIKEY);
- onenet_mqtt_init();
- onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);
- while (1)
- {
- int value = 0;
- value = rand() % 100;
- if (onenet_mqtt_upload_digit("temperature", value) < 0)
- {
- printf("upload has an error, stop uploading");
- //break;
- }
- else
- {
- printf("buffer : {"temperature":%d} ", value);
- }
- sleep(1);
- }
- return 0;
- }
手机APP下载:https://open.iot.10086.cn/doc/art656.html#118
由于本节内容较多,将分成多个文章,陆续放出,目前规划如下:
(1)paho mqtt client移植。其实我之前已经有一篇文章讲了paho mqtt的移植,但是那篇文章只是简单的移植,并不支持多任务,这一次mqtt移植将支持多任务。
(2)onenet协议的移植与实现。主要讲如何在mqtt的基础上实现onenet接入。
(3)如何使用onenet云平台
(4)设备(鸿蒙开发板)如何接入到onenet,实现数据互传。
https://harmonyos.51cto.com/#zz
相关文章
- 详解云中断的原因和损失以及如何降低云中断的损失
- 数字孪生,能给无线通信带来什么?
- 亚马逊云科技与拳头游戏携手重塑电竞体验
- 研究发现,人工智能语言模型 GPT-3 在智商测试中明显胜过人类大学生
- 什么是 NetDevOps,它如何帮助 IT 实现业务目标?
- 组织提效——新常态下的人才战略No.1
- 人工智能在B2B交易中的作用
- 信令分析:KDDI重大故障为何持续60小时之久?
- Moka重磅发布《2022上半年CHO人才战略调研报告》
- 了解使用专用5G的中立主机网络
- 图解网络:什么是DHCP动态主机配置协议?
- 亚马逊云科技发布游戏行业解决方案 赋能中国游戏企业高质量全球化发展
- 2022年的网络虚拟化市场发展现状
- ChatGPT「克星」来了!文章作者是人是AI几秒检出,华人小哥元旦假期搞定,服务器已挤爆
- 虚拟电厂调度国际竞赛:阿里达摩院求解器获冠军
- 图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子
- 2022年五大云虚拟化趋势
- Kubernetes 中暴露服务的新方法
- 效率碾压DALL·E 2和Imagen,谷歌新模型达成新SOTA,还能一句话搞定PS
- 图解网络:TCP三次握手背后的原理,为啥两次握手不可以?