基于BearPi开发板的语音控制开关(六)开发、调试

根据前文的电路连接,开始编程。

小熊派编程

根据前文对小熊派的介绍,先创建一个项目目录: ./applications/BearPi/BearPi-HM_Nano/sample/VoiceControl,目录下边创建两个文件 VoiceControl.cBUILD.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文件修改两个地方:

  1. MCU_init() 方法最后,加上PA1=1; PA2=1; PA3=1;,让P1.0、P1.1、P1.2引脚初始化为高电平。

  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”引脚,其他引脚正常连接,当然这里可能需要一个三极管。通电即可通过该语音控制开关控制照明灯了。