基于linux串口实现语音刷抖音

目录

1.开发逻辑图及模块

2.编程实现语音和开发板通信

3.手机接入Linux热拔插相关,打开手机开发者模式允许USB调试

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

5.最终主程序代码


1.开发逻辑图及模块

逻辑图:

基于linux串口实现语音刷抖音_第1张图片

模块

(1)语音模块: SU-03T

(2)开发板全志H616

(3)一部手机

接线语音模块TX(B7)接RX,VCC接VCC,GND接GND

配置好语音模块

2.编程实现语音和开发板通信

基于linux串口实现语音刷抖音_第2张图片

通配符编译

基于linux串口实现语音刷抖音_第3张图片

代码示例:

vi uartTool.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "wiringSerial.h"

char myserialGetchar (const int fd)
{
        char x;

        if(read (fd,&x,1) != 1)
                return -1;

        return x;
}

int myserialOpen (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 ;
	}
	if ((fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) == -1)
	return -1 ;
	fcntl (fd, F_SETFL, O_RDWR) ;
	// Get and modify current options:
	tcgetattr (fd, &options) ;
	cfmakeraw (&options) ;
	cfsetispeed (&options, myBaud) ;
	cfsetospeed (&options, myBaud) ;
	options.c_cflag |= (CLOCAL | CREAD) ;
	options.c_cflag &= ~PARENB ;
	options.c_cflag &= ~CSTOPB ;
	options.c_cflag &= ~CSIZE ;
	options.c_cflag |= CS8 ;
	options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ;
	options.c_oflag &= ~OPOST ;
	options.c_cc [VMIN] = 0 ;
	options.c_cc [VTIME] = 100 ; // Ten seconds (100 deciseconds)
	tcsetattr (fd, TCSANOW, &options) ;
	ioctl (fd, TIOCMGET, &status);
	status |= TIOCM_DTR ;
	status |= TIOCM_RTS ;
	ioctl (fd, TIOCMSET, &status);
	usleep (10000) ; // 10mS
	return fd ;
}

void serialSendstring (const int fd, const char *s)
{
	int ret;
	ret = write (fd, s, strlen (s));
	if (ret < 0)
	printf("Serial Puts Error\n");
}
int serialGetstring (const int fd, char *buffer)
{
	int n_read;
	n_read = read(fd, buffer,32);
	return n_read;
}

vi uartTool.h

int myserialOpen (const char *device, const int baud);
void serialSendstring (const int fd, const char *s);
int serialGetstring (const int fd, char *buffer);
char myserialGetchar (const int fd);

vi uartTest.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "uartTool.h"


int fd;

void* readSerial()
{
	char cmd;
	while(1){
		cmd = myserialGetchar(fd);
		switch(cmd){
		case 'N':
		printf("next\n");
		break;
		case 'P':
		printf("pre\n");
		break;
		case 'Z':
		printf("zan\n");
		break;
		case 'Q':
		printf("qu\n");
		break;
	}
	}
}
int main(int argc, char **argv)
{
	char deviceName[32] = {'\0'};
	pthread_t readt;
	if(argc < 2){
		printf("uage:%s /dev/ttyS?\n",argv[0]);
		return -1;
	}
	strcpy(deviceName, argv[1]);
	if( (fd = myserialOpen(deviceName, 115200)) == -1){
		printf("open %s error\n",deviceName);
		return -1;
	}
	pthread_create(&readt, NULL, readSerial,NULL);
	while(1){sleep(10);}
}

3.手机接入Linux热拔插相关,打开手机开发者模式允许USB调试

a. 把手机接入开发板

b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb

c. 输入命令dmesg能查看到手机接入的信息,但是输入adb devices会出现提醒 dinsufficient permissions for device: user in plugdev group; are your udev rules wrong?

d. 配置文件,以支持USB设备的热拔插,支持UDEV的机制 在/etc/udev/rules.d 文件夹下创建规则文件 cd /etc/udev/rules.d/ sudo vim 51-android.rules 在文件中添加内容 SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"

e. 在手机开发者选项中,打开USB调试,重新拔插手机

f. 手机弹出调试提醒,点确认手机调试模式

基于linux串口实现语音刷抖音_第4张图片

基于linux串口实现语音刷抖音_第5张图片

基于linux串口实现语音刷抖音_第6张图片

重新拔插一下输入命令 adb devices显示SerialNumber

4.用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.05;done;" 双击屏幕(实现点赞功能)

adb shell input keyevent 26 锁屏

5.最终主程序代码

vi uartTest.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "uartTool.h"


int fd;

void* readSerial()
{
	char cmd;
	while(1){
		cmd = myserialGetchar(fd);
		switch(cmd){
		case 'N':
			printf("next\n");
			system("adb shell input swipe 540 1300 540 500 100");
		break;
		case 'P':
			printf("pre\n");
			system("adb shell input swipe 540 500 540 1300 100");
		break;
		case 'Z':
			printf("zan\n");
			system("adb shell \"seq 3 | while read i;do input tap 350 1050 &
			input tap 350 1050 & sleep 0.05;done;\"");
		break;
		case 'Q':
			printf("qu\n");
			system("adb shell input keyevent 26");
		break;
	}
	}
}
int main(int argc, char **argv)
{
	char deviceName[32] = {'\0'};
	pthread_t readt;
	if(argc < 2){
		printf("uage:%s /dev/ttyS?\n",argv[0]);
		return -1;
	}
	strcpy(deviceName, argv[1]);
	if( (fd = myserialOpen(deviceName, 115200)) == -1){
		printf("open %s error\n",deviceName);
		return -1;
	}
	pthread_create(&readt, NULL, readSerial,NULL);
	while(1){sleep(10);}
}

编译:

 

你可能感兴趣的:(语音识别,人工智能)