OpenHarmony的应用以及HDF驱动开发

OpenHarmony的应用以及HDF驱动开发,第1张

OpenHarmony开源开发者成长计划“万能遥控器”项目开发者。

效果展示

如图是开发板GPIO输出到红外发射器的波形和空调遥控器输出波形的对比,可以看到波形的变化规律基本一致。

OpenHarmony的应用以及HDF驱动开发,f700200a-2542-11ed-ba43-dac502259ad0.png,第2张

图1 波形图对比  

OpenHarmony的应用以及HDF驱动开发,f71d835c-2542-11ed-ba43-dac502259ad0.jpg,第3张

图 2 设备展示

作品构思

红外遥控以其简单、稳定、可靠等优势,一直以来都是家电控制中重要的组成部分。将红外遥控融入到智能家居的网络中,不仅能拓宽智能家居的范围,同时,用户不需要更换新型设备,也能在原有的设备上体验到物联网带来的生活便利。

OpenHarmony是由开放原子开源基金会孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代、基于开源的方式,搭建一个智能终端设备 *** 作系统的框架和平台,促进万物互联产业的繁荣发展。其创新性的分布式软总线,能够有效解决底层通信协议的差异,使得分布式应用开发更加方便。

于是我们决定利用OpenHarmony在物联网的优势,推动红外遥控设备融入在家电网络,使两者的融合使用能达到1+1>2的效果。

实践过程

小熊派Micro

在硬件平台方面,我们选择新出的小熊派Micro开发板,小熊派开发板搭载了STM32MP157芯片,搭配了4.3寸LCD电容式触摸屏,并有WIFI电路及标准的E53接口

软件生态上,该开发板已完成OpenHarmony 3.0小型系统的移植,并提供了丰富的教程,同时,ST公司还开放了芯片手册,SDK包等开发工具,非常适合学生们了解学习计算机系统。ST(意法半导体)是知名的半导体公司,其芯片在覆盖工业控制、消费电子等领域,其设计的STM32系列芯片在工业控制、教育等领域占有重要的地位。

在拿到开发板后,我们首先跟着小熊派的教程搭建软件开发环境,下载编译OpenHarmony源码,然后烧录固件到开发板,终于把心心念念的OpenHarmony系统给运行起来了:

OpenHarmony的应用以及HDF驱动开发,f7418644-2542-11ed-ba43-dac502259ad0.png,第4张

图3 OpenHarmony桌面

接着我们跟着教程,分别学习了OpenHarmony的应用开发和驱动开发。当屏幕出现hello world的字样时,我就知道我们的开发已经成功了一半。

最后的教程是开发一个控制LED的应用,通过这个例程,我们学会了如何从底层软件、中间层、到应用层的全栈开发范式,对OpenHarmony *** 作系统的架构有了实际的认识。这为我们后面开发红外遥控应用打下了坚实的基础。

OpenHarmony的应用以及HDF驱动开发,f7a85284-2542-11ed-ba43-dac502259ad0.png,第5张

图4 LED应用

红外遥控原理

在初步认识了小熊派和OpenHarmony后,要开发红外遥控功能,就需要了解红外遥控的原理。我们通过网上搜集资料来了解红外协议的组成的理论知识。这里我们尝试简单说明一下红外遥控的原理:

如下图所示,以空调遥控为例。遥控器发送给空调的信息其实就是一个二进制的数组,例如:1001 1010……,数组特定位上01的组合依据协议内容有特定的含义,例如bit4和bit5为10时,表示空调风速为一级风速。

那么这个数组应该如何从遥控器到达空调呢?红外发射器可以向四周发射红外线,由于自然光中也存在红外光,所以发射器必须对红外线编码,加上38KHZ的载波。这样,接收器就只要识别38KHZ的红外光,就能确定其是由遥控器发射的,从而滤除了自然光的干扰。

下图中,发射器发射载波信号时,接收器会识别并输出低电平信号,相反,则输出高电平信号。通过控制方波的高电平时长,来表示逻辑0或1.将0和1组合起来,就构成了红外协议里的数组。

OpenHarmony的应用以及HDF驱动开发,f7eee50a-2542-11ed-ba43-dac502259ad0.jpg,第6张

图5 红外遥控原理

实践是检验理论的标准。我们决定利用身边的支持红外遥控设备,来研究其实际的协议内容。手机的万能遥控器就是一个完美的发射设备,于是我们使用一个红外接收电路,一个逻辑分析仪,来分析遥控器发出的红外信号:

OpenHarmony的应用以及HDF驱动开发,f809ad18-2542-11ed-ba43-dac502259ad0.png,第7张

图6 逻辑分析仪和接收电路

有了以上工具,我们就可以在电脑端查看红外信号波形:

OpenHarmony的应用以及HDF驱动开发,f83c4e76-2542-11ed-ba43-dac502259ad0.png,第8张

图7 红外波形图

经过以上的实践,我们的理论知识与实践经验相符合,方案的可行性得到证实,那么就可以开始软件的开发了。

PWM驱动

我们将红外发射电路接入小熊派开发板,并将其信号引脚连接到GPIOA_5。接下来就是要在这个引脚上产生特定的脉冲序列。

由前文可知,我们需要在GPIOA_5上产生一个38KHZ的载波信号。这一点可以利用STM32的TIM2实现,将TIM2的Channel1设置为PWM输出模式,设置周期为26us和占空比为50%就能实现。

