【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)

这篇具有很好参考价值的文章主要介绍了【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、编程实现语音和开发板通信

  • wiringpi库源码
  • demo.c

二、基于前面串口的代码修改实现

  • uartTool.h
  • uartTool.c
  • uartTest.c

三、ADB

  • adb控制指令

四、手机接入Linux热拔插相关

a. 把手机接入开发板
b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb
c. dmeg能查看到手机接入的信息,但是输入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. 手机弹出调试提醒,点确认手机调试模式

一、编程实现语音和开发板通信

将语音模块插入开发板并编程实现基础逻辑代码,添加串口读取一个字符的接口my_serialGetchar();

wiringpi库源码:

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互),全志H616,交互,linux,Tik Tok,VUI,ADB
【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互),全志H616,交互,linux,Tik Tok,VUI,ADB

demo.c

char myserialGetchar (const int fd)
{
	char x ;
 
	if (read(fd , &x, 1) != 1)
		return -1 ;
 
	return x ;
}
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 'B' : 
    			printf ("BACK\n") ; 	  
    			system ("adb shell input swipe 540 500 540 1300 100") ;
    			break ; 
    		case 'A' : 
    			printf ("AGREE\n") ; 
    			system ("adb shell \"seq 2 | while read i;do input tap 540 1050 & input tap 540 1050 & sleep 0.1;done;\"") ;
    			break ; 
    		case 'C' : 
    			printf ("CLOSE\n") ; 
    			system ("adb shell input keyevent 26") ;
    			break ;			
		}	
	} 
}

二、基于前面串口的代码修改实现

uartTool.h

#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"

int my_serialOpen (const char *device, const int baud) ;

void my_serialSendstring (const int fd, const char *s) ;

int my_serialGetstring (const int fd, char *buffer) ;

char my_serialGetchar (const int fd) ;

uartTool.c

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

int my_serialOpen (const char *device, const int baud)
{
	struct termios options ;   // 创建一个termios结构体,用于串口参数设置
	speed_t myBaud ;   // 创建一个速度类型的变量 myBaud,用于保存波特率
	int status, fd ;   // 创建整数类型的变量 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 ;   // 如果打开失败,返回错误代码 -1
	
	fcntl (fd, F_SETFL, O_RDWR) ;   // 设置文件状态标志
	
// Get and modify current options: 获取并修改当前的串口参数:
 
	tcgetattr (fd, &options) ;   // 获取当前的串口参数
 
	cfmakeraw (&options) ;   // 初始化 termios 结构体为原始模式
	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) 超时等待时间(十分之一秒100ms)
 
	tcsetattr (fd, TCSANOW, &options) ;   // 设置新的串口参数
 
	ioctl (fd, TIOCMGET, &status);   // 获取串口控制模式状态
 
	status |= TIOCM_DTR ;   // 设置 DTR(数据终端就绪)位
	status |= TIOCM_RTS ;   // 设置 RTS(请求发送)位
 
	ioctl (fd, TIOCMSET, &status);   // 设置串口控制模式状态
	
	usleep (10000) ;  // 暂停 10 毫秒
	
	return fd ;   // 返回串口文件描述符
}

void my_serialSendstring (const int fd, const char *s)
{
	int ret ;

	ret = write (fd, s, strlen (s)) ; 
	
	if (ret < 0) 
		printf ("Serial Sendstring Error\n") ;
}

int my_serialGetstring (const int fd, char *buffer)
{
	int n_read ;

	n_read = read (fd, buffer, 32) ; 
	
	return n_read ;
}

char my_serialGetchar (const int fd)
{
  char x ;

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

  return x ;
}

uartTest.c

#include <pthread.h>
#include "uartTool.h"

int fd;
 
