0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-08 15:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

如何快速搭建基于OpenHarmony标准系统(Hi3516DV300开发板)的应用开发环境,并基于一个时钟APP示例逐步展示应用的创建、开发、调试和安装等流程。
时钟App是一款显示实时时间的应用,显示效果如下图所示:

图 1 时钟应用显示效果图

开发准备

首先需要下载和配置DevEco Studio,具体操作请参考[DevEco Studio 使用指南]

开发步骤

应用的功能是通过表盘和数字显示实时时间。

从显示效果图分析可知,页面由两个部分组成:

  • 表盘栏:主要展示一个动态的钟表,且钟表指针能准确转动。
  • 数字时间栏:主要以数字形式显示当前时间。
  • 开发前请熟悉鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]。

综上,我们可搭建一个纵向两行排列的弹性页面布局来实现界面的功能。具体开发步骤如下:

  1. 在hml文件中添加一个根节点div,注意每个hml文件中有且只能有一个根节点,代码如下:

    < div class="container" >
    < /div >
    

    class="container"表示组件使用的样式,container是index.css文件中的一个样式类,代码如下:

    .container {     
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 100%;
    }
    

    在这个样式类中,我们分别设置了根组件div的高度和宽度(注意在应用的开发过程中,除部分组件(text)外必须显式指定组件的高度和宽度,否则可能无法显示)、并将flex-direction属性设置为column,该属性表示div的子组件是垂直方向从上到下排列;这样就可以实现本节开头所说的纵向两行排列的弹性页面布局。

  2. 实现时钟转动,需要使用“stack”组件。“stack”组件的功能是堆叠容器,子组件按照顺序依次入栈,后一个子组件覆盖前一个子组件。
    在根组件下添加一个stack容器,代码片段如下:

    < div class="container" >    
        < stack class="stack" >
            < image src="/common/clock_bg.png" class="clock-bg" >< /image > < !--设置表盘图片-- >
            < image src="/common/hour_hand.png" class="clock-hand"
                   style="transform : rotate({{ hour * 30 + minute / 2 }}deg);" >< /image > < !--设置时钟图片,(hour * 30)一小时旋转30度,(minute / 2)时钟每分钟旋转的角度-- >
            < image src="/common/minute_hand.png" class="clock-hand"
                   style="transform : rotate({{ minute * 6 + second / 10 }}deg);" >< /image > < !--设置分钟图片,(minute * 6)一分钟旋转6度,(second / 10)分钟每秒钟旋转的角度-- >
            < image src="/common/second_hand.png" class="clock-hand"
                   style="transform : rotate({{ second * 6 }}deg);" >< /image > < !--设置秒钟图片,(second * 6)一秒旋转6度-- >
       < /stack >
    < /div >
    

    style="transform : rotate({{ second * 6 }}deg) 这类代码用来设置组件的旋转事件。其中transform是设置动画平移/旋转/缩放的属性,rotate是旋转动画属性,支持设置x轴和y轴两个维度的选中参数。

    在css文件中设置"stack"组件样式的高度、宽度、位置等属性,代码如下:

    .stack {
        flex-direction: column;
        justify-content: center;
        align-items: center;
        width: 100%;
        height: 50%;
    }
    

    在css文件中设置"clock-bg"组件样式的高度、宽度等属性,代码如下:

    .clock-bg {
        width: 80%;
        height: 80%;
        object-fit: scale-down;
    }
    

    在css文件中设置"clock-hand"组件为时针、分针和秒针的高度、宽度等属性,代码如下:

    .clock-hand {
        width: 25%;
        height: 65%;
        object-fit: contain;
    }
    

    index.js中会有一个定时器实时刷新时分秒变量,从而触发时间界面自动更新。对应的js代码如下:

    export default {
        timer: undefined,
        //定义参数
        data: {
          hour: 0,   //定义小时
          minute: 0, //定义分钟
          second: 0  //定义秒
        },
        onInit () {
            this.updateTime();
            this.timer = setInterval(this.updateTime, 1000)//设置1s的定时器
        },  
        updateTime: function () {       
            var nowTime = new Date()    
            this.hour = nowTime.getHours()    
            this.minute = nowTime.getMinutes()   
            this.second = nowTime.getSeconds()    
            if (this.hour < 10) {        
                this.hour = '0' + this.hour    
            }  
            if (this.minute < 10) {       
                this.minute = '0' + this.minute   
            }    
            if (this.second < 10) {      
                this.second = '0' + this.second   
            }
        },
    }
    
  3. 显示数字时间,在钟表下面以数字形式显示当前时间。在根布局内末尾加上text组件,页面结构如下:

    < text class="digit-clock" > {{ hour }}:{{ minute }}:{{ second }}< /text >
    

    class="digit-clock"设置了组件的高度和宽度以及字体大小,其代码如下:

    .digit-clock {    
        font-size: 58px;   
        width: 100%;
        margin-top: 0px;
        text-align: center;
    }
    
  4. 所有组件设置样式、动画效果和数据动态绑定,完整代码如下所示:

    • index.hml文件
      < div class="container" >
          < stack class="stack" >
              < image src="/common/clock_bg.png" class="clock-bg" >< /image >
              < image src="/common/hour_hand.png" class="clock-hand"
                     style="transform : rotate({{ hour * 30 + minute / 2 }}deg);" >< /image >
              < image src="/common/minute_hand.png" class="clock-hand"
                     style="transform : rotate({{ minute * 6 + second / 10 }}deg);" >< /image >
              < image src="/common/second_hand.png" class="clock-hand"
                     style="transform : rotate({{ second * 6 }}deg);" >< /image >
          < /stack >
          < text class="digit-clock" >{{ hour }}:{{ minute }}:{{ second }}< /text >
      < /div >
      
    • index.css文件
      .container {
          flex-direction: column;
          justify-content: center;
          align-items: center;
          width: 100%;
          height: 100%;
      }
      
      .stack {
          flex-direction: column;
          justify-content: center;
          align-items: center;
          width: 100%;
          height: 50%;
      }
      
      .digit-clock {
          font-size: 58px;
          width: 100%;
          margin-top: 0px;
          text-align: center;
      }
      
      .clock-bg {
          width: 80%;
          height: 80%;
          object-fit: scale-down;
      }
      
      .clock-hand {
          width: 25%;
          height: 65%;
          object-fit: contain;
      }
      
    • index.js:
      js文件主要用于实现App应用的逻辑交互。在本页面js文件中,需要实现如下功能:定时获取系统时间。
      export default {
          timer: undefined,
          data: {
              hour: 0,
              minute: 0,
              second: 0
          },
          onInit() {
              this.updateTime()
              this.timer = setInterval(this.updateTime, 1000)
          },
          updateTime: function () {
              var nowTime = new Date()
              this.hour = nowTime.getHours()
              this.minute = nowTime.getMinutes()
              this.second = nowTime.getSeconds()
              if (this.hour < 10) {
                  this.hour = '0' + this.hour
              }
              if (this.minute < 10) {
                  this.minute = '0' + this.minute
              }
              if (this.second < 10) {
                  this.second = '0' + this.second
              }
          },
          onDestroy() {
              clearInterval(this.timer);
          }
      }
      

