当前位置: 首页 > news >正文

【Arduino使用SNR9816TTS模块教程】

【Arduino使用SNR9816TTS模块教程】

  • 1.前言
  • 2. 硬件连接
  • 3. Arduino代码
    • 3.1 环境配置
    • 3.2 Arduino源码
  • 4. 调试步骤
  • 5. 总结

1.前言

在今天的教程中,我们将详细介绍如何使用Arduino IDE开发ESP32C3与汕头新纳捷科技有限公司生产的SNR9816TTS中文人声语音合成模块进行交互,实现精准的语音播报功能。

2. 硬件连接

名称端口功能购买地址
ESP32C3TXGPIO01 RXGPIO01主控淘宝地址
SNR9816TTSTXRX RXTXTTS模块淘宝地址
  1. 电源连接:将SNR9816TTS模块的5V电源引脚连接到ESP32C3的5V输出端,模块的GND引脚连接到ESP32C3的GND。

  2. 串口通信:将SNR9816TTS模块的RX引脚连接到ESP32C3的GPIO01引脚,模块的TX引脚连接到Arduino的GPIO00引脚。这里使用软件串口(SoftwareSerial)库模拟额外的串行通信端口。

  3. 音响:喇叭(第 3、4 引脚)接到对应SPKN和SPKP引脚上,官方喇叭响度有点大,我拆了四六级听力耳机喇叭好多啦😘😘😘。

在这里插入图片描述

3. Arduino代码

首先,确保您已经安装了ESPSoftwareSerial和UTF8ToGB2312库,这两个库对于与SNR9816TTS模块的串口通信至关重要。

3.1 环境配置

  1. Arduino IDE:下载并安装 Arduino IDE;
  2. ESP32 开发板库:在 Arduino IDE 中添加 ESP32 支持;
    参考博客:【esp32c3配置arduino IDE教程】
    为安装过程留出一些时间,具体时间可能因您的互联网连接而异。

3.2 Arduino源码

