专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
51好读  ›  专栏  ›  51CTO技术栈

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

51CTO技术栈  · 公众号  · 程序员  · 2020-10-26 18:05

正文

请到「今天看啥」查看全文


通常来说,一个物联网产品应当包括设备、云平台、手机 APP。我将在鸿蒙系统上移植 MQTT 协议、OneNET 接入协议,实现手机 APP、网页两者都可以远程(跨网络,不是局域网的)访问开发板数据,并控制开发板的功能。


图片来自 Pexels


理论上来说,任何以 MQTT 协议为基础的物联网云平台都可以支持接入。


关于 phomqtt 和 onenet 软件包,已提供下载,声明:所有源码均遵守开源协议~~。


支持鸿蒙系统的 harmony_mqtt 代码仓库:
https://gitee.com/qidiyun/harmony_mqtt

支持鸿蒙系统的 onenet 接入软件包仓库:
https://gitee.com/qidiyun/harmony_onenet


效果


先看下效果,我这边使用的是 OneNET 物联云平台,进入应用,可以看到如下网页界面。


该网页的温度、湿度数据由 鸿蒙开发板(Hi3861)上传,同时有一个开关按钮,可以控制开发板的 LED 灯。

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

以上界面比较简陋,但不妨碍我们使用,另外选择 OneNET 云平台的主要是原因是接入方式比较简单方便,易于学习。


另外一个是 OneNET 提供了物联网云平台、手机 APP,不需要大家自己再去实现,可以更多地将注意力放在鸿蒙系统开发上。


当我们按下开关按钮时,可以看到开发板打印信息如下:

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


软件包


我这边已经将 mqtt 和 onenet 以软件包的形式发布,两个软件包分别是:

  • onenet: 实现 onenet 接入能力。

  • 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 文件夹下是一个示例代码,代码内容如下:
#include 
#include 
#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\n", 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} \r\n", value);
        }
        sleep(1);
    }
    return 0;
}

手机APP下载:
https://open.iot.10086.cn/doc/art656.html#118

由于本节内容较多,将分成多个文章,陆续放出,目前规划如下:

  • paho mqtt client移植。 其实我之前已经有一篇文章讲了 paho mqtt 的移植,但是那篇文章只是简单的移植,并不支持多任务,这一次mqtt移植将支持多任务。

  • onenet 协议的移植与实现。 主要讲如何在 mqtt 的基础上实现 onenet 接入。

  • 如何使用 onenet 云平台。

  • 设备(鸿蒙开发板)如何接入到onenet,实现数据互传。

👇 扫码关注 HarmonyOS技术社区 👇

专注开源技术,共建鸿蒙生态


“阅读原文” 了解更多







请到「今天看啥」查看全文


推荐文章
河南新闻广播  ·  端午节,让我们一起穿越吧!
7 年前
信贷风险管理  ·  抵押权人与债权人的“真假”分离!
7 年前
漫心情  ·  爱笑的人,原来这么好!
7 年前