签名打包

代码编写完成后,在真机设备上运行应用,需要先对应用进行签名,然后再进行打包,具体操作请参考[签名打包指导]

真机运行

应用签名打包后即可安装到开发板。安装应用前需要先完成[DevEco Device Tool的安装配置],然后将OpenHarmony系统烧录到开发板并运行。编译烧录、运行镜像的基本操作请参考快速入门手册:[标准系统Hi3516快速入门]。完成镜像运行,系统正常启动后,执行如下步骤安装或卸载应用。

  1. 开发者工具代码仓路径中获取hdc客户端。

    developtools/hdc_standard/prebuilt/windows/hdc_std.exe
    

    修改名称为hdc.exe,并将工具路径加入系统环境path变量中。

  2. 启动cmd命令窗口,执行以下命令,推送hap应用包到设备目录下并安装。

    hdc install clock.hap
    
  3. 启动应用。执行以下命令,其中ohos.samples.clock为应用包名,MainAbility为应用启动的Ability。

    hdc shell aa start -d 123 -a ohos.samples.clock.MainAbility -b ohos.samples.clock
    
  4. 卸载应用(可选)。执行以下命令,其中ohos.samples.clock为应用包名。

    hdc shell bm uninstall -n ohos.samples.clock
    

常见问题

HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿

