200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Orangepi Zero2——手机连接Linux与语音模块串口通信

Orangepi Zero2——手机连接Linux与语音模块串口通信

时间:2023-09-13 00:24:04

相关推荐

Orangepi Zero2——手机连接Linux与语音模块串口通信

文章目录

手机连接Linuxadb控制指令语音模块控制手机语音模块配置香橙派的配置香橙派程序

手机连接Linux

1、把手机接入开发板

2、安装 adb 工具,在终端输入 adb 安装指令:

sudo apt-get install adb

3、dmesg 能查看到手机接入的信息,但是输入adb devices会出现提醒

dinsufficient permissions for device: user in plugdev group; are your udev rules wrong?

4、配置文件,以支持USB设备的热拔插,支持UDEV的机制

在/etc/udev/rules.d 文件夹下创建规则文件

cd /etc/udev/rules.d/

sudo vim 51-android.rules

在文件中添加内容 SUBSYSTEM==“usb”, ENV{DEVTYPE}==“usb_device”, MODE=“0666”

5、如果无法连接上,则需要在手机开发者选项中,打开USB调试,重新拔插手机,点击信任此设备

6、输入 adb devices 进行手机的连接

7、输入 adb shell 进行编程

adb控制指令

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

1、向下滑动。从坐标点(540,1300)用100ms滑动到坐标点(540,500)

adb shell input swipe 540 1300 540 500 100

2、 向下滑动。从坐标点(540,500)用100ms滑动到坐标点(540,1300)

adb shell input swipe 540 500 540 1300 100

3、双击。点击坐标点(540,1050)两次,间隔0.1s

adb shell "seq 2 | while read i;do input tap 540 1050 & input tap 540 1050 & sleep 0.1;done;"

4、锁屏。

adb shell input keyevent 26

语音模块控制手机

设备连接图

语音模块配置

进入语音模块官网 /#/,配置词条和识别后的串口输出指令,输出SDK使用固件烧录工具,通过串口烧录进语音识别模块的SDK先让语音固件先和电脑调试助手配合,验证数据

香橙派的配置

通过远程连接平台输出控制语句,检验是否可以操作手机完成相应的动作

香橙派程序

香橙派与语音固件通过串口进行通信

uartTest.c

#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <stdarg.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 <unistd.h> #include <pthread.h> #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 'L': printf("last\n"); system("adb shell input swipe 540 500 540 1300 100");break; case 'Z': printf("zan\n"); system("adb shell \"seq 2 | while read i;do input tap 540 1050 & input tap 540 1050 & sleep 0.1;done;\"");break; case 'Q': printf("quit\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);} }

uartTool.c

#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <stdarg.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 "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 ; //1位停止位options.c_cflag &= ~CSIZE ; //用数据位掩码清空数据位设置options.c_cflag |= CS8 ; //数据位为8options.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 Sendstring Error\n"); }int serialGetstring (const int fd, char *buffer) {int n_read; n_read = read(fd, buffer,32); return n_read; }

uartTool.h

//香橙派获取语音固件发送的字符char myserialGetchar (const int fd);int myserialOpen (const char *device, const int baud);void serialSendstring (const int fd, const char *s);int serialGetstring (const int fd, char *buffer);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。