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 code
        set                 OHOS build settings
        env                 Show OHOS build env
        clean               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 code
        set                 OHOS build settings
        env                 Show OHOS build env
        clean               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 "[email protected]"

  • 查看生成的密钥

    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 [email protected]: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暂未实现。

相关推荐
#金毛9 分钟前
六、STM32 HAL库回调机制详解:从设计原理到实战应用
stm32·单片机·嵌入式硬件
康康这名还挺多1 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
欢乐熊嵌入式编程2 小时前
智能手表固件升级 OTA 策略文档初稿
嵌入式硬件·学习·智能手表
欢乐熊嵌入式编程2 小时前
智能手表 MCU 任务调度图
单片机·嵌入式硬件·智能手表
【云轩】2 小时前
电机密集型工厂环境下的无线通信技术选型与优化策略
经验分享·嵌入式硬件
sword devil9003 小时前
将arduino开发的Marlin部署到stm32(3D打印机驱动)
stm32·单片机·嵌入式硬件
GodKK老神灭3 小时前
STM32 变量存储
stm32·单片机·嵌入式硬件
木宁kk3 小时前
51单片机引脚功能概述
单片机·嵌入式硬件
JANYI20184 小时前
嵌入式MCU和Linux开发哪个好?
linux·单片机·嵌入式硬件
晚秋大魔王4 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
linux·开源·harmonyos