难点在于,在OpenHarmony中开发驱动不像我们在stm32f1上开发驱动一样,直接使用库函数就可以。在大型的 *** 作系统中,都会有一套驱动开发的框架,规定了某一特定的驱动的编程规范。我们要开发PWM的驱动,就要遵循OpenHarmony的HDF PWM驱动开发框架的规定。

在之前的学习中,我们已了解了HDF驱动框架的开发流程。对于PWM驱动,我们参考了OpenHarmony官网的PWM开发文档以及ST的驱动HAL库,实现了符合HDF框架的PWM驱动。如图是PWM输出38KHZ的方波:

OpenHarmony的应用以及HDF驱动开发,f85622ba-2542-11ed-ba43-dac502259ad0.png,第9张

图8 38KHZ载波

IR驱动

有了载波,接下来就需要能控制载波的产生、关闭,以及持续时间(决定了逻辑值)。载波的开关在PWM驱动中已经实现了。那么问题就在于如何控制载波的持续时间。

在红外遥控中,电平的时间最低一般是600us,要实现微妙级别的计时,熟悉STM32的小伙伴很容易就会想到使用TIM定时器。是的,在这里我们使用TIM3来实现对载波定时控制的功能。

为此,我们设计了一个IR驱动,他是一个标准的HDF驱动模块,其实现的功能有:

•对应用层提供驱动服务:接收应用层下发的数组。

•控制PWM的开关时间:根据数组元素值,控制载波的时间。

我们假设应用层下发的数组是这样的格式:其元素的值表示的是电平时间,例如[500,600]的组合表示逻辑0,[500,1600]表示逻辑1.

[500,600,500,600,500,1600,...]

IR驱动获得该数组后,将数组值设为定时值,并开启定时器中断,在中断中开/关PWM、更新下一次定时时间,就能实现对载波时间的控制。

红外码库的移植

经过以上两个驱动的开发,我们能确保底层的实现是正常的,接下来就是应用的开发了。

首先要思考的就是如何得到我们想要的红外信号。每一种设备,其红外协议的物理层虽然相同,但在编码的含义上却有很大差异。要实现万能遥控的功能,不可能把所有的协议都写入代码,需要一个码库来支持。幸运的是,我们找到了这样一个开源的码库,irext。

irext分为两个部分:码库文件和解码算法。在程序中,使用解码算法,对特定的码库文件进行解码,就能得到所需的信号数组。这个数组就可以直接传递给IR驱动进行发送。解码后得到的数组如下所示:

 

[8967,4499,598,598,598,598,598,598,598,598,598,……]

 

我们在OpenHarmony的JS Engine中添加了一个JS 接口:AC_Control,在这个接口里,我们接收上层JS应用的命令,使用irext的解码算法和码库文件,将命令转换为信号数组,然后将这个数组发送给IR驱动,从而触发红外信号的产生。

应用程序开发

1、界面设计

在开始北向应用程序开发之前,我们要先把整个页面的UI布局以及样式先起一个大概的草稿,因为这样在写界面的时候效率会翻倍。根据南向的驱动想好功能及交互,设计好UI布局后,下一步就是寻找或者制作符合产品风格的图标。这两步做完后,我们就可以正式开始码代码了。

最终呈现出如下图效果:

OpenHarmony的应用以及HDF驱动开发,f8720fe8-2542-11ed-ba43-dac502259ad0.jpg,第10张

图9 APP 界面

2、交互逻辑设计

在了解了南向的具体驱动功能之后,我们再根据界面样式设计交互逻辑,比如监听用户点击温度升高,接着调用注册号的JS驱动接口,将调节温度命令发送给南向接口。其他比如开关,制冷等交互逻辑都是类似的处理逻辑。

理清楚交互逻辑之后,然后就将南向驱动自定义的JS接口在@system.app.d.ts中进行注册,注册完之后在js页面导入该文件,然后我们就可以开始编写业务逻辑了,其中有很多重复的接口逻辑,可以进行封装,使代码简洁明了,可读性也比较强。

OpenHarmony的应用以及HDF驱动开发,f888096a-2542-11ed-ba43-dac502259ad0.gif,第11张

图10 APP *** 作演示

项目收获

通过本项目初期的学习和实践,我们由浅入深地学习了OpenHarmony的应用以及HDF驱动开发,特别是对OpenHarmony的整个系统架构,包括内核、驱动框架、系统服务以及应用程序框架有了一个清晰的认识。也让我们更深刻地理解了OpenHarmony的分层设计、一次开发多端部署、分布式系统这些概念,使我们对OpenHarmony的未来发展充满兴趣与期望。

未来展望

目前我们只实现了红外遥控的应用,对于物联网来说这远远不够,接下来我们还需要考虑如何与其他OpenHarmony设备组网的问题。

当前小熊派团队正在移植OpenHarmony软总线,所以我们未能实现组网的功能。未来软总线能实现的话,就可以其他OpenHarmony设备进行组网,到时候OpenHarmony的万物互联的技术优势将得到充分的体现,OpenHarmony正在发展中,我们需要耐心以及积极地参与。

除了软总线,我们还有Plan B,例如可以选择MQTT等传统的物联网协议,来实现设备与手机之间的通信。  

      审核编辑:彭静

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/dianzi/3000690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存