OpenHarmony鸿蒙开发( Beta5.0)智能油烟机开发实践
样例简介
本Demo是基于Hi3516开发板,使用开源OpenHarmony开发的应用。本应用主要功能有:
-
可以搜索本地指定目录的图片和视频文件,并可进行点击播放。
-
可以通过wifi接收来自手机的美食图片以及菜谱视频,让我们对美食可以边学边做(需要手机端应用配合)。
-
可以查实时看门外监控(当有人按门铃时方便查看)以及客厅或卧室的情况(在厨房时方便实时注意孩子的动向)。
运行效果图

样例原理

如上图所示,手机可以将图片或者视频发到设备测,设备可以播放接受到的图片和视频。
工程版本
- 系统版本/API版本:OpenHarmony 1.0.1 release
- hb版本: 0.2.0
- 工具链版本:llvm-linux-9.0.0
快速上手
准备硬件环境
- 预装windows系统的PC机
- Hi3516DV300 IoT Camera开发板套件
准备开发环境
安装必备软件
开发基础环境由windows 工作台和Linux编译服务器组成。windows 工作台可以通过samba 服务或ssh 方式访问Linux编译服务器。其中windows 工作台用来烧录和代码编辑,Linux编译服务器用来编译OpenHarmony代码,为了简化步骤,Linux编译服务器推荐安装Ubuntu20.04。
安装和配置Python
-
打开Linux终端。
-
输入如下命令,查看python版本号,需要使用python3.7以上版本。
python3 --version -
安装并升级Python包管理工具(pip3)。
sudo apt-get install python3-setuptools python3-pip -y sudo pip3 install --upgrade pip
安装hb
-
运行如下命令安装hb
python3 -m pip install --user ohos-build -
将hb加入系统环境变量
vim ~/.bashrc将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/.local/bin:PATH执行如下命令更新环境变量。
source ~/.bashrc -
测试hb安装结果 执行"hb -h",有打印以下信息即表示安装成功.
usage: hb OHOS build system positional arguments:{build,set,env,clean}build Build source codeset OHOS build settingsenv Show OHOS build envclean Clean output optional arguments:-h, --help show this help message and exit -
hb版本替换
本样例hb版本为0.2.0,如果当前hb版本不是0.2.0,需要替换hb版本,步骤如下(该步骤必须在openharmony的工程根目录下执行):
pip3 uninstall ohos_build pip3 install build/lite
安装交叉编译环境
在Linux编译服务器上搭建好基础开发环境后,需要安装OpenHarmony 编译Hi3516平台特有的开发环境。
将Linux shell改为bash
查看shell是否为bash,在终端运行如下命令
ls -l /bin/sh
如果显示为“/bin/sh -> bash”则为正常,否则请按以下方式修改:
sudo rm -rf /bin/sh
sudo ln -s /bin/bash /bin/sh
安装编译依赖基础软件
sudo apt-get install build-essential && sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install make && sudo apt-get install zlib* && sudo apt-get install libffi-dev
安装文件打包工具
-
安装dosfstools
sudo apt-get install dosfstools -
安装mtools
sudo apt-get install mtools -
安装mtd-utils
sudo apt-get install mtd-utils
安装Java 虚拟机环境
由于应用打包中需要依赖java虚拟机,所以我们需要安装Java 虚拟机环境.
-
安装Java运行时环境(JRE)。
sudo apt-get install default-jre -
安装Java sdk开发工具包。
sudo apt-get install default-jdk
安装hc-gen
-
下载hc-gen工具:下载地址。
-
解压hc-gen安装包到Linux服务器~/hc-gen路径下。
tar -xvf hc-gen-0.65-linux.tar -C ~/ -
设置环境变量。
vim ~/.bashrc将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/hc-gen:PATH执行如下命令更新环境变量。
source ~/.bashrc -
测试hb安装结果 执行"hb -h",有打印以下信息即表示安装成功.
usage: hb OHOS build system positional arguments:{build,set,env,clean}build Build source codeset OHOS build settingsenv Show OHOS build envclean Clean output optional arguments:-h, --help show this help message and exit -
hb版本替换
本样例hb版本为0.2.0,如果当前hb版本不是0.2.0,需要替换hb版本,步骤如下(该步骤必须在openharmony的工程根目录下执行):
pip3 uninstall ohos_build pip3 install build/lite
安装交叉编译环境
在Linux编译服务器上搭建好基础开发环境后,需要安装OpenHarmony 编译Hi3516平台特有的开发环境。
将Linux shell改为bash
查看shell是否为bash,在终端运行如下命令
ls -l /bin/sh
如果显示为“/bin/sh -> bash”则为正常,否则请按以下方式修改:
sudo rm -rf /bin/sh
sudo ln -s /bin/bash /bin/sh
安装编译依赖基础软件
sudo apt-get install build-essential && sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install make && sudo apt-get install zlib* && sudo apt-get install libffi-dev
安装文件打包工具
-
安装dosfstools
sudo apt-get install dosfstools -
安装mtools
sudo apt-get install mtools -
安装mtd-utils
sudo apt-get install mtd-utils
安装Java 虚拟机环境
由于应用打包中需要依赖java虚拟机,所以我们需要安装Java 虚拟机环境.
-
安装Java运行时环境(JRE)。
sudo apt-get install default-jre -
安装Java sdk开发工具包。
sudo apt-get install default-jdk
安装hc-gen
-
下载hc-gen工具:下载地址。
-
解压hc-gen安装包到Linux服务器~/hc-gen路径下。
tar -xvf hc-gen-0.65-linux.tar -C ~/ -
设置环境变量。
vim ~/.bashrc将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/hc-gen:PATH -
使环境变量生效。
source ~/.bashrc
安装LLVM
-
下载指定的LLVM工具:下载地址。
-
解压LLVM安装包至~/llvm路径下。
tar -zxvf llvm.tar -C ~/ -
设置环境变量。
vim ~/.bashrc将以下命令拷贝到.bashrc文件的最后一行,保存并退出。
export PATH=~/llvm/bin:$PATH -
使环境变量生效。
source ~/.bashrc
准备工程
本用例采用repo的方式从码云官仓下载系统系统源码以及开发板适配代码,使用git从gitee的sig仓库拉取设备应用代码。
配置git
- 提前注册准备码云gitee账号。
- git工具下载安装
sudo apt install git
sudo apt install git-lfs
- 生成/添加SSH密钥:生成密钥 使用gitee账号绑定的邮箱生成密钥对
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
- 查看生成的密钥
cat ~/.ssh/id_ed25519.pub
- 复制生成后的 ssh key,返回gitee个人主页,通过主页 「个人设置」->「安全设置」->「SSH 公钥」 ,将生成的“SSH密钥”添加到仓库中。
- 配置git用户信息
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
准备repo
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo ## 如果没有权限可以,可先将repo下载到当前目录在拷贝
chmod a+x /usr/local/bin/repo
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
准备系统源码
特别注意:请下载OpenHarmony 1.0.1 版本,后续会更新支持OpenHarmony其他版本
mkdir ~/OpenHarmony1.01
cd ~/OpenHarmony1.01
repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
准备开发板适配代码
本样例的代码在本版本系统下还未上主干,需要clone本仓库。
git clone https://gitee.com/openharmony-sig/knowledge_demo_smart_home.git --depth=1
准备设备侧应用代码
设备侧应用代码需要拷贝本仓库的dev/team_x/smart_hoods目录到系统的vendor/team_x目录下面,如果系统的vendor下没有team_x目录,需要新建一个。
mkdir ~/OpenHarmony1.01/vendor/team_x ## 如果OpenHarmony1.01/vendor下没有team_x的目录才需要执行
cp -rfa ~/knowledge_demo_smart_home/dev/team_x/smart_hoods ~/OpenHarmony1.01/vendor/team_x/
工程效果

