【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) ; // 10mSreturn 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;
}
结束
如有问题,欢迎提出,共同进步
相关文章:

【ARM-Linux】项目,语音刷抖音项目
文章目录 所需器材装备操作SU-03T语音模块配置代码(没有用wiring库,自己实现串口通信)结束 所需器材 可以百度了解以下器材 orangepi-zero2全志开发板 su-03T语音识别模块 USB-TTL模块 一个安卓手机 一根可以传输的数据线 装备操作 安…...
Linux驱动开发:技术、实践与Linux的历史
一、引言 Linux,这个开源的操作系统,已经在全球范围内赢得了开发者和企业的广泛支持。它的强大之处在于其内核以及无数的驱动程序,这些驱动程序使得各种硬件设备可以在Linux操作系统上运行。本篇文章将深入探讨Linux驱动开发,包括…...
# Go学习-Day5
文章目录 map增加和更新删除查询遍历(for-range)map切片关于哈希表遍历的一点看法对map的key排序 结构体与OOP声明、初始化、序列化方法工厂模式 个人博客:CSDN博客 map map是一个key-value的数据结构,又称为字段或关联数组 Gol…...

创建型(二) - 单例模式
一、概念 单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类。 优点:在内存里只有一个实例,减少了内存的开销,避免…...

基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅管理系统 系统有2权限࿱…...

Android相机-HAL-Rockchip-hal3
引言: 对于Android相机的 HAL层而言对上实现一套Framework的API接口,对下通过V4L2框架实现与kernel的交互。不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的? 代码目录: hardw…...

基于Java+SpringBoot+vue前后端分离华强北商城二手手机管理系统设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

【论文阅读】HOLMES:通过关联可疑信息流进行实时 APT 检测(SP-2019)
HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows S&P-2019 伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学 Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of susp…...
HTML 网页中 自定义图像单击或鼠标悬停时放大
HTML 网页中 自定义图像单击或鼠标悬停时放大 一:在悬停时更改 HTML 图像的大小 例子中,使用 CSS 样式;来设置每个图像元素的高宽 200px;以及 10px 边距,以便在图像周围留出空间。 使用 CSS 的 :hover 属性来添加悬停效…...

从程序员进阶到架构师再到CTO,该如何破解焦虑?
引言 我们生活的时代,变化太快,许多人在职业发展的道路上都会面临焦虑与迷茫。这种焦虑源自我们内心的不安,也来自于外部形势的变化。 对于技术从业者来说,焦虑并不会随着职业发展而自动消失,不同职场阶段会面临不同的…...
批量将excel文件转csv文件
要将Excel文件批量转换为CSV文件,并按照关键词汇总,可以使用Python中的pandas库来实现。下面是示例代码: import pandas as pd import os def excel_to_csv(file_path, output_folder): # 读取Excel文件 df pd.read_excel(file_pat…...
实现 CSS 文字渐变色效果
实现 当涉及到文字渐变色时,以下是一个更详细的用法示例。你可以使用 CSS 的 background-image,background-clip 和 text-fill-color 属性来实现: h1 {background-image: linear-gradient(to right, #ff0000, #00ff00, #0000ff);background-clip: text;-webkit-background-c…...

C++信息学奥赛1148:连续出现的字符
代码题解: #include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string str1;// 输入一行字符串getline(cin,str1);for(int i0;i<str1.length();i){int a0;for(int ji;j<…...
【笔记】岂不怀归:三和青年调查
三和青年的遭遇绝非孤例,他们是中国现代化和城市化进程中一些难以被城市容纳的群体的缩影。三和青年的“后备军”,是整整一代没有知识与技能的农村青年。本书对三和青年抱以人道主义的关怀与同情,并鼓励各界关注社会发展过程中被抛下的那一群…...

使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)
需求:将本地的图片上传到服务器或者云存储中,考虑之后,这里我选的是上传到又拍云云存储。 技术背景: 前端:VueAjax 后端:SpringBoot 存储:又拍云云存储原理:Mavon-Editor编辑器有两个…...
QT使用QXlsx实现对Excel的创建与文字的存取 QT基础入门【Excel的操作】
准备:搭建环境引用头文件QT中使用QtXlsx库的三种方法 QT基础入门【Excel的操作】_吻等离子的博客-CSDN博客 #include "xlsxdocument.h"const QString ExcelName="./test.xlsx"; QTXLSX_USE_NAMESPACE // 添加Xlsx命名空间 1、初始化excel表格 注意!两…...

前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶
前端遇到困扰怎么办?10年前端在线帮您解决问题,只需一杯下午茶...
c#值类型和引用类型
在C#中,变量可以是值类型或引用类型。下面是一些常见的值类型和引用类型 值类型: 基本数据类型:bool、byte、sbyte、char、short、ushort、int、uint、long、ulong、float、double、decimal 枚举类型:enum 结构体类型࿱…...

机器学习算法示例的收集;MetaAI编码工具Code Llama;“天工AI搜索”首发实测
🦉 AI新闻 🚀 Meta推出新一代AI编码工具Code Llama,助力程序员提高开发效率 摘要:Meta推出Code Llama,这是一个基于Llama 2语言模型打造的AI编码工具,能够生成新的代码并调试人类编写的工作。Code Llama可…...
大模型一、大语言模型的背景和发展
文章目录 背景模型1 文本LLM模型ChatGLMChatGLM2-6BChinese-LLaMA-Alpaca:Chinese-LLaMA-Alpaca-2:Chinese-LlaMA2:Llama2-Chinese:OpenChineseLLaMA:BELLE:Panda:Robin (罗宾):Fengshenbang-LM…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...