这是在去年小熊派开发的一款开发板(核心STM32MP157),我之前也花了一些时间来学习开发了一个应用。包含南向各种外设驱动的开发和北向hap APP的开发,最终实现了自己的构想。(之前没有时间记录,今天简单记录总结)
南向开发功能如下:
- 板载陀螺仪驱动(实现开发板倾斜角检测)
- E53IA1 温湿度传感器驱动
- E53IA1 光照传感器驱动
- E53IA1 电机控制
北向开发Hap应用实现的功能:
动画实现、温湿度数据显示,传感器状态实时更新,包含了动画、定时器、布局的使用以及触摸对应传感器实现手势切换状态(上下左右划动等)。
由于华为openharmony3.0对于智慧视觉设备支持的API非常有限,所以目前并没有实现我期待的最完美的效果。其中南向的开发我最初想用陀螺仪实现屏幕倾斜检测,然后自动旋转屏幕和UI,结果,鸿蒙嵌入式设备不支持竖屏,就这么尴尬。
功能演示如下:
南向开发总结
南向的开发还是有一些复杂的,需要遵循鸿蒙的一套驱动开发框架(HDF框架),HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,HDF驱动模型如下图所示:
我这边也是根据官方文档循序渐进开发了所需要的的驱动,并最终将E53外设板的所有外设整合为一个驱动,同时用一个数据将传感器数据一次传输到应用层,且包含bool型的传感器状态,感觉还是很方便的。这样北向的应用就可以调一次接口来实现所有传感器状态的查询了。具体的HDF框架中的理论知识,不再赘述,可自行查看文末的文档。
还有一点是北向与南向的交互是调用的JS接口来实现的,但是鸿蒙官方提供的接口非常少,应该只有两个(搞不懂,,),所以所有的与外设交互的接口,都需要自己实现,例如:小熊派例程中的操作LED的接口。这也是我为什么把E53的传感器融合为一个接口的原因,这样调用一次即可查询多个数据。
北向开发总结
北向应用的开发,反而更简单一些,因为开发方式与微信小程序几乎是一模一样的,但是也抵挡不住里面的坑多,,,还是刚刚所说的,API接口太少了,尤其是UI和动画方面。
- 智慧视觉产品支持的UI非常少
- 动画只支持XY轴的平移,且不能混合
- 布局没有相对布局
- 简单的旋转,UI控件也是不支持的,只有图片能旋转
- 很多控件的参数都不能动态更新
- 等等
所以能做的UI是非常有限的,我期间想做一个类似于鸿蒙超级终端的动画,来实现气泡的动态效果,即点击对应气泡,则对应传感器工作,功能实现了但是动画和UI折腾了很久,不尽人意(动画只能线性运动无法达到比较自然的动态效果)。
期间我还尝试做了帧动画,来实现鸿蒙开机动画的效果,在虚拟机上面是可以正常工作的而且很流畅,但是在板子里面播放及其卡顿,目前原因未知。
由于个别接口,我并未遵循鸿蒙的协议,所以并未直接提交PR给小熊派,而是自己克隆的仓库自己来维护。在开发过程中我与小熊派的老王一起联调填了很多的坑。特此记录,后续待小熊派的WIFI和网络驱动开发完毕,我会再开发更多有意思的物联网应用,敬请期待!
小熊派仓库:https://gitee.com/bearpi/bearpi-hm_micro_small
我的南向仓库:https://gitee.com/wenzhengclub/bearpi-hm_micro_small
我的北向仓库(将不断丰富):https://gitee.com/wenzhengclub/openharmony_app