【ARM-Linux】项目,语音刷抖音项目

文章目录

  • 所需器材
  • 装备操作
  • SU-03T语音模块配置
  • 代码(没有用wiring库,自己实现串口通信)
  • 结束

所需器材

可以百度了解以下器材

orangepi-zero2全志开发板

su-03T语音识别模块

USB-TTL模块

一个安卓手机

一根可以传输的数据线

装备操作

安卓手机开启,开发者模式,并开启USB调试功能。
插入开发板,跳出什么就点允许就行(否则可能没有权限开发板无权访问手机系统)

SU-03T语音模块配置

进入网站:http://www.smartpi.cn/
这个模块其实进入网站点点点就可以完成,非常方便,但是没有什么技术含量

配置SU-03T模块
设置串口通信
在这里插入图片描述
设置唤醒词
在这里插入图片描述
设置命令触发
在这里插入图片描述
设置触发之后发送的命令
在这里插入图片描述
到此点击身材sdk,安静等待就可以了,搞好之后需要,将sdk上传至语音模块

将USB-TTL模块插入电脑,并将TX,RX与模块的TX,RX交叉相接。
将下载的sdk文件,打开,上传即可(图就不放了,较简单)

可以使用串口工具测试一下~

测试没问题将语音模块RX和TX接入开发板的RX,TX端口

代码(没有用wiring库,自己实现串口通信)

由于没有用wiring库所以多出俩个工具文件。当然也是用source insight分析源码cv编写,没写注释,将就看吧,这俩个文件,比较难啃,都是和linux内核打交道struct termios options;

uartTools.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>

int myserialOpen (const char *device, const int baud)
{
	speed_t myBaud ;
	int     status, fd ;	
	struct termios options;
	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 ;			//数据位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 myserialPutchar (const int fd, const unsigned char c)
{
	int ret;
	ret = write (fd, &c, 1) ;
	if (ret < 0)
		printf("Serial Putchar Error\n");
}

void mySerialSendString(const int fd,const unsigned char *str)
{
	if(write(fd,str,strlen(str)) < 0){
		printf("Serial sendString Error\n");
	}
}

int mySerialGetchar(const int fd, unsigned char *c)
{
	if(read(fd,c,1) !=1){
		return -1 ;
	}
	
}

int mySerialGetString(const int fd, unsigned char *str)
{
	if(read(fd,str,32) != 32){
		return -1;
	}
}

uartTools.h

#ifndef _UART_TOOLS_H_
#define _UART_TOOLS_H_
int myserialOpen (const char *device, const int baud);
void myserialPutchar (const int fd, const unsigned char c);
void mySerialSendString(const int fd,const unsigned char *str);
int mySerialGetchar(const int fd, unsigned char *c);
int mySerialGetString(const int fd, unsigned char *str);

#endif

uart.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 <pthread.h>

#include "uartTools.h"

int fd;

void *recvHandler()
{
	char *recvBuf;
	
	recvBuf = (char *)malloc(sizeof(char)*32);
	if(recvBuf == NULL){
		printf("recvHandler malloc fail\n");
	}
	while(1){
		memset(recvBuf,'\0',strlen(recvBuf));
		mySerialGetchar(fd,recvBuf);
		switch(*recvBuf){
			case 'N':
				printf("next\n");
				system("adb shell input swipe 540 1300 540 500 100");		//adb 命令,模拟手机滑动屏幕
				break;
			case 'P':
				printf("pre\n");
				system("adb shell input swipe 540 500 540 1300 100");
				break;
			case 'Z':
				system("adb shell \"seq 2 | while read i;do input tap 350 1050 & input tap 350 1050 &sleep 0.2;done;\"");
				printf("zan\n");
				break;
			case 'Q':
				printf("quit\n");
				system("adb shell input keyevent 26");
				break;
		}
	}

}

int main(char argc, char **argv)
{

	char filename[32] = {'\0'};
	pthread_t recvPthread;

	if(argc < 2){
		printf("uage:%s /dev/ttyS?\n",argv[0]);
		return -1;
	}

	strcpy(filename,argv[1]);

	if((fd = myserialOpen(filename,115200)) == -1){
		printf("open %s error\n",filename);
		return -1;
	}

	pthread_create(&recvPthread,NULL,recvHandler,NULL);

	while(1){sleep(10);}

	return 0;
}

结束

如有问题,欢迎提出,共同进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/88790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows Etcd的安装与使用

一、简介 etcd是一个分布式一致性键值存储&#xff0c;其主要用于分布式系统的共享配置和服务发现。 etcd由Go语言编写 二、下载并安装 1.下载地址&#xff1a; https://github.com/coreos/etcd/releases 解压后的目录如下&#xff1a;其中etcd.exe是服务端&#xff0c;e…

C语言弯道超车必做好题锦集(编程题)

目录 前言&#xff1a; 1.计算日期到天数转换 2.尼科彻斯定理 3.密码检查 4.图片整理 5.寻找数组的中心下标 6.字符个数统计 7.多数元素 前言&#xff1a; 编程想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我…

C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

本示例使用的设备&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) 服务端代码&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.…

iptables的使用规则

