BearPi-HM Micro 鸿蒙应用开发体验

el/2024/4/13 13:56:15

这是在去年小熊派开发的一款开发板(核心STM32MP157),我之前也花了一些时间来学习开发了一个应用。包含南向各种外设驱动的开发和北向hap APP的开发,最终实现了自己的构想。(之前没有时间记录,今天简单记录总结)

请添加图片描述
在这里插入图片描述

南向开发功能如下

  • 板载陀螺仪驱动(实现开发板倾斜角检测)
  • E53IA1 温湿度传感器驱动
  • E53IA1 光照传感器驱动
  • E53IA1 电机控制

北向开发Hap应用实现的功能
动画实现、温湿度数据显示,传感器状态实时更新,包含了动画、定时器、布局的使用以及触摸对应传感器实现手势切换状态(上下左右划动等)。

由于华为openharmony3.0对于智慧视觉设备支持的API非常有限,所以目前并没有实现我期待的最完美的效果。其中南向的开发我最初想用陀螺仪实现屏幕倾斜检测,然后自动旋转屏幕和UI,结果,鸿蒙嵌入式设备不支持竖屏,就这么尴尬。

功能演示如下:

把鸿蒙3.0的应用装进折叠开发板

在这里插入图片描述

南向开发总结

南向的开发还是有一些复杂的,需要遵循鸿蒙的一套驱动开发框架(HDF框架),HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,HDF驱动模型如下图所示:
在这里插入图片描述
我这边也是根据官方文档循序渐进开发了所需要的的驱动,并最终将E53外设板的所有外设整合为一个驱动,同时用一个数据将传感器数据一次传输到应用层,且包含bool型的传感器状态,感觉还是很方便的。这样北向的应用就可以调一次接口来实现所有传感器状态的查询了。具体的HDF框架中的理论知识,不再赘述,可自行查看文末的文档。
在这里插入图片描述
还有一点是北向与南向的交互是调用的JS接口来实现的,但是鸿蒙官方提供的接口非常少,应该只有两个(搞不懂,,),所以所有的与外设交互的接口,都需要自己实现,例如:小熊派例程中的操作LED的接口。这也是我为什么把E53的传感器融合为一个接口的原因,这样调用一次即可查询多个数据。

北向开发总结

北向应用的开发,反而更简单一些,因为开发方式与微信小程序几乎是一模一样的,但是也抵挡不住里面的坑多,,,还是刚刚所说的,API接口太少了,尤其是UI和动画方面。

  • 智慧视觉产品支持的UI非常少
  • 动画只支持XY轴的平移,且不能混合
  • 布局没有相对布局
  • 简单的旋转,UI控件也是不支持的,只有图片能旋转
  • 很多控件的参数都不能动态更新
  • 等等

所以能做的UI是非常有限的,我期间想做一个类似于鸿蒙超级终端的动画,来实现气泡的动态效果,即点击对应气泡,则对应传感器工作,功能实现了但是动画和UI折腾了很久,不尽人意(动画只能线性运动无法达到比较自然的动态效果)。
在这里插入图片描述
CSDN图片大小的无奈

期间我还尝试做了帧动画,来实现鸿蒙开机动画的效果,在虚拟机上面是可以正常工作的而且很流畅,但是在板子里面播放及其卡顿,目前原因未知。
在这里插入图片描述

由于个别接口,我并未遵循鸿蒙的协议,所以并未直接提交PR给小熊派,而是自己克隆的仓库自己来维护。在开发过程中我与小熊派的老王一起联调填了很多的坑。特此记录,后续待小熊派的WIFI和网络驱动开发完毕,我会再开发更多有意思的物联网应用,敬请期待!

小熊派仓库:https://gitee.com/bearpi/bearpi-hm_micro_small
我的南向仓库:https://gitee.com/wenzhengclub/bearpi-hm_micro_small
我的北向仓库(将不断丰富):https://gitee.com/wenzhengclub/openharmony_app


http://www.ngui.cc/el/4994720.html

相关文章

涂鸦NBIOT OpenCPU开发快速入门(一)

今天我作为涂鸦的固件开发者的身份为大家详细讲解NB模组在涂鸦平台的快速对接。基于涂鸦完善的蜂窝通讯机制,使用涂鸦的OpenCPU SDK,可以实现真正的产品级对接!用户只需要关注业务实现,无需过度关注底层基线逻辑以及物联网通讯流程…

涂鸦NBIOT OpenCPU开发快速入门(二)

根据上节最后面的环境搭建部分教程,下载完成SDK以后,解压后即可进行编译。(如果你之前已经具备了类似的开发环境直接使用即可) 1、OpenCPU SDK框架结构: 由下图可见,用户在使用OpenCPU SDK开发时&#xf…

scanf函数常见问题

scanf函数录入字母和字符时注意: %d识别十进制数,在未取到值时,遇见空格、回车、tab时跳过,取其后面的值,直至取到十进制的数(跳过的字符,会从缓冲区中释放),遇见字母直…

leetcode 21:合并两个有序链表 python3解答

题目描述: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣&#xf…

leetcode1:两数之和 python3解法

题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 例: 给定 …

C++复制构造函数和构造函数调用小困惑

最近看清华大学郑莉老师的C课程&#xff0c;过C的基础知识。遇到了一点小问题。 B站清华大学C课程 在进行类组合例子的调试中&#xff0c;有些不解的地方。先上代码。 #include "pch.h" #include <iostream> using namespace std;class Point { public: …

前置++与后置++区别

对于前置与后置以前只知道它们的两点区别&#xff1a; 1. 前置&#xff1a;先加再用&#xff1b;后置&#xff1a;先用后加。 2. i效率比i效率高&#xff1b; 今日又添加一项&#xff1a; 3. 前置可操作&#xff0c;后置不可操作 只知其果&#xff0c;不明其因非学者姿态。 下…

C++基础(code)

C基础学习&#xff08;code&#xff09; 算是突袭学习吧&#xff0c;可能不是很细。 英语渣&#xff0c;但还是可能会写一些英文注释&#xff0c;提高提高~~ #include <iostream> using namespace std;//函数声明&#xff0c;要么定义在main前,要么在main前面自己添加定…

NEO4J 安裝

NEO4J 安裝 安裝教程&#xff1a; https://blog.csdn.net/sinat_36226553/article/details/108541370 注意事項 不能安裝在 D:\Program Files下&#xff0c;會有不能識別’.ps1’ 拓展名&#xff0c;猜測是不能識別目錄中的空格導致。

Elasticsearch 进阶学习

先上两个学习链接&#xff1a; Elasticsearch学习笔记_KISS-CSDN博客 Elasticsearch API查询_森四杨的博客-CSDN博客 1. es分布式集群 1. 搭建过程 2. 概念 节点、分片&#xff08;Shards&#xff09;、副本(Replicas)、索引、文档、字段、映射对索引中的文档可以进行索引…