香橙派借助语音模块实现语音刷抖音

项目介绍:

本项目使用su-03t语音模块进行语音识别,将识别到的结果发送给香橙派,再由香橙派对语音模块发送的结果进行解析,最后发送指令对手机进行控制。

硬件介绍:

①:香橙派作为主控

香橙派借助语音模块实现语音刷抖音_第1张图片

②:语音识别模块,进行语音识别

香橙派借助语音模块实现语音刷抖音_第2张图片

③:一台安卓手机(鸿蒙系统也可)

su03t语音模块

1.SU-03T简介

        SU-03T 是一款低成本、低功耗、小体积的离线语音识别模组,能快速应用于智能家居,各类智能小家电,86 盒,玩具,灯具等需要语音操控的产品。通过串口通信,可以实现SU-03T模块和开发板的交互,如:OrangePi PC+、STM32等。从而控制OrangePi PC+的外设(如果将我们的手机连接到OrangePi,也可以实现对手机的控制)

        基本套餐应包括喇叭+模块主板+咪头(就是喇叭)+电源线,大概20元左右。(不需要拍300+的烧录器套餐。另外,买回来的模块并没有焊好针脚,需要自己焊接针脚。自备焊烙铁、锡丝等)

语音模块配置

①:登录智能公元平台(智能公元/AIOT快速产品化平台)并注册。

②: 创建产品,选择“快速智能化及创建产品”

香橙派借助语音模块实现语音刷抖音_第3张图片

香橙派借助语音模块实现语音刷抖音_第4张图片

已选产品选择“纯离线方案”

已选模组选择“SU-03T”

香橙派借助语音模块实现语音刷抖音_第5张图片

产品名称:灯

选择语言:中文

命令配置:

香橙派借助语音模块实现语音刷抖音_第6张图片

2. 记录下相关指令以及上图的识别词条,方便固件烧写后的调试。通过识别到的语音指令来控制语音模块向香橙派发送十六进制数(字符转换Ascall码)让香橙派进行指令判断来对手机进行操控。

香橙派借助语音模块实现语音刷抖音_第7张图片

3.设置完成之后等待生成和下载SDK

4.固件烧写

方法:使用CH340模块连接电脑,先电机烧录再上电即可进行烧录

香橙派借助语音模块实现语音刷抖音_第8张图片

香橙派配置:

什么是ADB

        安卓调试桥(ADB - Android Debug Brige)是一个客户端-服务器的(CS)端程序。其中客户端是用来操作电脑的,服务端是Android设备。

        ADB延时Android SDK中的一个工具,可以直接操作管理Android模拟器或者真实的Android设备,也就是Android程序的debug工具。

ADB安装以及udev热插拔

  1. 先安装adb(安卓调试桥)用于控制安卓手机。安装命令:sudo apt-get install adb
  2. dmseg能查看到手机接入的信息,但是输入 adb devices会出现提醒dinsufficient permissions for device: user in plugdev group; are your udevrules wrong?
  3. 配置文件,以支持USB设备的热插拔,支出UDEV的机制在/etc/udev/rules.d 文件夹下创建规则文件cd /etc/udev/rules.d/sudo vim 51-android.rules
  4. 在文件中添加内容 SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
  5. 设备完成之后输入:adb shell进入adb

香橙派借助语音模块实现语音刷抖音_第9张图片

  1. 在开发者选项中,打开USB调试,重新热插拔手机
  2. 手机弹出调试提醒,电机确认手机调试模式

用shell指令来操作手机屏幕,模拟手动滑动屏幕

  1. adb shell input swipe 540 1300 540 500 100 向下滑动540是水平的,1300是竖直方向,下 是500
  2. adb shell input swipe 540 500 540 1300 100 向上滑动
  3. adb shell "seq 3 | while read i;do input tap 350 1050 & input tap 350 1050 &sleep 0.01;done;" 点赞
  4. adb shell input keyevent 26 锁屏


#include 
#include 
#include 
#include 
#include 
#include 
#include 

int fd;//定义全局变量文件索引,linux下一切皆文件

void *sendxiancheng()//发送线程
{
    char *sendbuff;//发送缓冲区
    sendbuff = (char *)malloc(32);//为缓冲区开辟空间

    while(1)
    {
        memset(sendbuff, '\0', 32);
        scanf("%s", sendbuff);

        while(*sendbuff)
        {
            serialPutchar (fd, *sendbuff) ;//发送字符
            sendbuff++;//位置偏移
        }
    }

}

void *receivexiancheng()//接收进线程
{
    char a;

    while(1)
    {

        while (serialDataAvail (fd))//判断是否接收到数据
        {

            a = serialGetchar(fd);

            switch(a)
            {
                case 'N':
                    printf("下一个\n");
                    system("adb shell input swipe 540 1300 540 400 100");
                    break;

                case 'P':
                    printf("上一个\n");
                    system("adb shell input swipe 540 400 540 1300 100");

                    break;

                case 'Z':
                    printf("点赞\n");
                    system(" adb shell \"seq 4 | while read i;do input tap 350 1050 & input tap 350 1050 & sleep 0.01;done;\"");
                    break;

                case 'Q':
                    printf("退出,并锁屏\n");
                    system("adb shell input keyevent 26");

                    break;
            }
        }
    }


}

int main ()
{
    int count ;

    pthread_t sendfd;//进程标识
    pthread_t recfd;

    pthread_create(&sendfd, NULL, (void *)sendxiancheng, NULL);//创建线程
    pthread_create(&recfd, NULL, (void *)receivexiancheng, NULL);

    if ((fd = serialOpen ("/dev/ttyS5", 115200)) < 0)//判断串口设备是否打开,使用串口5所以是tty5
    {
        fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
        return 1 ;
    }




    while(1)
    {
    }


    printf ("\n") ;
    return 0;
}

最终效果:

        使用语音指令可以对手机进行操作。

你可能感兴趣的:(语音识别)