//first you should install ESPSoftwareSerial and UTF8ToGB2312 liberary
#include <SoftwareSerial.h>
#include "UTF8ToGB2312.h"#define MYPORT_TX 0
#define MYPORT_RX 1EspSoftwareSerial::UART myPort;uint8_t voicedata[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x76, 0x31, 0x5D };  //voicedata[7] =  0x31 ~ 0x39
uint8_t mandata[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x6D, 0x31, 0x5D };
uint8_t wemandata[] = { 0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x6D, 0x30, 0x5D };
void setup() {Serial.begin(115200);myPort.begin(115200, SWSERIAL_8N1, MYPORT_RX, MYPORT_TX, false);if (!myPort) {  // If the object did not initialize, then its configuration is invalidSerial.println("Invalid EspSoftwareSerial pin configuration, check config");while (1) {  // Don't continue with invalid configurationdelay(1000);}}speech("系统开机");delay(1000);for (int i = 0; i < sizeof(voicedata) / sizeof(voicedata[0]); i++) {myPort.write(voicedata[i]);}delay(1000);speech("系统音量以调小");// delay(2000);for (int i = 0; i < sizeof(mandata) / sizeof(mandata[0]); i++) {myPort.write(mandata[i]);}delay(2000);speech("系统初始化男声成功");// delay(1000);// voicedata[7] = 0x31;for (int i = 0; i < sizeof(wemandata) / sizeof(wemandata[0]); i++) {myPort.write(wemandata[i]);}delay(2500);speech("系统初始化女声成功");// delay(5000);
}void loop() {//  speech("  系统初始化成功,网络地址如下");delay(1000);
}void speech(String data) {//0--空闲  1--繁忙  2--异常while (workstate() > 0) {if (workstate() == 1) Serial.println("tts busy");if (workstate() == 2) Serial.println("tts wrong");}String utf8_str = data;String gb2312_str = GB.get(utf8_str);unsigned char head[gb2312_str.length() + 6];// 定义无符号字符类型数组,将 GB2312 编码的字符串复制到数组中unsigned char gb2312_data[gb2312_str.length() + 1];memset(gb2312_data, 0, sizeof(gb2312_data));strncpy((char *)gb2312_data, gb2312_str.c_str(), gb2312_str.length());// head bytehead[0] = 0xFD;// length bytesunsigned int dat_len = gb2312_str.length() + 3;head[1] = dat_len >> 8;head[2] = dat_len;// cmd bytehead[3] = 0x01;// para bytehead[4] = 0x01;// send each character individuallyfor (int i = 0; i < gb2312_str.length(); i++) {head[i + 5] = gb2312_data[i];}// 计算异或值并添加到数组,额这个是syn那个芯片的例程,这个异或计算有没有用我懒得改了。反正代码能跑。head[gb2312_str.length() + 5] = head[0];for (int i = 1; i < gb2312_str.length() + 5; i++) {head[gb2312_str.length() + 5] ^= head[i];}// 发送字符数组到串口for (int j = 0; j < gb2312_str.length() + 6; j++) {myPort.write(head[j]);}delay(gb2312_str.length() * 300);Serial.println(data);
}
// 查询tts合成工作状态 返回1表示繁忙 0表示空闲
int workstate() {unsigned char head[4] = { 0xFD, 0x00, 0x01, 0x21 };// 发送字符数组到串口for (int j = 0; j < 4; j++) {myPort.write(head[j]);}// 等待myPort的返回while (myPort.available() < 1) {// 可以在这里加入一些延时,以防止过快地查询delay(150);}// 读取并处理返回的数据byte response = myPort.read();// 返回相应的状态值if (response == 0x4E) {// 繁忙return 1;} else if (response == 0x4F) {// 空闲return 0;} else {// 未知状态,可以根据需要进行处理return 2;}
}

代码解析

本代码示例旨在为ESP(如ESP32或ESP8266)开发项目实现语音控制和文本转语音(TTS)功能,利用ESPSoftwareSerial库实现软件串口通信,以及UTF8ToGB2312库进行字符编码转换以及男女声音切换。

4. 调试步骤

  1. 编译并上传:将上述代码保存为.ino文件,使用Arduino IDE编译并上传至您的开发板。
  2. 检查硬件连接:确保SNR9816TTS模块与Arduino之间的电源、GND及串口引脚连接正确。
  3. 开启串口监视器:在Arduino IDE中打开串口监视器,设置波特率为115200bps,观察输出信息。
  4. 触发语音合成:上传成功后,Arduino将自动发送系统开机文本到SNR9816TTS模块。您应该能在串口监视器中看到系统开机的输出信息。
  5. 听语音输出:连接好喇叭或耳机到SNR9816TTS模块的SPKP引脚(第3或4引脚),监听是否有对应的语音播报。如果一切正常,您应该能听到系统开机的语音输出。
  6. 调整与调试:根据实际听到的语音效果,调整文本内容、发音人、语速、语调等参数,重复上述步骤进行测试。若遇到问题,可通过串口监视器查看通信状态或发送控制命令以查询模块状态。

注意:在实际项目中,您需要实现UTF8到GB2312的编码转换,并根据SNR9816TTS模块的通信协议构造正确的命令帧。您可以使用现有的库或自定义函数来完成这一任务。此外,确保为SNR9816TTS模块提供足够稳定的5V电源,且电流能力至少为500mA。
在这里插入图片描述

5. 总结

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32c
3调用TTS模块教程。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣

如果你有任何问题,可以通过下面的二维码加入鹏鹏小分队,期待与你思维的碰撞😘😘😘

参考资源: TTS资料 软硬件资料 demoCode
链接:https://pan.baidu.com/s/1SYjj6a_ruBu_QVHq4mydgg 提取码:0000

相关文章:

【Arduino使用SNR9816TTS模块教程】

【Arduino使用SNR9816TTS模块教程】 1.前言2. 硬件连接3. Arduino代码3.1 环境配置3.2 Arduino源码 4. 调试步骤5. 总结 1.前言 在今天的教程中&#xff0c;我们将详细介绍如何使用Arduino IDE开发ESP32C3与汕头新纳捷科技有限公司生产的SNR9816TTS中文人声语音合成模块进行交…...

牛客练习赛123(A,B,C,D)

牛客挑战赛&#xff0c;练习赛和小白月赛周赛不是一种东西。这玩意跟CF的div12差不多难度。而且找不到题解。所以决定不等题解补题了&#xff0c;直接写题解了。 比赛链接 光速签到下班&#xff0c;rk。感觉E可能能补掉&#xff0c;看情况补吧。 B题感觉之前考了两次&#x…...

docker部署-RabbitMq

1. 参考 RabbitMq官网 docker官网 2. 拉取镜像 这里改为自己需要的版本即可&#xff0c;下面容器也需要同理修改 docker pull rabbitmq:3.12-management3. 运行容器 docker run \ --namemy-rabbitmq-01 \ -p 5672:5672 \ -p 15672:15672 \ -d \ --restart always \ -…...

【智能算法】蜜獾算法(HBA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;FA Hashim等人受到自然界中蜜獾狩猎行为启发&#xff0c;提出了蜜獾算法&#xff08;(Honey Badger Algorithm&#xff0c;HBA&#xff09;。 2.算法原理 2.1算法思想 蜜獾以其…...

9、鸿蒙学习-开发及引用静态共享包(API 9)

HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块的依赖项被引用。…...

[Pytorch]:PyTorch中张量乘法大全

在 PyTorch 中&#xff0c;有多种方法可以执行张量之间的乘法。这里列出了一些常见的乘法操作&#xff1a; 总结&#xff1a; 逐元素乘法&#xff1a;*ortorch.mul()矩阵乘法&#xff1a;ortorch.mm()ortorch.matmul()点积&#xff1a;torch.Tensor.dot()批量矩阵乘法&#xff…...

【软考】防火墙技术

目录 1. 概念2. 包过滤防火墙3. 应用代理网关防火墙4. 状态检测技术防火墙 1. 概念 1.防火墙(Firewall)是建立在内外网络边界上的过滤封锁机制&#xff0c;它认为内部网络是安全和可信赖的&#xff0c;而外部网络是不安全和不可信赖的。2.防火墙的作用是防止不希望的、未经授权…...

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取yxml源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件&#xff0c;及测试脚本yxml/Makefile编译组织文件yxml/.gitat…...

嵌入式C语言--GPT通用定时器

嵌入式C语言–GPT通用定时器 嵌入式C语言--GPT通用定时器 嵌入式C语言--GPT通用定时器一. GPT基本概念二. GPT的作用三. GPT通道的四个状态四. Continuous/One-Shot模式3.1&#xff09;Continuous模式3.2&#xff09;One-Shot模式 一. GPT基本概念 GPT即General Purpose Timer…...

『Apisix系列』破局传统架构:探索新一代微服务体系下的API管理新范式与最佳实践

一、『Apisix安装部署』 &#x1f680; 1.1 手把手教你从零部署APISIX高性能API网关 二、『Apisix入门篇』 &#x1f680; 2.1 从零到一掌握Apache APISIX&#xff1a;架构解析与实战指南 三、『Apisix进阶篇』 &#x1f680; 3.1 动态负载均衡&#xff1a;APISIX的实战演练…...

如何在极狐GitLab 自定义 Pages 域名、SSL/TLS 证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…...

React Native 应用打包

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…...

单链表就地逆置

算法思想&#xff1a;构建一个带头结点的单链表L&#xff0c;然后访问链表中的每一个数据结点&#xff0c;将访问到的数据结点依此插入到L的头节点之后。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef s…...

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到&#xff0c;64字节是能被检测到的最小值&#xff1b;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…...

Spring Boot的基础知识和应用

在快速发展的软件开发领域&#xff0c;Spring Boot已经成为了一个广受欢迎的框架&#xff0c;它极大地简化了Spring应用的初始搭建以及开发过程。Spring Boot遵循“约定优于配置”的原则&#xff0c;通过默认配置减少了开发者的配置工作量&#xff0c;使得开发者能够更专注于业…...

【Linux】详解动静态库的制作和使用动静态库在系统中的配置步骤

一、库的作用 1、提高开发效率&#xff0c;让开发者所有的函数实现不用从零开始。 2、隐藏源代码。 库其实就是所有的.o文件用特定的方式进行打包形成一个文件&#xff0c;各个.o文件包含了源代码中的机器语言指令。 二、动态库和静态库的制作和使用 2.1、静态库的制作和使用…...

开源模型应用落地-qwen1.5-7b-chat-LoRA微调(二)

一、前言 预训练模型提供的是通用能力,对于某些特定领域的问题可能不够擅长,通过微调可以让模型更适应这些特定领域的需求,让它更擅长解决具体的问题。 本篇是开源模型应用落地-qwen-7b-chat-LoRA微调(一)进阶篇,学习通义千问最新1.5系列模型的微调方式。 二、术语介绍 …...

【现代企业管理】企业组织结构和组织文化的理论与实践——以华为为例

一、前言 管理是科学和艺术的统一体&#xff0c;它是企业成长的保证。企业管理中&#xff0c;管理者面对的往往不是一个完整的系统&#xff0c;而是各种不具有整体规律性的零碎信息的总和&#xff0c;因此进行信息的整合和研究是管理的重点和关键。 组织管理作为管理的四大职…...

【Kotlin】Sequence简介

1 前言 序列&#xff08;Sequence&#xff09;是 Kotlin 中为方便操作集合及其元素而定制的接口&#xff0c;是一个延迟获取数据的集合&#xff0c;只有需要元素时才会生产元素。在处理大量数据时&#xff0c;序列可以显著地提升性能。 Sequence 类似 Java 中的 Stream&#xf…...

【Java】Thread详解

&#x1f352;前言 本文将从以下几方面来展开对Thread的介绍。 1.线程创建 2.线程中断 3.线程等待 4.线程休眠 在前面的文章中&#xff0c;已经总结了关于Thread的一些理解。 在阅读本文之前&#xff0c;最好对其有一些基础的了解。 文章链接: 【JavaSE】进程是什么&#xff1f…...

QT TCP和UDP网络编程

代表网络概念的QTcpSocket,QTcpServer和QUdpSocket&#xff0c;以及QNetworkRequest,QNetworkReply和QNetworkAccessManager之类的高级类来执行使用通用协议的网络操作。 它还提供了QNetworkConfiguration,QNetworkConfigurationManager和QNetworkSession等&#xff0c;实现承载…...

Maven入门指南:构建与管理Java项目的利器

引言 在Java开发领域&#xff0c;项目构建和管理是一个至关重要的环节。随着项目规模和复杂度的不断增加&#xff0c;有效地管理项目的依赖、构建过程以及部署流程变得尤为关键。在这样的背景下&#xff0c;Apache Maven作为一款优秀的项目管理工具应运而生&#xff0c;成为了…...

EXCEL-VB编程实现自动抓取多工作簿多工作表中的单元格数据

一、VB编程基础 1、 EXCEL文件启动宏设置 文件-选项-信任中心-信任中心设置-宏设置-启用所有宏 汇总文件保存必须以宏启动工作簿格式类型进行保存 2、 VB编程界面与入门 参考收藏 https://blog.csdn.net/O_MMMM_O/article/details/107260402?spm1001.2014.3001.5506 二、…...

用Vue仿了一个类似抖音的App

大家好&#xff0c;我是 Java陈序员。 今天&#xff0c;给大家介绍一个基于 Vue3 实现的高仿抖音开源项目。 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 douyin —— 一个基于 Vue、Vite 实…...

HarmonyOS 应用开发之非线性容器

非线性容器实现能快速查找的数据结构&#xff0c;其底层通过hash或者红黑树实现&#xff0c;包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种。非线性容器中的key及value的类型均满足ECMA标准。 HashMap HashMap 可用来存储具有关联…...

Golang Context是什么

一、这篇文章我们简要讨论Golang的Context有什么用 1、首先说一下Context的基本作用&#xff0c;然后在讨论他的实现 (1)数据传递&#xff0c;子Context只能看到自己的和父Context的数据&#xff0c;子Context是不能看到孙Context添加的数据。 (2)父子协程的协同&#xff0c;比…...

算法基础--递推

&#x1f600;前言 递推算法在计算机科学中扮演着重要的角色。通过递推&#xff0c;我们可以根据已知的初始条件&#xff0c;通过一定的规则推导出后续的结果&#xff0c;从而解决各种实际问题。本文将介绍递推算法的基础知识&#xff0c;并通过一些入门例题来帮助读者更好地理…...

超市销售数据-python数据分析项目

Python数据分析项目-基于Python的销售数据分析项目 文章目录 Python数据分析项目-基于Python的销售数据分析项目项目介绍数据分析结果导出数据查阅 数据分析内容哪些类别比较畅销?哪些商品比较畅销?不同门店的销售额占比哪个时间段是超市的客流高封期?查看源数据类型计算本月…...

java实现手机号,密码,游邮箱 , 验证码的正则匹配工具类

先定义一个抽象类RegexPatterns&#xff0c;定义相关正则字符串 : public abstract class RegexPatterns {/*** 手机号正则*/public static final String PHONE_REGEX "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";/*** 邮箱正则*/public stat…...

java中的Arrays类的常用操作

Arrays类位于 java.util 包中&#xff0c;主要包含了操作数组的各种方法。 import java.util.Arrays; Arrays.sort(arr); int index Arrays.binarySearch(arr, 3); boolean isEqual Arrays.equals(arr1, arr2); // isEqual为true int[] arrnew int[5]; Arrays.fill(arr, 7)…...

网站开发软件有哪些/百度seo查询系统

mount命令 可以使用mount命令挂载光 盘镜像文件、移动硬盘、U盘以及Windows 网络共享和UNIX NFS网络共享等 软件包管理 rpm deb yum yum常用命令  yum list 查询服务器上所有可用的软件包  yum search 搜索服务器上的软件包...

宁波市建设局网站/视频剪辑培训机构哪个好

实现方法&#xff1a;利用--where参数对关系型数据库数据进行筛选&#xff0c;将结果导入非关系型数据库。根据特殊字段&#xff0c;将日期作为一个查询条件对源数据进行匹配&#xff0c;将符合条件的记录作为结果采集到非关系型数据库中格式&#xff1a;import --connect jdbc…...

wordpress 清理媒体库/网站制作方案

2019独角兽企业重金招聘Python工程师标准>>> Java 垃圾回收调优不同于任何其它性能优化活动。 首先你要确保自己足够了解整个应用的情况以及调优预期的结果&#xff0c;而不是单单满足于应用的某一部分调优。一般情况下&#xff0c;遵循以下过程比较容易&#xff1a…...

黄色的html代码/seo下拉优化

1.下载安装qrcodejs2包 npm i qrcodejs2 2.导入 import QRCode from "qrcodejs2"; 3.html <div class"qrcode" id"qrcode"></div> //class是我的样式可以忽略&#xff0c;但是id一定要下 4.使用&#xff0c;以下是我的代码&…...

天津网站建设渠道/网络推广的渠道

SteamVR2.0&#xff08;我这里用v2.5版本&#xff09;的动作捕捉与MFC中的变量绑定很相像&#xff0c;大致分三步 (1).在SteamVR Input中定义量A 变量类型决定可绑定哪个动作。比如要检测手柄扣板机动作&#xff0c;可以检测是否扣了扳机&#xff08;对应bool变量&#xff09…...

南通个人网站制作/网络营销环境宏观微观分析

周数 专业学习目标 专业学习时间 新增代码数量 博客发表量 人文方面的学习 知识技能总结 6 栈、链栈、栈队&#xff0c;网页设计表格 30小时 103 2 《世界是数字的》 栈的输入是从栈顶开始&#xff1b;网页表格的设置可以通过代码更快的建成。 转载于:https://www…...