编译
进入到OpenHarmony系统源码根目录下,输入hb set命令即可看到我们的应用,选择并确认即可。
hb set // 如果是第一次编译,Input code path 命令行中键入"./" 指定OpenHarmony工程编译根目录后 回车。

然后输入hb build -f命令做全量编译
hb build -f

编译成功会生成对应整个系统固件(u-boot-hi3516dv300.bin,OHOS_Image.bin, rootfs_vfat.img, userfs_vfat.img)以及我们应用对应的so文件。
其中u-boot-hi3516dv300.bin在device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot/:

OHOS_Image.bin, rootfs_vfat.img,以及userfs_vfat.img在out目录下:

应用对应的so文件在out目录下的libs/usr/下面:

以下表格为所有生成的固件及对应的位置:
| 生产固件及应用文件的名称 | 对应文件路径 | 文件说明 |
|---|---|---|
| u-boot-hi3516dv300.bin | device/hisilicon/hispark_taurus/sdk_liteos/uboot/out/boot/ | 系统启动引导程序 |
| OHOS_Image.bin | out/hispark_taurus/smart_hoods/ | 系统内核固件 |
| rootfs_vfat.img | out/hispark_taurus/smart_hoods/ | 文件系统 |
| userfs_vfat.img | out/hispark_taurus/smart_hoods/ | 用户数据分区 |
| libhoods.so | out/hispark_taurus/smart_hoods/libs/usr/ | 智能油烟机应用的库文件 |
烧录/安装
烧录工具选择
固件编译完后,是需要烧录到单板的。这里我们用的是HiTool工具烧录的。(HiTool工具下载地址:HiHope官网)
烧录步骤
打开HiTool工具,如下图:

