ESP32-S3 JQ8900S语音模块功能详解
简介:
核心板还是随便在淘宝买的一款ESP32-S3-DevKitC-1,因为使用到了一些传感器,获取了一些数据,所以也需要一个语音模块帮助我播报。我选择的是JQ8900S。淘宝随便搜。我遇到的困难就是,根本不知道怎么让ESP32-S3去控制模块播报,今天终于突破了。TvT,真的有点子心酸。
测试思路:
模块如图所示:
1.首先是测试语音:
看到模块的USB口了不,注意不是Type-C的,是以前比较传统的梯形。
USB 数据线(注意需要可以传输数据)连接芯片,插上电脑,电脑会自动识别,如下图所示:
然后双击新盘,把要放置的声音拷贝过去即可。声音的话,可以找一些语音合成软件,这边不提供哈。
2.利用专门串口调试软件调试:
模块和usb转ttl连接在一起,电脑发送数据,测试模块是否可以正常使用。这边我没有接喇叭,喇叭不分正负,接在SPK-,SPK+即可。接线如图所示:
然后可以发送一些数据:
举个例子:
如果是需要播放,就用串口助手发送 AA 01 00 AB,如果有播放,那一切正常。
3.利用ESP32-S3,配合USB转TTL测试:
此处两条数据线都插在电脑上,尝试控制开发板用串口发送数据,然后用另一个com口接收数据。看是否有显示。如果有,那就把手动发送数据改成开发板自主发送数据,那就大功告成了。
代码部分:
1.引入库,因为我用的是原始的TX和RX,所以不需要别的库,如果你是硬件串口,需要额外添加:
#incldue <HardwareSerial.h>
如果是软件串口,需要额外下载zip库:网页搜索SoftwareSerialESP32 即可找到网友链接。
添加好库之后:
#incldue <SoftwareSerial.h>
现在我用的是原始TX,RX,所以我只需要:
#include <Arduino.h>
2.初始化:
void setup() {
Serial.begin(9600);
delay(100);
}
其他串口,自行找初始化方法哦。
3.循环体:
void loop() {
SetVolume_10();
delay(2000);
Start();
delay(2000);
Next();
delay(2000);
}
这里的函数是我自己写的:
.Write()就是串口发送数据。
void SetVolume_10(void){
Serial.write(0xAA);
Serial.write(0x13);
Serial.write(0x01);
Serial.write(0x0A);
Serial.write(0xC8);
}
void Start(void){
Serial.write(0xAA);
Serial.write(0x02);
Serial.write(0x00);
Serial.write(0xAC);
}
void Next(void){
Serial.write(0xAA);
Serial.write(0x06);
Serial.write(0x00);
Serial.write(0xB0);
}
全部代码:
#include <Arduino.h>
void setup() {
Serial.begin(9600);
delay(100);
}
void loop() {
SetVolume_10();
delay(2000);
Start();
delay(2000);
Next();
delay(2000);
}
//设置音量为10
void SetVolume_10(void){
Serial.write(0xAA);
Serial.write(0x13);
Serial.write(0x01);
Serial.write(0x0A);
Serial.write(0xC8);
}
//播放
void Start(void){
Serial.write(0xAA);
Serial.write(0x02);
Serial.write(0x00);
Serial.write(0xAC);
}
//下一首
void Next(void){
Serial.write(0xAA);
Serial.write(0x06);
Serial.write(0x00);
Serial.write(0xB0);
}
如果还需要什么功能,可以自己找模块说明书,找需要发送的数据。
总结:
测试了那么多个模块,我一直被一个问题困扰,那就是电平转换问题:
我所用的哪些模块,全都是5V供电,但是我使用5V是无论如何都没有用的。
这里的1,6.大概就是问题的所在。我用的ESP32-S3,IO口的电平都是3.3,虽然我搜索的是可以兼容5V但是还是不行。所以我把模块供电都改为3.3V,最后就成功了。
希望以后使用模块,可以注意这些问题,希望也可以解决大家的一些问题。
其实还有别的博主有发布关于JQ8900S模块的使用代码,但是我个人感觉都比较繁琐,就是他们大部分都是模拟了串口发送的过程,什么时候给高电平什么时候给低电平,但是我直接用的Write()函数,个人感觉方便,还易懂。
作者:thief_1