环境中为了安全要限制swagger的访问&#xff0c;最简单的方式是通过iptables防火墙设置规则限制。 在测试服务器中设置访问swagger-ui.html显示如下&#xff0c;区分大小写&#xff1a; iptables设置限制访问9783端口的swagger字段的请求&#xff1a; iptables -A INPUT -p t…

Python可视化工具库实战

Matplotlib Matplotlib 是 Python 的可视化基础库&#xff0c;作图风格和 MATLAB 类似&#xff0c;所以称为 Matplotlib。一般学习 Python 数据可视化&#xff0c;都会从 Matplotlib 入手&#xff0c;然后再学习其他的 Python 可视化库。 Seaborn Seaborn 是一个基于 Matplo…

Vue 中 diff 算法原理

一、Diff 概念 Vue 基于虚拟 DOM 做更新。diff 算法的核心就是比较两个虚拟节点的差异&#xff0c;返回一个 patch 对象&#xff0c;这个对象的作用就是存储两个节点不同的地方&#xff0c;最后用 patch 里记录的信息进行更新真实DOM。 diff 算法的在很多场景下都有应用&#…

计算机竞赛 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

6.oracle中listagg函数使用

1. 作用 可以实现行转列&#xff0c;将多列数据聚合为一列&#xff0c;实现数据的压缩 2. 语法 listagg(measure_expr&#xff0c;delimiter) within group ( order by order_by_clause); 解释&#xff1a; measure_expr可以是基于任何列的表达式 delimiter分隔符&#xff0c…

创建harbor仓库并进行一些操作

文章目录 前言一、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。二、安装搭建私有仓库 Harbor1、安装docker-compse2、安装harbor 3、修改配置文件4、运行脚本5 登入harbor仓库总结 前言 本篇文章需要完成的以下几个操作&#xff1a; 使用mysql:5.6和 ownclo…

爬虫逆向实战(二十)--某99网站登录

一、数据接口分析 主页地址&#xff1a;某99网站 1、抓包 通过抓包可以发现登录接口是AC_userlogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”可以发现txtPassword和aws是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无…

【Git版本控制工具使用---讲解一】

Git版本控制工具使用 安装设置用户名签名和邮箱Git常用的命令 初始化本地库查看本地状态Git 命令添加暂存区提交本地库查看版本信息修改文件版本穿梭 安装 首先根据自身电脑的配置选择性的安装是32位的还是64位的Git版本控制工具 我这边安装的是64位的 以下是我安装的时候的过…

C语言:选择+编程(每日一练Day8)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;字符个数统计 思路一&#xff1a; 题二&#xff1a;多数元素 思路一&#xff1a; 本人实力有限可能对一些…

事件捕获和事件冒泡

事件捕获和事件冒泡与事件流有关系。 以下代码&#xff0c;点击 aa &#xff0c;控制台会打印什么呢&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content&q…

Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序&#xff0c;并可以缩短从编写到部署运行代码…

App Inventor 2 开发 ChatGPT 对话App

ChatGPT大家应该不会陌生&#xff0c;它的回答内容非常的专业及深入&#xff0c;具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App&#xff0c;先看效果&#xff1a; App Inventor 2 ChatGPT教育领域对话演示 代码块如下&#xff1a; 用到的核心组件“ChatBot…

kafka--技术文档--spring-boot集成基础简单使用

阿丹&#xff1a; 查阅了很多资料了解到&#xff0c;使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意&#xff01; 使用spring-boot整合kafka 1、导入依赖 核心配…

Web3和去中心化:互联网的下一个演化阶段

文章目录 Web3和去中心化的定义Web3&#xff1a;去中心化&#xff1a; 为什么Web3和去中心化如此重要&#xff1f;数据隐私和安全&#xff1a;去中心化的创新&#xff1a;去除中间商&#xff1a; Web3和去中心化的应用领域去中心化金融&#xff08;DeFi&#xff09;&#xff1a…

掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「上篇」

在当今的AIGC时代&#xff0c;我们面临着越来越多的人工智能技术和应用。其中一个引人注目的工具就是Prompt&#xff08;提示&#xff09;。它就像是一种魔法&#xff0c;可以让我们与AI助手进行更加互动和有针对性的对话。那么&#xff0c;让我们一起来了解一下Prompt&#xf…

长胜证券:货币政策什么意思?

钱银政策是指国家钱银当局经过调控钱银供给量和利率等手法&#xff0c;以到达操控通货膨胀、坚持经济稳定、促进经济增长等目的的一种宏观经济政策。简而言之&#xff0c;钱银政策便是国家中央银行对钱银供给和利率进行调控的政策。那么具体来说&#xff0c;钱银政策到底有哪些…

windwos系统如何创建typecho个人博客并通过内网穿透实现无公网IP访问

文章目录 前言1. 环境安装2.安装Typecho3.安装cpolar内网穿透4. 固定公网地址5.配置Typecho 前言 Typecho是一款PHP语言编写的开源博客程序&#xff0c;它是一个轻量级的内容管理系统&#xff0c;专注于博客领域。支持多用户、多站点、多语言等功能&#xff0c;可以满足不同用…