HarmonyOS IoT设备开发实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 使用GPIO模块实现按键输入

本节将介绍如何使用HarmonyOS IoT硬件子系统的GPIO模块的相关API,通过按键控制LED灯的状态。

2.3.1 HarmonyOS IoT硬件子系统的GPIO模块与输入相关的API

HarmonyOS IoT硬件子系统的GPIO模块与输入相关的API和功能描述见表2-3。

表2-3

通过HarmonyOS IoT硬件子系统的GPIO模块的相关API实现输入功能,主要有两种方式:

(1)查询方式,应用代码通过GpioGetInputVal主动获取引脚状态。

(2)中断方式,应用代码通过GpioRegisterIsrFunc向系统注册一个中断处理函数。当状态发生改变时,该中断处理函数会被系统调用,相应的代码会被执行。

2.3.3节和2.3.4节将通过代码实例演示如何使用以上两种方式,实现通过USER按键控制LED1灯亮和灭。

2.3.2 核心板USER按键部分的原理图说明

核心板USER按键部分的原理如图2-10所示。

图2-10

在原理图中,S2 按键的一端和主控芯片的 GPIO05 引脚连接,S2 按键的另一端接地。因此,当按键被按下时,GPIO05 引脚将会接地,即处于低电平状态。

2.3.3 通过查询GPIO状态控制LED灯

1.创建gpio_input_set.c文件

在 OpenHarmony 源代码的 applications/sample/wifi-iot/app/目录下创建gpio_demo目录,在该目录下创建名为gpio_input_get.c的文件:

2.创建BUILD.gn文件

在applications/sample/wifi-iot/app/gpio_demo目录下,创建BUILD.gn文件,将内容填充为:

3.编译gpio_input_set.c文件

修改完BUILD.gn文件后,按以下步骤进行编译:

(1)修改applications/sample/wifi-iot/app目录下的BUILD.gn文件,将其中的features值修改为“gpio_demo”,修改后的主要内容如下:

(2)在OpenHarmony源代码的顶层目录下执行python build.py wifiiot命令,开始编译。

在编译成功后,在out/wifiiot子目录下可以找到编译生成的二进制文件。

4.烧录和运行

在编译成功后,即可将编译生成的二进制文件烧录到开发板,具体的操作步骤参考2.1节的相关描述。

在烧录完成后,按下复位按键,程序将会运行。在程序运行后,通过串口调试工具可以查看串口输出的日志,可编程 LED 灯应为熄灭状态。因为在代码中设置了上拉,因此在按键没有被按下时读取到的状态一定为高电平,而当GPIO09输出高电平时,LED灯应为熄灭状态。

此时,按下 USER按键,LED灯将会亮,松开 USER按键后,LED灯将会熄灭。

2.3.4 通过注册GPIO中断控制LED灯

1.创建gpio_input_int.c文件

在OpenHarmony源代码的applications/sample/wifi-iot/app/gpio_demo目录下创建gpio_input_int.c文件,将内容填充为:

2.编译gpio_input_int.c文件

在创建完gpio_input_int.c文件后,按以下步骤进行编译:

(1)修改 applications/sample/wifi-iot/app/gpio_demo 目录下的 BUILD.gn文件,将其中的sources值修改为“gpio_input_int.c”,修改后的主要内容如下:

(2)在OpenHarmony源代码的顶层目录下执行python build.py wifiiot命令,开始编译。

在编译成功后,在out/wifiiot子目录下可以找到编译生成的二进制文件。

3.烧录和运行

在编译成功后,即可将编译生成的二进制文件烧录到开发板,具体的操作步骤参考2.1节的相关描述。

在烧录完成后,按下复位按键,程序将会运行。在程序运行后,通过串口调试工具可以查看串口输出的日志,可编程 LED 灯应为亮起状态。因为g_ledPinValue变量的默认值为 WIFI_IOT_GPIO_VALUE0,把 GPIO09 引脚的输出状态设置为该值后将会输出低电平。

按下 USER 按键,LED灯将会熄灭,在松开 USER按键后,LED灯仍然熄灭,再次按下USER按键后,LED灯亮,再次松开USER按键后LED灯仍然亮。重复多次可以发现,每当 USER 按键被按下时 LED 灯的亮和灭会发生一次改变。