第四篇 趣味小项目:语音刷抖音

2024-02-15 21:50

本文主要是介绍第四篇 趣味小项目:语音刷抖音,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、SU-03T语音识别模块

1.SU-03T简介

2.定制和烧录SDK

🔖填写产品信息

🔖定制语音SDK

🔖编译固件

🔖烧录固件

二、ADB简介

1.什么是ADB

2.OrangePi PC+使用adb连接手机

(1)安装adb

(2)adb连接手机

3.所需的几条adb命令

🔖下划屏幕

🔖上划屏幕

🔖双击屏幕

🔖锁定屏幕

三、整合串口代码,实现功能


一、SU-03T语音识别模块

1.SU-03T简介

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

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

2.定制和烧录SDK

🔖填写产品信息

        在智能公元官网,选择创建产品纯离线方案找到SU-03T→填写其他信息来到定制语音SDK的页面。(找到对于的产品SU-03T即可,其他信息不重要)

🔖定制语音SDK

        在Pin脚配置处,这里留有B2B3B6B7两组引脚可配置作为通信串口(默认B6B7可做烧录串口,非板子上标识的B0/RX0B1/TX0)。选择其中一组设置为串口UART1即可

        接下来是自定义的唤醒词和命令词。唤醒词可自行添加,由于我们要使用该模块和OrangePi PC+通过串口进行通信,需要添加串口输出信息方便调试程序,所以在离线命令词与应答语自定义这里每条命令词的控制类型要设置为串口输出,且向串口输出内容要以十六进制填入

🔖编译固件

        完成SDK定制后,开始编译固件,这里需要时间较长。完成后会短信通知。完成后下载固件,按照淘宝卖家提供的资料操作烧录新的SDK即可。

        详细教程可参考CSDN博文:SU-03离线语音模块的配置使用

🔖烧录固件

        注意串口烧录接线B6/RTDB7/TXD(交叉接到TTLUSB即可,需要接上GND),点击烧录再上电。

二、ADB简介

1.什么是ADB

        安卓调试桥(ADB – Android Debug Brige)是一个客户端-服务器(CS)端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。ADB 也是 Android SDK 中的一个工具,可以直接操作管理 Android 模拟器或者真实的 Android 设备,也就是Android程序的debug工具

2.OrangePi PC+使用adb连接手机

        说明:PC+刷的系统是最新的Armbian 22.04,尝试了几天,UbuntuDebian的系统均安装adb出现问题,猜测是/root/.android/目录下安装时没有生成允许调试的密钥,导致adb运行出问题。(在OrangePi Zero Plus2没有该问题)。在尝试百度各种解决方法并没有解决,最终更换Armbian系统解决

        ②Android手机是Redmi,没有尝试过其他,但大部分Android 差别不大。

(1)安装adb

sudo apt-get install -y adb

(2)adb连接手机

        打开手机的开发者选项(设置-我的设备-全部参数-连续点击MIUI版本进入)打开允许调试(更多设置开发者选项—USB调试)数据线连接OrangePi和手机点击手机弹出的允许调试(在Armbian没有看到权限问题导致的未认证的问题,如果有权限问题可能需要添加udev规则,详见百度)输入adb shell命令测试能否连接入手机,如下图

(关键手机端要点击弹出的确认授权,如果没有弹出,可尝试adb kill-server结束adb服务,重新插拔手机在adb start-server开启,一般会重新弹出)

3.所需的几条adb命令

(已经连接好手机,在Linux命令行运行以下命令,有的手机需要开启手机允许修改权限和模拟点击,在开发者选项界面

🔖下划屏幕

adb shell input swipe 540 1300 540 500 100

🔖上划屏幕

adb shell input swipe 540 500 540 1300 100

🔖双击屏幕

adb shell "seq 3|while read i; do input rap 350 1050 & input tap 350 1050 &sleep 0.05;done;"

🔖锁定屏幕

adb shell input keyevent 26

三、整合串口代码,实现功能

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h>int uartOpen (const char *device, const int baud){struct termios options ;speed_t myBaud ;int     status, fd ;switch (baud){case    9600:   myBaud =    B9600; break;case  115200:   myBaud =  B115200; break;default:return -2 ;}fd = open(device,O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);if(fd == -1){perror("open");return -1;}fcntl (fd, F_SETFL, O_RDWR) ;   //设置串口阻塞办法//获取和修改当前选项tcgetattr (fd, &options) ;cfmakeraw   (&options) ;            //将终端设置为原始模式8N1无流控cfsetispeed (&options, myBaud) ;    //设置输入波特率cfsetospeed (&options, myBaud) ;    //设置输出波特率options.c_cflag |= (CLOCAL | CREAD); //CLOCAL 忽略modem状态线,CREAD使能设备接收(某教材所述)options.c_cflag &= ~PARENB ;        //设置奇偶校验位——这里是无校验位options.c_cflag &= ~CSTOPB;     //设置1位的停止位options.c_cflag &= ~CSIZE ;         //用数据位掩码清空设置options.c_cflag |= CS8 ;            //设置8位的数据位/* 设置输出模式*/options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*  设置等待时间和最小接收字符 */options.c_cc [VMIN]  =   0 ;    //读取字符最少个数options.c_cc [VTIME] = 100 ;    //读取一个字符等待100分秒tcsetattr (fd, TCSANOW, &options) ; //使上面新的设置生效ioctl (fd, TIOCMGET, &status);  status |= TIOCM_DTR ;status |= TIOCM_RTS ;ioctl (fd, TIOCMSET, &status);usleep (10000) ;    //10msreturn fd ;
}int uartfd;
/* 读取串口数据的线程 */
void *recvDatas(){int cnt,readSize;char *buffer = (char *)malloc(64);while(1){/* 判断串口是否有数据 */if(ioctl(uartfd,FIONREAD,&cnt) == -1){perror("ioctl");return 0;}else{readSize = read(uartfd,buffer,cnt); //读取数据到buffer}switch(*buffer){case 'W':printf("xiaodu is ready\n");break;case 'N'://  printf("Next\n");system("adb shell input swipe 540 1300 540 500 100");break;case 'L'://  printf("Last\n");system("adb shell input swipe 540 500 540 1300 100");break;case 'P'://  printf("Prise\n");system("adb shell \"seq 3 | while read i; do input rap 350 1050 & input tap 350 1050 &sleep 0.05; done;\"");break;case 'C'://  printf("Close\n");system("adb shell input keyevent 26");break;default:printf("Unknow comand\n");}memset(buffer,'\0',sizeof(buffer));}
}int main(int argc,char **argv){pthread_t sendThread,recvThread;if(argc < 2){printf("syntax error.Usage:%s /dev/ttyS*\n",argv[0]);return -1;}/* 以波特率115200打开串口,其他相关配置已在uartOpen接口中已默认 */uartfd = uartOpen(argv[1],115200);if(uartfd == -1){printf("%s open error\n",argv[1]);return -1;}elseprintf("open %s succeed.\n",argv[1]);/* 接收数据并执行对于adb命令的线程 */pthread_create(&recvThread,NULL,recvDatas,NULL);while(1){printf("Waiting now\n");sleep(60);}return 0;
}

说明:由于笔者水平有限,文中难以避免有所错漏,敬请各读者斧正

版权声明:转载请附上原文出处链接及本声明。

这篇关于第四篇 趣味小项目:语音刷抖音的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712629

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机