[文章]

在鸿蒙开发板上使用MQTT协议、OneNET实现第一个物联网项目

2020-10-25 21:57:33  918 HarmonyOS 鸿蒙系统 鸿蒙OS
分享
4
通常来说,一个物联网产品应当包括设备、云平台、手机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灯。

另外,也提供一个手机APP,

以上界面比较简陋,但不妨碍我们使用,另外选择OneNET云平台的主要是原因是接入方式比较简单方便,易于学习,另外一个是OneNET提供了物联网云平台、手机APP,不需要大家自己再去实现,可以更多地将注意力放在鸿蒙系统开发上。
当我们按下开关按钮时,可以看到开发板打印信息如下:

云平台发送过来的时一串json字符串,key为“ledSwitch”,值为1时,可以看到开发板的LED灯亮,值为0时,开发板LED灯灭。

3.11.2 软件包
我这边已经将mqtt 和 onenet 以软件包的形式发布,两个软件包分别是
(1)onenet——实现onenet 接入能力
(2)pahomqtt——实现MQTT协议功能

只需要将这两个软件包放到 third_party 文件夹下即可。然后修改
code-1.0\vendor\hisi\hi3861\hi3861\BUILD.gn 文件,将pahomqtt和onenet加入到编译中


我们来看下onenet 文件夹:

其中 onenet.h 是头文件
onenet_mqtt.c 是全部源码,它基于paho mqtt的MQTTClient编程模型。
另外 samples文件夹下是一个示例代码,代码内容如下:
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include "MQTTClient.h"
  4. #include "onenet.h"

  5. #define ONENET_INFO_DEVID "597952816"
  6. #define ONENET_INFO_AUTH "202005160951"
  7. #define ONENET_INFO_APIKEY "zgQdlB5y3Bi9pNd2bUYmS8TJHIY="
  8. #define ONENET_INFO_PROID "345377"
  9. #define ONENET_MASTER_APIKEY "gwaK2wJT5wgnSbJYz67CVRGvwkI="

  10. extern int rand(void);


  11. void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
  12. {
  13.     printf("recv data is %.*s\n", recv_size, recv_data);

  14.     *resp_data = NULL;
  15.     *resp_size = 0;
  16. }

  17. int mqtt_test(void)
  18. {
  19.         
  20.     device_info_init(ONENET_INFO_DEVID, ONENET_INFO_PROID, ONENET_INFO_AUTH, ONENET_INFO_APIKEY, ONENET_MASTER_APIKEY);
  21.     onenet_mqtt_init();

  22.     onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);

  23.         while (1)
  24.     {
  25.                 int value = 0;
  26.                
  27.         value = rand() % 100;

  28.         if (onenet_mqtt_upload_digit("temperature", value) < 0)
  29.         {
  30.             printf("upload has an error, stop uploading");
  31.             //break;
  32.         }
  33.         else
  34.         {
  35.             printf("buffer : {\"temperature\":%d} \r\n", value);
  36.         }
  37.         sleep(1);
  38.     }
  39.         return 0;
  40. }
复制代码

手机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,实现数据互传。

严政新 2020-10-26 15:20:11
下一步就是接入智能音箱,语音控制喽
回复

举报

黄少浪 2020-10-26 16:07:31
老师您好,我跟着你的教程移植后报错,我下载mqtt和onenet包解压,然后把harmony_mqtt 和 harmony_onenet 复制到thirdparty,
harmomy_onenet 文件夹我只复制你教程里边的4个文件,然后在code-1.0\vendor\hisi\hi3861\hi3861\BUILD.gn中添加
"//third_party/harmony_mqtt:pahomqtt_static",
"//third_party/harmony_onenet:onenet_static" 后编译报错
我是一个一个添加,先添加了mqtt然后编译过了,再添加onenet后再编译就报错了
主要一句就是:
'utf-8' codec can`t decode byte 0xc7 in position 89: invalid continuation byte

我自己按照你的教程添加自己编写的第三方库的教程也是出现这个问题
1回复

举报

评论

您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发文章