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

这篇具有很好参考价值的文章主要介绍了Orangepi Zero2——手机连接Linux与语音模块串口通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

手机连接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

语音模块控制手机

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

语音模块配置

  • 进入语音模块官网 http://www.smartpi.cn/#/,配置词条和识别后的串口输出指令,输出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 ; //数据位为8
	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 Sendstring Error\n"); 
}
 
int serialGetstring (const int fd, char *buffer) 
{ 
	int n_read; 
	n_read = read(fd, buffer,32); 
	return n_read; 
}

uartTool.h文章来源地址https://www.toymoban.com/news/detail-486662.html

//香橙派获取语音固件发送的字符
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);

到了这里,关于Orangepi Zero2——手机连接Linux与语音模块串口通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OrangePi Zero2 智能家居】智能家居项目的软件实现

    一、项目整体设计 二、项目代码的前期准备 三、实现语音监听接口 四、实现socket监听接口 五、实现烟雾报警监听接口 六、实现设备节点代码 七、实现接收消息处理接口 整体的软件框架大致如下: 整个项目开启4个监听线程, 分别是: 语音监听线程:用于监听语音指令,

    2024年02月22日
    浏览(32)
  • Orangepi Zero2 全志H616(一):配置初始化和启动流程

    目录 一,Orangepi简单说明 ①为什么使用全志H616 ②基本特性 ③配套操作系统支持 二,刷机和系统启动 ①准备工具 ②登录系统 ● 开发板供电 ● 登录 ● 开发板上板载LED灯测试说明 ③修改登录密码 ④网络配置 ⑤SSH登陆开发板 三,vim设置:tab键缩进及代码行数显示 四,全志

    2024年02月04日
    浏览(26)
  • 香橙派OrangePi zero H2+ 驱动移远4G/5G模块

    目录 1 安装系统和内核文件: 1.1 下载镜像 1.2 内核头安装  1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具: 2.1 Installing Required Host Utilities 3 驱动步骤:        3.1 下载模块驱动文件 3.2 找到接近内核的文件 3.3 将v5.4.51驱动文件导入开发板中

    2024年02月10日
    浏览(41)
  • 香橙派OrangePi Zero开发板的WiFi连接

    1、准备一个 3.3v 的USB转TTL的模块,将开发板连接到电脑上 注意:引脚连接 a. USB 转 TTL 模块的 GND 接到开发板的 GND 上 b. USB 转 TTL 模块的 RX 接到开发板的 TX 上 c.USB 转 TTL 模块的 TX 接到开发板的 RX 上 2、打开串口调试工具,这里用的是MobaXterm a.Session–Serial b.找到对应COM口 c.

    2024年02月08日
    浏览(58)
  • Linux篇 三、香橙派Zero2搭建Qt环境

    一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 四、Linux修改用户名 五、Ubuntu与Linux板卡建立NFS服务 主要讲述了移植QT的过程 默认在香橙派篇2中,已经成功拉取Linux的SDK源码的情况下 如果失败的话,可以直接去官网下载交叉编译工具 此处路径和上一篇的源码

    2023年04月21日
    浏览(18)
  • 香橙派Zero2刷机和启动

    1.工具: Orangepi Zero2 全志H616开发板 PC机 TF卡及读卡器 操作系统镜像 SDFormatter TF卡的格式化工具(链接:https://pan.baidu.com/s/1XgQlcTQ7xI8Im1EB8dzpbw 提取码:xfjs ) Win32Diskimager 刷机工具(链接:https://pan.baidu.com/s/1otkgb2RjIL8UZyPtT1mAvg 提取码:xfjs ) USB转TTL,用于系统烧写后的串口登录

    2024年02月16日
    浏览(23)
  • 香橙派 Orange Pi Zero2 使用配置指南

    目前市场上树莓派产品价格居高不下,在做了一番对比后发现 香橙派 Orange Pi Zero2 相对于 树莓派 Zero 2 W 性能高了不是一点两点,最关键的是价格也很实在,64位1.5GHz高性能4核CPU,1G内存,千兆网卡,双频无线蓝牙,通用Type-C接口,小巧方便,带上官方外壳(尝鲜价)只要不到

    2024年02月08日
    浏览(41)
  • 树莓派zero2W学习四OpenCV初探索(人体检测,运动物体检测)

    这么插入 然后修改树莓派配置,开启摄像头模块。 sudo raspi-config 再次检查 vcgencmd get_camera supported = 1 detected = 0 detected = 0 表明没有接入摄像头设备,看下设备是否插反了 supported = 1 detected = 1 # detected=1 表示识别到1个摄像头 测试拍照功能 $ raspistill -o test.jpg motion 安装 motion $ sud

    2024年02月21日
    浏览(19)
  • MP3 Module 语音播放模块(Arduino和串口控制)

    Emakefun MP3语音模块内置8 MB存储空间,无需外接SD卡,若一个音效以秒计算,8M的内存可以存储两百多个音效供您选用。存储方式和使用U盘一样简单,可随时更新模块内的音效。使用上非常的简单,使用PH2.0接口,减少了接线的烦恼;支持MP3、WAV音频格式,可做指定播放,循环

    2024年02月07日
    浏览(56)
  • Arduino与LU-ASR01语音识别模块的双向串口通信实现

        之前我写了一篇《Arduino的智能语言输入实现》,讨论了Arduino与LU-ASR01之间通过串口通信实现Arduino的中文语音输入,不过那个通信是不完整的,因为LU-ASR01的串口只有一个发送端口TX,而没有接收端口RX。其实在真正的应用中,LU-ASR01通常也需要接收上位机的数据,例如为确

    2024年02月05日
    浏览(178)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包