鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

前言

今天使用鸿蒙OS,做一个在智慧终端上进行LOT上云的智慧家居项目。我们想实现的场景是这样的:云端WEB有一个控制界面,能够操控家房间里的灯和风扇,同时将房间里温度、湿度、光强实时显示出来。

案例思路

先讲一下大致的思路,可以分为两个部分:先配置云服务器,再编写底层MCU的业务代码,实现数据采集与联网上报。逻辑上没有复杂的东西,但贵在走通整个流程。和普通RTOS上云的方案差不多,具体差异在软件方面。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

设备接入华为云平台之前,需要在平台注册用,已注册过的可忽略这一步。华为云地址:https://www.huaweicloud.com/

登陆以后,在华为云首页单击,进入产品控制终端,这里包含了各种云服务的产品。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

点击左侧的 ,找到,选择 并立即使用。或者在搜索输入 跳转过去。下次选择这个服务时,直接点击搜索栏下的最近访问的服务,就能快速进入相应的服务当中,非常方便。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

创建完毕,弹出产品创建成功的窗口消息。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案
定义一个服务模型,「服务ID」随便起名字,这里填入Agriculture,「服务类型」填入senser。点击确定,完成服务的添加。
鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案
点击「添加属性」,以温度为例,「属性名称」填写Temperature,「属性描述」填写温度,「数据类型」为整型,「访问权限」为可读,剩下的默认即可。其中「属性名称」的内容,要与后面我们在MCU中发送的信息保持一致,这里先提一句。
鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案
鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

新增输入参数和服务属性差不多,这里是字符串的数据类型,输入枚举值,用英文逗号做分割。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

我们往下进行,点击「设备」,选择「注册设备」填写设备属性,「所属资源空间」选择默认账户的即可,「所属产品」选择上面自己创建的产品,「设备标识码」填写senser,「设备名称」填写house,其他保持默认,点击确定完成创建。

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

接着我们利用获取的密钥,生成直连MQTT所需的ClentID,通过这个链接跳转:https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案
我们列一张表,看看每一个文件夹具体承担了哪些职能:
文件名称 描述
applications BearPi-HM_Nano开发板应用案例
base 系统的基础服务,主要使用DFX子系统、启动文件、硬件适配接口等
kernel 内核子系统
ohos_bundles 厂家提供的一些组件和服务
third_party 第三方组件
foundation 系统服务框架子系统、WAN开发
headers 存放main头文件
src 存放 main源文件
utils 公共基础库
test XTS认证子系统
vendor 硬件抽象层
build 编译构建子系统
out 存放编译文件
bin 存放二进制文件

适合本文项目的代码示例,在applications文件夹,具体目录为:。这里列一下目录文件结构:

文件名称 描述
E53_IA1.c 扩展板驱动
oc_mqtt_profile_package.c 打包和配置MQTT数据
oc_mqtt.c MQTT连接服务
wifi_connet.c wifi连接服务
iot_cloud_oc_sample.c 业务逻辑代码

我们主要要用到的API如下,具体实现的细节,可以到源文件里面去阅读。可以分为初始化和数据上传两个部分。

初始化

设备信息

void device_info_init(char *client_id, char * username, char *password);

设置设备信息,在调用oc_mqtt_init()前要先设置设备信息

参数 描述
返回 描述
0 成功
-1 获得设备信息失败
-2 mqtt 客户端初始化失败

华为IoT平台 初始化

int oc_mqtt_init(void);

华为IoT平台初始化函数,需要在使用 华为IoT平台 功能前调用。

参数 描述
返回 描述
0 成功
-1 获得设备信息失败
-2 mqtt 客户端初始化失败

设置命令响应函数

void oc_set_cmd_rsp_cb(void(*cmd_rsp_cb)(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size));

设置命令响应回调函数。

参数 描述
recv_data 接收到的数据
recv_size 数据的长度
resp_data 响应数据
resp_size 响应数据的长度
返回 描述

数据上传

设备消息上报

int oc_mqtt_profile_msgup(char *deviceid,oc_mqtt_profile_msgup_t *payload);

是指设备无法按照产品模型中定义的属性格式进行数据上报时,可调用此接口将设备的自定义数据上报给平台,平台将设备上报的消息转发给应用服务器或华为云其他云服务上进行存储和处理。

参数 描述
deviceid 设备id
payload 要上传的消息
返回 描述
0 上传成功
1 上传失败

设备上报属性数据

int oc_mqtt_profile_propertyreport(char *deviceid,oc_mqtt_profile_service_t *payload);

用于设备按产品模型中定义的格式将属性数据上报给平台。

参数 描述
deviceid 设备id
payload 要上传的消息
返回 描述
0 上传成功
1 上传失败

属性上报和消息上报的区别,请查看消息通信说明

网关批量上报属性数据

int oc_mqtt_profile_gwpropertyreport(char *deviceid,oc_mqtt_profile_device_t *payload);

用于批量设备上报属性数据给平台。网关设备可以用此接口同时上报多个子设备的属性数据。

参数 描述
deviceid 设备id
payload 要上传的消息
返回 描述
0 上传成功
1 上传失败

属性设置的响应结果

int oc_mqtt_profile_propertysetresp(char *deviceid,oc_mqtt_profile_propertysetresp_t *payload);

参数 描述
deviceid 设备id
payload 消息
返回 描述
0 上传成功
1 上传失败

属性查询响应结果

int oc_mqtt_profile_propertygetresp(char *deviceid,oc_mqtt_profile_propertygetresp_t *payload);

参数 描述
deviceid 设备id
payload 消息
返回 描述
0 上传成功
1 上传失败

将命令的执行结果返回给平台

int oc_mqtt_profile_cmdresp(char *deviceid,oc_mqtt_profile_cmdresp_t *payload);
平台下发命令后,需要设备及时将命令的执行结果返回给平台,如果设备没回响应,平台会认为命令执行超时。

参数 描述
deviceid 设备id
payload 要上传的消息
返回 描述
0 上传成功
1 上传失败

编写业务逻辑

连接平台

准备好上文我们获取的连接信息(ClientId、Username、Password),一个可以上网的WIFI(账户和密码),注意不可以用5G频段。

推送数据

当需要上传数据时,需要先拼装数据,然后通过oc_mqtt_profile_propertyreport上报数据。代码示例如下:


鸿蒙OS南向开发(二)LOT上云 ·智慧家居方案

来源:zevorn

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月21日
下一篇 2022年1月21日

相关推荐