项目介绍:
本项目使用su-03t语音模块进行语音识别,将识别到的结果发送给香橙派,再由香橙派对语音模块发送的结果进行解析,最后发送指令对手机进行控制。
硬件介绍:
①:香橙派作为主控
②:语音识别模块,进行语音识别
③:一台安卓手机(鸿蒙系统也可)
su03t语音模块
1.SU-03T简介
SU-03T 是一款低成本、低功耗、小体积的离线语音识别模组,能快速应用于智能家居,各类智能小家电,86 盒,玩具,灯具等需要语音操控的产品。通过串口通信,可以实现SU-03T模块和开发板的交互,如:OrangePi PC+、STM32等。从而控制OrangePi PC+的外设(如果将我们的手机连接到OrangePi,也可以实现对手机的控制)
基本套餐应包括喇叭+模块主板+咪头(就是喇叭)+电源线,大概20元左右。(不需要拍300+的烧录器套餐。另外,买回来的模块并没有焊好针脚,需要自己焊接针脚。自备焊烙铁、锡丝等)
语音模块配置
①:登录智能公元平台(智能公元/AIOT快速产品化平台)并注册。
②: 创建产品,选择“快速智能化及创建产品”
已选产品选择“纯离线方案”
已选模组选择“SU-03T”
产品名称:灯
选择语言:中文
命令配置:
2. 记录下相关指令以及上图的识别词条,方便固件烧写后的调试。通过识别到的语音指令来控制语音模块向香橙派发送十六进制数(字符转换Ascall码)让香橙派进行指令判断来对手机进行操控。
3.设置完成之后等待生成和下载SDK
4.固件烧写
方法:使用CH340模块连接电脑,先电机烧录再上电即可进行烧录
香橙派配置:
什么是ADB
安卓调试桥(ADB - Android Debug Brige)是一个客户端-服务器的(CS)端程序。其中客户端是用来操作电脑的,服务端是Android设备。
ADB延时Android SDK中的一个工具,可以直接操作管理Android模拟器或者真实的Android设备,也就是Android程序的debug工具。
ADB安装以及udev热插拔
- 先安装adb(安卓调试桥)用于控制安卓手机。安装命令:sudo apt-get install adb
- dmseg能查看到手机接入的信息,但是输入 adb devices会出现提醒dinsufficient permissions for device: user in plugdev group; are your udevrules wrong?
- 配置文件,以支持USB设备的热插拔,支出UDEV的机制在/etc/udev/rules.d 文件夹下创建规则文件cd /etc/udev/rules.d/sudo vim 51-android.rules
- 在文件中添加内容 SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
- 设备完成之后输入:adb shell进入adb
- 在开发者选项中,打开USB调试,重新热插拔手机
- 手机弹出调试提醒,电机确认手机调试模式
用shell指令来操作手机屏幕,模拟手动滑动屏幕
- adb shell input swipe 540 1300 540 500 100 向下滑动540是水平的,1300是竖直方向,下 是500
- adb shell input swipe 540 500 540 1300 100 向上滑动
- adb shell "seq 3 | while read i;do input tap 350 1050 & input tap 350 1050 &sleep 0.01;done;" 点赞
- adb shell input keyevent 26 锁屏
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <pthread.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>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;
}
最终效果:
使用语音指令可以对手机进行操作。