搜狗高速浏览器截图20240326151547.png

hdc_std连接不到设备

  • 现象描述
    执行 "hdc_std list targets"命令后结果为:[Empty]
  • 可能原因和解决方法
    1. 设备没有被识别:
      在设备管理器中查看是否有hdc设备,在通用串行总线设备中会有“HDC Device”信息。如果没有,hdc无法连接。此时需要插拔设备,或者烧写最新的镜像。
    2. hdc_std工作异常:
      可以执行"hdc kill"或者"hdc start -r"杀掉hdc服务或者重启hdc服务,然后再执行hdc list targets查看是否已经可以获取设备信息。
    3. hdc_std与设备不匹配:
      如果设备烧写的是最新镜像,hdc_std也需要使用最新版本。由于hdc_std会持续更新,请从开源仓developtools_hdc_standard中获取,具体位置在该开源仓的prebuilt目录。

hdc_std运行不了

  • 现象描述
    点击hdc_std.exe文件无法运行。
  • 可能原因和解决方法
    hdc_std.exe不需要安装,直接放到磁盘上就能使用,也可以添加到环境变量中。通过打开cmd执行hdc_std命令直接使用。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    6127

    浏览量

    113460
  • 鸿蒙
    +关注

    关注

    60

    文章

    2859

    浏览量

    45363
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20725
  • Hi3516DV300
    +关注

    关注

    0

    文章

    11

    浏览量

    1103
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    鸿蒙OpenHarmony【小型系统 烧录】(基于Hi3516开发板

    针对Hi3516DV300开发板,除了DevEco Device Tool(操作方法请参考烧录))外,还可以使用HiTool进行烧录。
    的头像 发表于 04-28 15:03 2016次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>【小型系统 烧录】(基于<b class='flag-5'>Hi3516</b><b class='flag-5'>开发板</b>)

    鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

    除小型系统外,Hi3516DV300开发板还支持标准系统。此章节简要介绍如何使用命令行在Hi3516DV300开发板上进行标准系统的开发
    的头像 发表于 05-08 09:26 1655次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>南向:【<b class='flag-5'>Hi3516</b>标准系统入门(命令行方式)】

    在Linux操作Hi3516DV300鸿蒙开发板实现Helloworld程序

    本文主要介绍了如何在Linux环境下在Hi3516DV300开发板搭载鸿蒙OS实现一个简单的Helloworld程序。
    发表于 09-21 14:41

    在 Linux 操作 Hi3516DV300 鸿蒙开发板实现Helloworld 程序

    这篇文档带领大家在 Linux 操作 Hi3516DV300 鸿蒙开发板实现编写一个Helloworld 程序。算是应用开发最初级的入门了。哈哈哈
    发表于 09-22 16:16

    1-开箱贴 学习使用Hi3516DV300开发板

    ;amp;amp;seid=182104048094780090082. Hi3516DV300标准开发板出厂默认烧写了测试镜像,组装完毕,插线打开电源开关后,右上方亮红灯,等待3s左右,发出滴长鸣,灯光
    发表于 10-24 14:29

    Hi3516DV300 AI Camera

    Hi3516DV300 AI Camera资料Hi3516DV300 AI Camera可以用于神经网络的开发,是一款性能非常强劲的开发套件,这里的资料主要包含:原理图芯片资料实现He
    发表于 11-24 11:25

    请问要如何运行Hi3516DV300开发板的测试套件呢

    Hi3510DV300, 也不知道可不可以加。    选择原有的1,2,3还是选择自己添加的4.  运行测试套件,自己添加的或者是源代码中自带的。都运行不成功。请问要如何运行HiSpark_Ai_Hi3516D_One_Light_VER.B
    发表于 03-15 13:59

    OpenHarmony教程】完成Hi3516开发板的烧录

    。点击Open打开工程或源码。烧录完成源码导入后,通过以下步骤进行烧录:请连接好电脑和待烧录开发板,需要连接USB口和串口,具体可参考Hi3516DV300开发板介绍。根据Hi3516DV30
    发表于 07-27 15:33

    神经网络引擎_海思hi3516DV300核心(供二次开发)_IMX327模组

    HI3516DV300_MB 是针对海思 HI3516DV300 媒体处理芯片开发的编解码核心,用于给客户展示
    发表于 12-26 16:17 2065次阅读
    神经网络引擎_海思<b class='flag-5'>hi3516DV300</b>核心<b class='flag-5'>板</b>(供二次<b class='flag-5'>开发</b>)_IMX327模组

    [HI3516DV300开发笔记]嵌入式linux下MQTT移植

    最近......算了干笔者这行的就是一块砖,哪里缺往哪垫。简单说就是要往一款产品上用MQTT,而目前产品的开发板还没拿到,所以先在现有的HI3516DV300上移植一个MQTT并且用起来所以真的
    发表于 11-01 17:59 6次下载
    [<b class='flag-5'>HI3516DV300</b><b class='flag-5'>开发</b>笔记]嵌入式linux下MQTT移植

    Hi3516DV300开发板快速入门手册

    本文为 Hi3516CV500/Hi3516DV300/Hi3516AV300 SDK 的安装及升级使用说明,方便 使用者能快速在 Hi3516CV500/
    发表于 08-30 11:57 22次下载

    A182型Hi3516DV300开发板数据手册

    海思 Hi3516DV300 作为新一代行业专用 Smart HD IP 摄像机 SOC,集成新一代 ISP、业界最新的 H.265 视频压缩编码器,同时集成高性能 NNIE 引擎,使得Hi3516DV300 在低码率、高画质、智能处理和分析、低功耗等方面引领行业水平。
    发表于 11-02 09:53 18次下载

    OpenHarmony开发】基于hi3516dv300开发板开发的智能电子牌

    一.概述本demo是基于hi3516dv300开发板,使用OpenHarmony开发的应用。通过该应用不仅可以查看时间、日期以及对应的室内外温湿度、空气质量等,还可以查看当日的行程,让
    的头像 发表于 04-11 15:27 2176次阅读
    【<b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发</b>】基于<b class='flag-5'>hi3516dv300</b><b class='flag-5'>开发板</b><b class='flag-5'>开发</b>的智能电子牌

    鸿蒙OpenHarmony【小型系统编译】 (基于Hi3516开发板

    DevEco Device Tool支持Hi3516DV300开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率。
    的头像 发表于 04-23 15:53 1073次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>【小型系统编译】 (基于<b class='flag-5'>Hi3516</b><b class='flag-5'>开发板</b>)

    鸿蒙OpenHarmony【小型系统运行案例】 (基于Hi3516开发板

    在完成Hi3516DV300的烧录后,还需要设置BootLoader引导程序,才能运行OpenHarmony系统。
    的头像 发表于 04-23 21:00 1208次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OpenHarmony</b>【小型系统运行案例】 (基于<b class='flag-5'>Hi3516</b><b class='flag-5'>开发板</b>)