void* readSerial ()
{
    char cmd ; 

    while (1) {
    		switch (cmd) { 
        		case 'N' : 
        			printf ("NEXT\n") ;
        			system ("adb shell input swipe 540 1300 540 500 100") ;
        			break ; 
        		case 'B' : 
        			printf ("BACK\n") ; 	  
        			system ("adb shell input swipe 540 500 540 1300 100") ;
        			break ; 
        		case 'A' : 
        			printf ("AGREE\n") ; 
        			system ("adb shell \"seq 2 | while read i;do input tap 540 1050 & input tap 540 1050 & sleep 0.1;done;\"") ;
        			break ; 
        		case 'C' : 
        			printf ("CLOSE\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 = my_serialOpen (deviceName, 115200)) == -1) {
        printf ("open %s error\n", deviceName) ;
        return -1;
    }
 
    pthread_create (&readt, NULL, readSerial, NULL) ;
 
    while (1) {sleep (10);}
 
}

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互),全志H616,交互,linux,Tik Tok,VUI,ADB

三、ADB

ADB(Android Debug Bridge)是一种用于与安卓设备通信和调试的命令行工具。它是Android开发工具包(Android SDK)的一部分,用于在开发过程中连接、控制和调试Android设备或模拟器。

ADB提供了一组命令,允许开发者在计算机上执行各种操作,包括安装和卸载应用程序、传输文件、执行Shell命令、查看设备日志等。使用ADB,开发者可以与设备交互,调试应用程序、分析问题并进行性能优化。

ADB可以通过USB连接或通过网络连接到Android设备。通过USB连接,开发者可以直接将设备连接到计算机,并通过ADB命令与设备进行通信。通过网络连接,开发者可以使用无线网络连接到设备,从而无需使用USB线缆。

需要注意的是,ADB在设备上需要开启开发者选项和USB调试模式才能正常使用。此外,ADB还提供了一些高级功能,如端口转发、截屏、录屏等,以支持更丰富的开发和调试需求。

总的来说,ADB是Android开发中非常重要的工具,它简化了与Android设备的通信和调试过程,为开发者提供了更好的开发环境和工作效率。

ADB(Android Debug Bridge)是一个用于在计算机和 Android 设备之间进行通信的命令行工具。它允许开发者执行各种设备操作,例如安装和调试应用程序、访问设备的 Shell、复制文件到设备或从设备复制文件等。ADB 是 Android SDK 的一部分,开发者可以使用它与 Android 设备进行交互。

以下是一些常用的 ADB 命令:

  1. 连接设备:

    adb devices
    
  2. 安装应用:

    adb install example.apk
    
  3. 卸载应用:

    adb uninstall com.example.package
    
  4. 启动应用:

    adb shell am start -n com.example.package/.MainActivity
    
  5. 查看设备信息:

    adb shell getprop
    
  6. 复制文件到设备:

    adb push localfile.txt /sdcard/
    
  7. 从设备复制文件:

    adb pull /sdcard/remotefile.txt
    
  8. 启动设备 Shell:

    adb shell
    
  9. 查看日志:

    adb logcat
    

这只是一些常见的 ADB 命令示例,ADB 提供了更多的功能,可以帮助开发者进行 Android 应用程序的开发、调试和测试。请注意,使用 ADB 前需要确保 Android 设备已启用开发者选项和 USB 调试。

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

使用ADB,开发人员可以通过USB连接将计算机与Android设备连接起来,并通过命令行界面执行各种操作。一些常见的ADB命令包括:

  • adb devices:列出当前连接的Android设备。

  • adb shell:进入设备的命令行界面。

  • adb install <path_to_apk>:安装一个Android应用程序。

  • adb uninstall <package_name>:卸载一个已安装的应用程序。

  • adb logcat:查看设备的系统日志。

  • adb pull <remote_path> <local_path>:从设备上复制文件到计算机上。

  • adb push <local_path> <remote_path>:将文件从计算机上复制到设备上。

请注意,使用ADB需要在计算机上安装Android SDK,并且设备的开发者选项和USB调试选项需要启用。使用ADB时要小心,因为一些命令可能会对设备造成不可逆的影响。

四、手机接入Linux热拔插相关

a. 把手机接入开发板
b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb
c. dmeg能查看到手机接入的信息,但是输入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 中如何挂载 iPhone 外部设备

1、把手机接入开发板

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

sudo apt-get install adb

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

在手机开发者选项中,打开USB调试,重新拔插手机,点击信任此设备
华为进入开发者模式
iPhone开发者模式
安卓同理

dmesg
adb devices
adb shell

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互),全志H616,交互,linux,Tik Tok,VUI,ADB
【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互),全志H616,交互,linux,Tik Tok,VUI,ADB

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"

USB设备的热拔插是指在计算机运行过程中插入或拔出USB设备而无需重新启动计算机或中断正在进行的工作。这种功能由操作系统提供的USB驱动程序和设备管理机制来实现。

UDEV(User Device)是一个设备管理子系统,主要用于动态配置和管理系统中的设备。它可以监测设备的插入和拔出事件,并根据预定义的规则进行自动配置和操作。

当USB设备插入计算机时,UDEV会自动检测设备并通过设备的唯一标识(如设备ID、厂商ID等)匹配相应的规则。根据规则,UDEV可以执行一系列操作,如加载适当的驱动程序、分配设备文件、设置设备权限等。

同样,当USB设备被拔出时,UDEV也会检测到设备的拔出事件,并执行相应的操作,如卸载驱动程序、释放设备文件等。

