开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
语音模块(JQ8900)
## 模块特征 * 支持MP3、WAV硬件解码 * 支持FAT文件系统 * 支持采样(KHz):8/11.025/12/16/22.05/24/32/44.1/48 * 24位DAC输出内部采用DSP硬件解码,非PWM输出,动态范围支持90dB,信比85dB * 多种控制模式、两线串口模式、一线串口控制、按键模式 * 支持U盘、TF卡、SPIFLASH * 支持USB声卡,读卡器,HID控制 * 支持SPIFLASH模拟成U盘,直接像操作U盘一样更新SPIFLASH里的语音 * 支持上一曲,下一曲,播放、暂停、停止、选曲、等常用功能控制 * 支持播放曲目序号获取,总曲目及目录总曲目等信息获取 * 支持各种信息查询,轻松获取语音芯片的当前状态 * 支持指定曲目插播,即可以暂停当前播放的音乐,播放插播的曲目,播放完后返回原来曲目断点处播放 * 支持中英文路径插播,除了指定曲目插播,也支持指定路径插播,发送插播的路径即可实现 * 支持跨盘符插播,如插播内容存储在SPIFLASH * 支持指定中英文路径播放,无需知道要播放的内容的序号,直接发送所在的路径即可。 * 支持智能组合播放,特定的文件夹里的歌曲组合,发送曲目名即可组合。 * 支持30级音量调节 * 支持5种EQ调节 * 支持7种播放模式控制,可以适应不同的应用 * 支持循次数设置,更多应用,更人性化 * 支持系统深度睡眠,睡眠后电流低至600微安,可以通过一线串和指令IO唤醒 * 支持指定时间快进,快退 * 支持指定时间段复读 * 支持指定从指定的时候点开始播放 * 支持外输入音频和MP3音频混合,外输入、MP3输出、外输入和MP3混合三种输出切换 * 专用的BUSY信号输出指示 * 支持各种状态变化信息返回,如设备插拨等成熟的指令和指令解析,让应用更稳定 * 专用配套上位机,快速上手,方便调试,指令自动生成 ## 更换语音内容 此芯片的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦, SPIFLASH 直接模拟成U盘,跟拷贝U盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232串口控制可选,为研发提供更多的选择性。 `USB数据线连接芯片,插上电脑,电脑会自动识别,如下图所示:`  然后双击新盘,把要放置的声音拷贝过去即可 ## 引脚说明   ## IO口触发使用 ### IO使用播放文件命名规则 5位数字进行命名,即00001、00002...00007 ### 一对一触发  ### 3*4 矩阵触发   注意,`矩阵播放模式,储存的语音文件最多只能19个,多了乱码` ## 播放模式使用 可以通过配套的配置工具进行配置 每个 IO 口都可以配置  配置完成后,点击生成,配置工具所在目录会生成一个`config.txt`文件,把这个文件复制到储存器中即可   ## 一线串口通信   ### 控制说明 0x00~0x09:仅表示数字0~9 0x0a:为单字节控制指令,用于清空上一次接收的数字 0x0b~0x10:为多字节控制指令,需要和0x00~0x09配合使用 0x11~0x1c:为单字节控制指令,只需要发送一个控制指令即可 ### 一线串口文件命名规则 文件名须为5位数字,该五位数既是该文件的曲目号。选曲播放指令(0xb)靠此数字来识别。如下图所示  如使用其它形式的命名,则无法使用选曲播放指令播放该文件,文件需要放在根目录下,即打开盘符即可 * 列1:设置音量为20 步骤如下:`清空数字`->`音量20`->`设置音量`控制指令 发送代码`0x0A`->`0x02`->`0x00`->`0x0C` 使用单片机发送函数如下: SendData(0x0a); SendData(0x02); SendData(0x00); SendData(0x0c); 使用多字节控制指令前,`最好先发送”清空数字”指令,再发送新的数字` * 列2:播放曲目 步骤如下:`清空数字`->`曲目号`->`选曲播放`控制指令。 发送代码`0x0A`->`0x02`->`0x0b` 使用单片机发送函数如下: 播放曲目2: SendData(0x0a); SendData(0x02); SendData(0x0b); 播放曲目号15: SendData(0x0a); SendData(0x01); SendData(0x05); SendData(0x0b); * 开始播放 步骤如下:`开始播放`控制指令 发送代码`0x11`,只需发送一个0x11即可 使用单片机发送函数如下: SendData(0x11); ### 示例程序 Arduino ``` void setup() { pinMode(3,OUTPUT); } void loop() { SendData(0x0a); //清空数字 SendData(0x01); //曲目号 SendData(0x00); SendData(0x0b); //选曲播放 delay(2000); //延时 //发送0x01 SendData(0x0a); SendData(0x01); SendData(0x0b); delay(2000); //发送0x07 SendData(0x0a); SendData(0x07); SendData(0x0b); delay(2000); //发送0x03 SendData(0x0a); SendData(0x03); SendData(0x0b); delay(2000); } // 定义发送函数 void SendData (char addr ) { digitalWrite(3,HIGH); /*开始拉高*/ delayMicroseconds ( 1000 ); digitalWrite(3,LOW); /*开始引导码*/ delayMicroseconds ( 3200 );/*此处延时最少要大于2ms*/ for (int i = 0; i < 8; i++ ) /*总共8位数据 */ { digitalWrite(3,HIGH); if ( addr & 0x01 ) /*3:1表示数据位1,每个位用两个脉冲表示 */ { delayMicroseconds ( 600 ); digitalWrite(3,LOW); delayMicroseconds ( 200 ); } else /*1:3表示数据位0 ,每个位用两个脉冲表示 */ { delayMicroseconds ( 200 ); digitalWrite(3,LOW); delayMicroseconds ( 600 ); } addr >>= 1; } digitalWrite(3,HIGH); } ``` ESP8266 ``` #include <ESP8266WiFi.h> #include "EspMQTTClient.h" #ifndef STASSID #define STASSID "wifissid"//请修改为你的wifi名称和密码 #define STAPSK "wifipassword" #endif const char* ssid = STASSID; const char* password = STAPSK; void onConnectionEstablished(); /******************IO定义**************************/ char IO_JQ8X00_BusyCheck = 2; //忙检测IO引脚 char IO_JQ8X00_VPP = D1; //单线串口通信IO引脚 /******************全局变量**************************/ char JQ8X00_BusyCheck = 0; //忙检测,0表示不做忙检测,1表做忙检测 typedef enum { Play = 0x11, /*播放*/ Pause = 0x12, /*暂停*/ Stop = 0x13, /*停止*/ LastSong = 0x14, /*上一曲*/ NextSong = 0x15, /*下一曲*/ LastList = 0x16, /*上一目录*/ NextList = 0x17, /*下一目录*/ ChooseSD = 0x18, /*选择SD卡*/ ChooseUdisk = 0x19, /*选择U盘*/ ChooseFlash = 0x1a, /*选择Flash*/ SysSleep = 0x1b, /*系统睡眠*/ } LineByteSelect; typedef enum { Track = 0x0B, /*曲目*/ Volume = 0x0C, /*音量*/ EQ = 0x0D, /*EQ*/ LoopMode = 0x0E, /*循环模式*/ Channel = 0x0F, /*通道*/ CBTrack = 0x10, /*插播曲目*/ } LineModeSelect; EspMQTTClient client( ssid, // Wifi ssid password, // Wifi password "broker.emqx.io", // MQTT broker ip 1883, // MQTT broker port "AA", // MQTT username "AAA", // MQTT password "soundchiptest", // Client name onConnectionEstablished, // Connection established callback false, // Enable web updater true // Enable debug messages ); u8 yl=10; void onConnectionEstablished() { client.subscribe("sc/up", [](const String &payloadota) { if (payloadota=="up" ) { OneLine_SendData(LastSong); } else{ OneLine_SendData(Stop); } }); client.subscribe("sc/down", [](const String &payloadota) { if (payloadota=="down" ) { OneLine_SendData(NextSong); } else{ OneLine_SendData(Stop); } }); client.subscribe("sc/volum", [](const String &payloadota) { if (payloadota.toInt()>0 && payloadota.toInt()<=30) { yl=payloadota.toInt(); } else{ yl=20; } }); } /************************************************************************ 功能描述: 单线控制单字节发送函数 入口参数: DATA:发送数据 返 回 值: none 其他说明: 将需要发送的数据作为形参传入 **************************************************************************/ void OneLine_SendData(u8 DATA) { u8 i; digitalWrite(IO_JQ8X00_VPP, HIGH); //开始信号 delayMicroseconds(100); digitalWrite(IO_JQ8X00_VPP, LOW);; delay(3); for (i = 0; i < 8; i++) { digitalWrite(IO_JQ8X00_VPP, HIGH); if (DATA & 0x01) { delayMicroseconds(1500); digitalWrite(IO_JQ8X00_VPP, LOW); delayMicroseconds(500); } else { delayMicroseconds(500); digitalWrite(IO_JQ8X00_VPP, LOW); delayMicroseconds(1500); } DATA >>= 1; } digitalWrite(IO_JQ8X00_VPP, HIGH); } /************************************************************************ 功能描述: 单线字节控制 入口参数: Mode:功能 返 回 值: none 其他说明: 将需要的功能作为形参传入 **************************************************************************/ void OneLine_ByteControl(LineByteSelect Mode) { if (JQ8X00_BusyCheck) { delay(10); while (digitalRead(IO_JQ8X00_BusyCheck) == HIGH); //忙检测 } OneLine_SendData(Mode); } /************************************************************************x 功能描述: 单线控制组合发送函数 入口参数: Nume:数字,Mode:功能 返 回 值: none 其他说明: 将需要发送的数据和需要的功能作为形参传入 **************************************************************************/ void OneLine_ZHControl(LineModeSelect Mode, u8 Nume) { if (JQ8X00_BusyCheck) { delay(10); while (digitalRead(IO_JQ8X00_BusyCheck) == HIGH); //忙检测 } OneLine_SendData(0x0a); if (Nume < 10) { OneLine_SendData(Nume); } else { OneLine_SendData(Nume / 10); OneLine_SendData(Nume % 10); } OneLine_SendData(Mode); } void setup() { Serial.begin(115200); if (JQ8X00_BusyCheck) pinMode(IO_JQ8X00_BusyCheck, INPUT); //忙检测引脚初始化 pinMode(IO_JQ8X00_VPP, OUTPUT); //VPP单线串口引脚初始化 digitalWrite(IO_JQ8X00_VPP, HIGH); //VPP引脚拉高 OneLine_ZHControl(Volume, 30); //音量设置为30 delay(10); OneLine_ZHControl(Track, 1); //播放第一个音频文件 } void loop() { client.loop(); OneLine_ZHControl(Volume, yl); //设置音量 } ```  ## 两线串口使用 有配套上位机,指令自动生成,方便调试  ### 指定路径播放 1 两线串口路径支持中文和英文数字等组,建议文件夹名和文件名不要过长,一般建议客户采用两个字符加*组合方式来。 2 如果文件夹或文件名带字母的,字母要求全部大写 3 注意格式前面没有点,注意后面三个问号和字母输入法要切换到英文 4 对应的指令可以由上位机来生成 例如:/广告/小米手机.mp3,可以按如下格式 /广告*/小米*???,“广告*”代表前两个字为“广告”的文件夹,*为通配符, “小米*???”代表文件前两个字为”小米”的文件,后面三个?号表示格式不限制,本芯片支持MP3和WAV两种格式。 /ABCD*/ASSD*??? /测试*/ADSS*??? ### 组合播放 组合播放是按文件名来组合,`文件要求存储在**ZH**文件夹下`,可以把要组合的文件名称更改为两个字节的名称,一般建议用数字表示 如:01.mp3,02.mp3,也可以用两个字母或一个汉字命名 芯片通信采用全双工串口通信 波特率为`9600`,数据位:`8`,停止位`1位`,检验位`N` ### 示例程序 Arduino ``` #include <SoftwareSerial.h> SoftwareSerial mySerial(3,2); unsigned char mylist[4]={0xAA, 0x02, 0x00, 0xAC,};//播放的指令 //其他指令可以在 通讯指令 中查看或是 配套串口调试工具 中获取 void setup(){ mySerial.begin(9600); } void loop(){ mySerial.write(mylist,4); delay(3000); } ``` ### 通讯指令     
造物者W
2022年1月11日 19:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码