一、项目简介
1、项目描述
本项目的场景是智能家居。通过openharmony源码与hi3861开发板进行智能门锁的项目开发。最后可以通过舵机进行开关锁与通过手机的数字管家进行密码解锁。
2、技术要求
- 掌握C, JS, Java语言
- 掌握原子化服务原理(Fa ability)
- 熟悉 Git 等代码版本管理工具
- 熟悉OpenHarmony的设备端开发,包括构建系统。
- 熟悉IoT物联网协议(MQTT)
- 熟悉VS code与Deveco studo软件
3、资源获取
- 在Gitee上获取openharmony源码(本次案例用3.0版本作为演示)
- 在Gitee上获取MQTT协议与VS code的编译工具组件
- 操作系统Ubuntu华为云中国镜像
https://www.huaweicloud.com/theme/77291-1-U
二、环境搭建
1、软件准备
从华为开发者联盟下载开发软件
VS code:https://device.harmonyos.com/cn/develop/ideDeveco:https://developer.harmonyos.com/cn/develop/deveco-studio
*端口驱动官网:http://www.wch.cn/downloads/CH341SER_EXE.html。
选择合适的驱动下载后通过USB线即可让板子成功与电脑连接(可以去设备管理器去看看这个驱动有没有安装成功。
2、环境介绍
操作系统:Ubuntu
编译构建:Python
包管理工具:HPM
NPM 环境:Node.js
Openharmony版本:3.0
USB串口驱动:CH341SER.exe
烧录软件:Hiburn
开发板:润和HI3861
华为硬件开发工具:
Visual Studio Code(DevEco Device Tool)
- 软件简介:华为把一个集成的硬件编制软件作为插件放在了这个代码编辑器里,里面包含代码编辑,编译,烧录等功能。是一个集成环境。
- 环境配置组件与软件插件:第一次下载软件后需要自行载入编译组件,在上述的1.3中可以获取组件。下载完通过点击VS code左侧的插件标识后在QUICK ACCESS/主界面/工程设置里点击<添加用户组件>即可添加。
*在Ubuntu环境下的VS code目前只能通过快捷键复制粘贴地址或通过点击文件夹图标选择路径,不可以使用鼠标进行复制粘贴。
*这里所载入的插件版本号与描述可以随意填,不影响正常使用。 - 必须的插件:C/C++,C/C++ GNU Global,Chinese (Simplified),CodeLLDB。
推荐的插件:GN , Better C++ Syntax, CMake Tools, Remote – SSH。
上图为编译组件安装好的样子
华为系统开发工具:
Deveco Studio *手动在设置中下载SDK
三、协议移植
1、协议介绍
Mqtt是用于设备与服务器通讯的一种协议,使设备可以上报订阅下发信息。
2、协议移植
通过上述连接下载之后复制粘贴到openharmony的third part(第三方库)中。
3、验证成功
从开发板厂商官网下载实验demo进行实验。因为目前大多数厂商使用的都是openharmony 1.0代码作为演示,不同的源码版本在编译规则和文件名上都会不同,所以在下载的源码中的头文件吊起等也要修改才能接入mqtt协议。
Mqtt最重要要吊起的功能文件在
/home/open/Downloads/code-v3.0-LTS/OpenHarmony/third_party/pahomqtt/MQTTClient-C/src里,特别是liteOS中
上图为上报-订阅-下发 的原理图
四、解决方案
1、用户角度
在嵌入式设备开发这块先要考虑用户的操作界面(前端)才能考虑实现功能。
2、实现原理
- 交互流程:由智能门锁订阅的命令下发的主题经过代理服务器可下发到用户终端,用户终端就可收到通知。反之用户终端也可发送命令通过代理服务器到达智能门锁。
- 生命周期管理:对设备使用方的 RPC 对象进行管理,请求进行校验以及对更新后的进行回调处理。
3、解锁方案
1.交互流程:由智能门锁订阅的命令下发的主题经过代理服务器可下发到用户终端,用户终端就可收到通知。反之用户终端也可发送命令通过代理服务器到达智能门锁。
2.生命周期管理:对设备使用方的 RPC 对象进行管理,请求进行校验以及对更新后的进行回调处理。
1.无网解锁(可以通过WIFI,局域网WIFI AP TCP,蓝牙发送固定码进行连接):仅携带门禁卡:使用开发板上自带的NFC可以直接与手机NFC卡或实体门禁卡碰一碰解锁。
2.仅针对于NFC识别:非正确门禁卡则指示灯闪烁,正确门禁卡则亮五秒钟。
3.可使用 WIFI AP&TCP:或通过发送蓝牙固定码到服务端(门锁)。
4.WIFI TCP 实现:通过手机打开WIFI热点交换数据,建立一个TCP连接(给门禁锁进入一个新的局域网中)。
5.AP 实现:通过AP搭建桥梁,使在服务端没有连接(断开)默认WIFI的时候起到中继作用。(相当于给信号不好的WIFI一个中继,不适宜在完全断网时使用)
6.蓝牙开锁实现:使用蓝牙芯片使智能锁和手机实现时间同步与密码文传输,将手机蓝牙固定码发送到智能锁中,从而不通过WIFI与NFC就可以将该智能锁进行打开。在初始化蓝牙模块后进行串口发送。
7.云端:首先去华为云平台创建产品与定义模型(获取IP与端口),然后获取上报和下发的通信数据,随后云平台就会给出设备ID与密钥。(后面会详细介绍)
五、编译
1、进行编译即可(首先输入hb set)
选中此文件夹后进行编译(hb build)
Hb(命令行编译)编译与烧录
在Hb环境配置好之后所用到的命令:
hb set //产出config.json文件hb build //进行编译。
hb clean //删除config.json文件用于下次正常编译,不然会报错。
注意:在hb set后可通过上下键选择要编译的文件然后回车,选中后即可build。
另外还可以通过VS_code进行编译。
作为一款华为集成的硬件编程插件,里面是有编译与烧录功能的。
如果要进行编译首先要在PROJECT TASKS中点击build,同时在编译过程中在源码里会产生config.json文件。在源码修改之后需要点击clean去清除config.json,然后才能继续点击Build进行编译。编译成功后点击Upload烧录到开发板中。