通过UDEV的机制,操作系统可以实现对USB设备的热拔插支持,提供了便利性和灵活性,使得用户可以方便地连接和断开USB设备,而无需手动进行设备配置或重新启动系统。这对于用户和开发者来说都是非常方便和实用的功能。文章来源地址https://www.toymoban.com/news/detail-832387.html

到了这里,关于【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【香橙派+DHT11】香橙派(全志H616)+ DHT11温湿度传感器的驱动教程

    最近写DHT11的代码到香橙派(全志H616)上,发现网上案例基本上都是树莓派+DHT11的居多,香橙派的少,少数找得到的代码跑起来也是不稳定或者数据相对不太准确,于是这里自己写了一篇,供大家参考和批评指正 产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出

    2024年02月11日
    浏览(18)
  • 【OrangePi Zero2 智能家居】智能家居项目的软件实现

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

    2024年02月22日
    浏览(32)
  • 全志H616开发(1)——平台介绍

    一、特性 CPU 全志H616四核64位1.5GHz高性能Cortex-A53处理器 GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2、OpenCL2.0 运行内存 1GBDDR3(与GPU共享) 存储 TF卡插槽_课程配套硬件16G,测试128G可支持、2MBSPIFlash WIFI+蓝牙 AW859A芯片、支持IEEE802.11a/b/g/n/ac、BT5.0 视频输出 MicroHDMI20a 电源 USBTypeC接口输入 外设

    2024年01月17日
    浏览(22)
  • [ARM+Linux] 基于全志h616外设开发笔记

    修改用户密码 配置网络 nmcli dev wifi  命令扫描周围WIFI热点   nmcli dev wifi connect  xxx  password xxx 命令 连接WiFi 查看ip地址的指令: ifconfig ip addr show wlan0 SSH登录         这是企业开发调试必用方式,比串口来说不用接线,前提是接入网络并获得板子IP 地址,且系统做了SSH的

    2023年04月21日
    浏览(21)
  • 全志H616交叉编译工具链的安装与使用

    交叉编译是一个平台生成另外一个平台的可执行代码,同一体系结构可以运行不同的操纵系统,同时不同的操作系统也可以在不同的体系中运行。 例如我们在Ubuntu Linux上编写orangepiZero2 的代码编译为a.out是在orangepiZero2上运行并不是在Ubuntu Linux上运行 那什么是编译呢? 编译是

    2024年02月13日
    浏览(29)
  • 扔掉你的开发板,跟我玩Mcore-全志h616

    本文转载自WhyCan Forum(哇酷开发者社区): https://whycan.com/t_10024.html 作者@leefei 这是一个1.69寸触摸小电视。使用全志H616芯片,板上硬件有mpu6050陀螺仪,USB转ttl调试串口,一个USB接口,WIFI蓝牙,一个喇叭,一个麦克风,当然还有一个1.69寸触摸手表屏。 下载固件: https://pan.baid

    2024年02月07日
    浏览(26)
  • OrangePi Zero2 TTL 连接示意图

    OrangePi 目前最方便的就是使用调试串口线进行PC与开发板进行链接。 本人使用的型号为CH340模块USB转TTL刷机线,Windows下免驱。 黑线对GND接口,绿线对RX接口,白线对TX接口。

    2024年02月16日
    浏览(24)
  • 在全志H616核桃派上实现USB摄像头的OpenCV颜色检测

    在给核桃派开发板用OpenCV读取图像并显示到pyqt5的窗口上并加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。 按照惯例,先要介绍一下opencv中常用的hsv像素格式。颜色还是那个颜色,只是描述颜色用的参数变了。h代表色调,s代表饱和度,v代表明度,比

    2024年01月23日
    浏览(22)
  • 荔枝派Zero(全志V3S)驱动开发之串口

    修改设备树打开 uart1 和 uart2,在 buildroot 移植 minicom 用来测试 uart1 和 uart2。 ①、查看 V3S 原理图,查看 uart1 和 uart2 对应的引脚 PE21 - UART1_TX PE22 - UART_RX PB0 - UART2_TX PB1 - UART2_RX ②、修改 sun8i-v3s.dtsi 在 linux 目录下 在 sun8i-v3s.dtsi 中添加 ③、修改 sun8i-v3s-licheepi-zero-dock.dts 在 lin

    2024年02月11日
    浏览(18)
  • 花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车

    常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能,如果不采用红外避障的方案,那么想要完全满足以上这些功能,摄像头、电机、传感器这类关键部件缺一不可,由此一来小车成本也就难以控制了。 但如果,有这样一款视觉循迹小车,它可

    2024年02月21日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包