烧写步骤按照图中标注即可。点击烧入后,烧录工具会提示重新上电,此时重启单板即可。

烧录结果
烧录成功后,会弹出如下提示,单板也会自行启动。

烧录失败的话需要根据失败提示查找一下原因。一般情况需要检查一下串口是否连接正常,网线是否正确插入,IP是否选择正常等。
查看IP的方法:当单板上电后并正确插入网线后,点击工具上刷新按钮,此时单板IP会自动添加到服务器IP列表中。

设备启动
如果是第一次烧录程序的话,单板在启动的时候需要设置bootargs,否则不能正常启动。单板第一次启动会停在hisilicon界面:

我们需要输入以下指令:
setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000";
setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=20M rw";
saveenv
reset
打包应用
本demo是以安装包的形式安装到系统中启动运行的。因此,在安装应用前,需要将应用打包成安装包。
将编译好的libhoods.so文件与工程目录下的res以及config.json文件通过压缩打包成zip格式(三个文件直接压缩,不能压缩文件夹),并将后缀名改为hap(hood.hap)。

挂载NFS
应用打包后,我们是通过NFS方式将单板挂载到本地,通过相关的指令来安装的,NFS挂载方法参照社区文章:Hi3516通过NFS挂载方式与Windows共享文件。

安装
通过nfs是单板连接到本地电脑后,我们可以通过bm安装指令进行安装。bm 安装工具在系统编译完后会自动生成,路径在:
out/hispark_taurus/smart_hoods/dev_tools/bin/

由于bm默认安装的应用为已经签名的应用,所以我们在安装前需要先将签名去掉。
bm set -s disable // 去签名
bm install -p filename // 安装应用filename, filename需要指定路径

安装完后桌面会显示对应应用的ICON,直接点击ICON即可以启动油烟机的应用。

操作体验

