基于BearPi开发板的语音控制开关(六)开发、调试
根据前文的电路连接,开始编程。
小熊派编程
根据前文对小熊派的介绍,先创建一个项目目录: ./applications/BearPi/BearPi-HM_Nano/sample/VoiceControl
,目录下边创建两个文件 VoiceControl.c
和 BUILD.gn
,内容分别为:
#include <stdio.h>
#include "ohos_init.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
// 开灯
static void LightON(char *arg) {
printf("\r\n========== 开灯 ==========\r\n");
(void) arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_14, 1); //设置GPIO_14输出高电平点亮灯
}
// 关灯
static void LightOFF(char *arg) {
printf("\r\n========== 关灯 ==========\r\n");
(void) arg;
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_14, 0); //设置GPIO_14输出低电平关闭灯
}
// GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_8, 1);//设置GPIO_8输出高电平打开电机
// GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_8, 0);//设置GPIO_8输出低电平关闭电机
static void VoiceControl(void)
{
GpioInit();
// 初始化微型电机引脚
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO); //设置GPIO_2的复用功能为普通GPIO
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_OUT); //设置GPIO_2为输出模式
// 初始化LED灯引脚
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_GPIO); //设置GPIO_2的复用功能为普通GPIO
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_GPIO_DIR_OUT); //设置GPIO_2为输出模式
// 初始化GPIO_11,设置为下降沿触发中断
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, LightON, NULL);
// 初始化GPIO_12,设置为下降沿触发中断
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, LightOFF, NULL);
}
APP_FEATURE_INIT(VoiceControl);
static_library("VoiceControl") {
sources = [
"VoiceControl.c"
]
include_dirs = [
"//utils/native/lite/include",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
]
}
文件编辑完成,编译并烧录到小熊派中。
语音识别模块编程
基于前文语音播放模块介绍中的代码修改即可。main.c
文件修改两个地方:
-
在
MCU_init()
方法最后,加上PA1=1; PA2=1; PA3=1;
,让P1.0、P1.1、P1.2引脚初始化为高电平。
-
处理指令的地方修改如下:
case CODE_KD: /*命令“复位”*/
PrintCom(”“开灯”命令识别成功r\n”); //串口输出提示信息(可删除)
PA1=~PA1; // 让BearPi CPIO_11产生下拉信号,点亮LED灯
PA3=~PA3; // 证语音模块播放提示音
Delay200ms();
PA1=~PA1; // 恢复高电平,为下一次下拉做准备
РАЗ=~РАЗ; // 恢复高电平
break:
case CODE_GD: /*命令“复位”*/
PrintCom(”“开灯”命令识别成功r\n”)://串口输出提示信息(可删除)
PA2=~PA2; // 让BearPi CPIO_12产生下拉信号,熄灭LED灯
PA3=~PA3; // 证语音模块播放提示音
Delay200ms();
PA2=~PA2; // 恢复高电平,为下一次下拉做准备
РАЗ=~РАЗ; // 恢复高电平
break:
文件编辑完成,编译并烧录到语音识别模块中。
上电测试
通过TypeC数据线将小熊派的TypeC口跟电脑连接,接下来就可以通过“小黑”唤醒语音模块,“开灯”、“关灯”控制小熊派的智慧农业扩展板的LED灯了。
到此为止,语音控制开关就制作完成了。
接入继电器
要让该语音控制开关控制家里的照明灯,还需要一个继电器,将继电器的“IN”信号引脚连接到小熊派的“IO_14”引脚,其他引脚正常连接,当然这里可能需要一个三极管。通电即可通过该语音控制开关控制照明灯了。