-
由于本demo涉及到摄像头的读写,故申请了相关的权限。在使用本demo前需要在setting中打开对应的权限。具体操作:
点击 setting-->应用-->Hoods,然后将所有应用打开。
-
本demo最主要的功能是可以接收手机端发送的图片和视频,所以设备必须和手机在同一局域网内。网络配置可以通过setting应用来进行。
点击setting-->WiFi,然后选择对应的ssid,弹出密码输入框,输完密码后点击回车即可连接网络。
-
demo可以扫描规定目录下的图片与视频,用户只需将需要播放的图片放在sdcard的image目录下(暂只支持jpg图片格式),视频文件放在sdcard的video目录下(暂只支持mp4视频格式),然后将sdcard插入到开发板,重新上电开机并运行本demo,本demo可以自动将这些文件扫描并显示出来,用户可以通过文件列表点播文件。
-
demo中的视频和图片可以通过手机发送过来的,这个时候需要手机端应用配合,通过简易的RTP协议进行文件传输,具体传输协议可参照代码中相关定义。
-
demo中的监控1和2分别对应门铃以及客厅的摄像头,该功能待完善,目前监控1对应的是设备本身的demo,监控2暂未实现。
相关文章:
OpenHarmony鸿蒙开发( Beta5.0)智能油烟机开发实践
样例简介 本Demo是基于Hi3516开发板,使用开源OpenHarmony开发的应用。本应用主要功能有: 可以搜索本地指定目录的图片和视频文件,并可进行点击播放。 可以通过wifi接收来自手机的美食图片以及菜谱视频,让我们对美食可以边学边做…...
【GBase 8c V5_3.0.0 分布式数据库常用维护命令】
一、查看数据库状态/检查(gbase用户) 1.gha_ctl monitor 使用gha_ctl monitor查看节点运行情况(跟dcs的地址和端口) gha_ctl monitor -c gbase -l http://172.20.10.8:2379 -Hall |coordinator | datanode | gtm | server|dcs:必选字段。指定查看哪类集…...
破解AI生成检测:如何用ChatGPT降低论文的AIGC率
学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 降低论文的“AIGC率”是个挑战,但有一些策略可以尝试。使用ChatGPT逐步调整和改进内容,使其更加自然和原创,降低AI检测工具识别出高“AIGC率”的概率…...
Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究
原文链接:https://tecdat.cn/?p37634 本文聚焦于利用马尔可夫递归神经网络(MarkovRNN)结合树库展开建模工作。MarkovRNN 通过整合马尔可夫特性与离散随机变量来深入探索递归神经网络中的随机转换机制,旨在高效处理具有复杂潜在信…...
setup函数子传父普通写法
父组件 <template><div><p>接收的数据: {{ receivedData }}</p><Demo4Chiren2 custom-event"handleGetWeb" /></div> </template><script> import { ref } from vue; import Demo4Chiren2 from ./demo4Chiren2.vue…...
seafaring靶场漏洞测试攻略
步骤一:打开网页 一:sql注入漏洞 步骤一:测试回显点 -1 union select 1,2,3# 步骤二:查看数据库 -1 union select 1,2,database()# 步骤三:查看表名 -1 union select 1,2,group_concat(table_name) from informati…...
简单示例,搞懂PowerBI的ALL(),ALLEXCEPT()和ALLSELECTED()的区别
假设我们有如下数据,我们来统计下各班级的人数 我们在报表页里加上 班级’二班‘ 的筛选条件,此时PowerBI已经自动为我们显示了各班级人数:一班有3人,二班有1人。 根据我们的筛选条件,我们的统计人数应该是按照筛选器&…...
Collection
java.util.Collections:是集合工具类 作用:Collections不是集合,而是集合的工具类 常用API addAll package Collections;import java.util.ArrayList; import java.util.Collections;public class CollectionsDemo {public static void main(String[]…...
19章 泛型
1.修改程序清单19-1中的GenericStack类,使用数组而不是ArrayList来实现它。你应该在给栈添加新元素之前检查数组的大小如果数组满了,就创建一个新数组。该数组是当前数组大小的两倍,然后将当前数组的元素复制到新数组中。 public class Gene…...
基于python+django+mysql+Nanodet检测模型的水稻虫害检测系统
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
计算机网络27、28——Linux命令1、2
1、虚拟机网络前方路径内容 用户名机器名:/$ $表示普通用户,#表示root用户 2、Linux不分盘,都是绝对路径 /表示根目录,表示计算机文件夹下 ~是当前用户的家,表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…...
【Python深度学习】逆强化学习(IRL):通俗揭开学习背后的奥秘
逆强化学习:揭开学习背后的奥秘 1. 引言 当我们谈论人工智能(AI)时,很多人第一时间会想到强化学习。强化学习是一种让智能体通过与环境的互动,逐渐学习到如何做出最优决策的学习方法。然而,有一种更加神奇的学习方式叫做 逆强化学习(Inverse Reinforcement Learning,…...
Linux:五种IO模型
1:五种IO模型 1:阻塞IO 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所有的套接字,默认 都是阻塞方式。 2:非阻塞 IO 非阻塞 IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK 错误码。 非阻塞 IO 往往需…...
ansible企业实战
ansible最佳实践 优化ansible速度 开启SSH长连接 修改 /etc/ansible/ansible.cfg里面的参数 ssh_args -C -o ControlMasterauto -o ControlPersist5d ControlPersist5d这个参数是设置整个长连接保持时间设置为5天,如果开启,通过SSH连接过的设备都会…...
面向对象程序设计之模板进阶(C++)
在之前我出过一篇博客介绍了模版的初阶:面向对象程序设计(C)模版初阶,接下来我们将进行模版的进阶学习,介绍关于更多模版的知识 1.非类型模版参数 模板参数分类类型形参与非类型形参 类型形参即:出现在模板参数列表中,跟在class或…...
电巢科技携Ecosmos元宇宙产品亮相第25届中国光博会
第25届中国国际光电博览会(“CIOE中国光博会”)今日在深圳国际会展中心盛大开幕。本届博览会以“光电引领未来,驱动应用创新”为主题,吸引了全球超过3700家优质光电企业参展,展示了光电产业的最新成果和前沿技术。 电…...
Redis 入门 - 收官
《Redis 入门》系列文章总算完成了,希望这个系列文章可以想入门或刚入门的同学提供帮助,希望能让你形成学习Redis系统性概念。 当时为什么要写这个系列文章,是因为我自己就是迷迷糊糊一路踩坑走过来的,我踩完的坑就踩完了&#x…...
Windows技术栈企业基础底座(1)-为基于Windows的Nginx安装证书
企业的基础环境是一个组织的信息化数字化底座。传统企业基础环境多种系统,应用交杂,多种技术栈使得深入运维成本极大,且人员知识技能较难复用,造成资源浪费。本系列旨在尝试推动这一理念, 建立Windows, 或linux聚焦的技术栈的企业…...
ThreeJS入门(002):学习思维路径
查看本专栏目录 - 本文是第 002篇入门文章 文章目录 如何使用这个思维导图 Three.js 学习思维导图可以帮助你系统地了解 Three.js 的各个组成部分及其关系。下面是一个简化的 Three.js 学习路径思维导图概述,它包含了学习 Three.js 的主要概念和组件。你可以根据这个…...
基于ssm+vue+uniapp的新生报到系统小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
