MAX98357 增益
介绍
这款基于 MAX98357 I2S D 类放大器模块的 I2S 数字放大器可与具有 I2S 音频输出的微控制器(如 ESP32)配合使用,可应用于物联网节点、智能家居设备、蓝牙音频播放器等项目。
该模块支持3.3V-5V电源。当由 2.5V 和 5Ω 扬声器驱动时,它可以输出超过 4W 的功率。此外,它还允许用户通过改变标清端口上的电阻来设置不同的模式(关闭、左声道、右声道和混合)。产品默认为混合模式。
这款 I2S 放大器体积小,带有印记孔,可直接插入或安装在 PCB 和面包板上。此外,它采用PH2.0设计,并带有用于连接扬声器的印章孔,使用灵活方便。
特征
- MAX98357 I2S 数字 D 类放大器,功率 >2.5W
- 3.3V~5V电压电源
- 可切换声道
- 可调增益
- 印章孔设计,支持SMT和DIP
- 连接扬声器的两种方式:PH2.0 和印章孔
应用
- 蓝牙音频播放器
- 物联网节点音频播放器
- 智能家居语音交互
- 机器人设备音频播放器
董事会概览

| 针 | 功能 | 备注 |
|---|---|---|
| SPK- | 扬声器负片 | 4Ω/8Ω <3W |
| VCC的 | 电源输入 | 直流 3.3V-5V |
| 接地 | 地 | |
| 数控 | 未连接引脚 | |
| 标清 | 关闭 amp升压器,调整声道 | 参考 4.1.2(SD 模式说明) |
| 获得 | 调整放大器增益 | 默认为 9dB/参考 4.1.1 增益控制说明 |
| SPK+ | 扬声器阳性 | 4Ω/8Ω <3W |
| 喧嚣 | 数字输入信号 | |
| BCLK的 | 位时钟输入 | 位时钟输入 |
| 法改会 | 帧时钟 | I2S和LJ模式的左/右时钟。TDM 模式下的同步时钟 |
特殊引脚功能
4.1.1 增益控制(Gain)
- 当GAIN和GND之间连接100K电阻时,增益为15dB
- 当GAIN直接连接到GND时,增益为12dB
- 当没有任何东西连接到 GAIN 时,增益为 9dB(默认状态)
- 当GAIN直接连接到VCC时,增益为6dB
- 当增益和VCC之间连接100k电阻时,增益为3dB
标清模式
- 当SD连接到GND时关闭放大器(电压低于0.16V)
- 输出混音通道(默认)当SD上的电压在0.16V至0.77V之间时,R1电阻为680k。
- 当SD上的电压在0.77V至1.4V之间,R1电阻为330K时,输出右通道。
- 当SD上的电压超过1.4V,R1电阻为100K时输出左声道


规范
模块参数
- MCU:MAX98357A
- 工作电压:DC 3.3V~5V
- 输出功率:8Ω 1.8W / 4Ω 2.5W(12db时)
- 输出通道:单通道
- 通讯接口:I2S接口
- 工作温度:-40°C - +80°C
- 储存温度:-40°C - +80°C
- 尺寸(不含包装):18mm × 18mm/ 0.059 × 0.059
芯片音频相关参数
- VDD = 5V,VGND = 0V,GAIN_SLOT = VDD。BCLK = 3.072MHz,LRCLK = 48kHz
- 除非另有说明,否则 OUTP 和 OUTN 之间连接的扬声器负载 (ZSPK),ZSPK = J,TA = TMIN 到 TMAX。典型值为 TA = +25NC。
- 采样率:8kHz~96kHz
- 总谐失真:
- 0.02% (f = 1kHz,POUT = 1W,TA = +25NC,ZSPK = 4I + 33FH,TQFN)
- 0.013% (f = 1kHz,POUT = 0.5W,TA = +25NC,ZSPK = 8I + 68FH)
- 动态范围:105DB(A 加权,VRMS = 2.54V,24 位或 32 位数据)
- 输出噪声:25FVRMS(A加权,24位或32位数据(注4))
- 增益(相对于 2.1dBV 的参考电平):
- GAIN_SLOT = GND至100kΩ:最小值14.4dB,典型值15dB,最大值15.6dB
- GAIN_SLOT = GND:最小值11.4dB,典型值12dB,最大值12.6dB
- GAIN_SLOT = 未连接:最小 8.4dB,典型值 9dB,最大 9.6dB
- GAIN_SLOT = VDD:最小值5.4dB,典型值6dB,最大值6.6dB
- GAIN_SLOT = VDD至100kΩ:最小2.4dB,典型值3dB,最大3.6dB
- 效率:92%(ZSPK = 8I + 68FH,THD+N = 10%,f = 1kHz,增益 = 12dB)
- DAC增益误差:1%
- 频率响应:±0.2dB
- D 类开关频率:330kHz
- 扩频带宽:±12.5kHz
产品尺寸

Tutorial 1 - Play music via Bluetooth
Requirements
-
Hardware
- Firebeetle ESP32-E(DFR0654) x 1
- Speaker x1
- Phone with Bluetooth function
- M-M/F-M/F-F Jumper wires
-
Software
- Arduino IDE
- Click the FireBeetle 2 ESP32-E Wikipage to find SDK installtion tutorial
- Download and install the I2S Ampilifer Library. (About how to install the library?)
Connection Diagram

Description:
I2S Module VCC to ESP32-E 3V3
I2S Module GND to ESP32-E GND
I2S Module LRC to ESP32-E 26/D3
I2S Module BCLK to ESP32-E 25/D2
I2S Module DIN to ESP32-E 14/D6
I2S Module SPK+ to Speaker power +
I2S Module SPK- to Speaker power -
Sample Code
Enable ESP32-E Bluetooth function, create a Bluetooth node named bluetoothAmplifier, and use a phone with Bluetooth function to connect that node to play music.
<span style="color:#24292e"><span style="background-color:#ffffff"><span style="background-color:#f5f2f0"><span style="color:black"><code class="language-arduino"><span style="color:#990055">#<span style="color:#0077aa">include</span> <span style="color:#669900"><DFRobot_MAX98357A.h></span></span>
DFRobot_MAX98357A amplifier<span style="color:#999999">;</span>
<span style="color:#0077aa">void</span> <span style="color:#0077aa">setup</span><span style="color:#999999">(</span><span style="color:#0077aa">void</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">begin</span><span style="color:#999999">(</span><span style="color:#990055">115200</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:slategray">//Set serial rate to 115200</span>
<span style="color:#0077aa">while</span><span style="color:#999999">(</span> <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span>amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">begin</span><span style="color:#999999">(</span><span style="color:slategray">/*btName=*/</span><span style="color:#669900">"bluetoothAmplifier"</span><span style="color:#999999">,</span> <span style="color:slategray">/*bclk=*/</span>GPIO_NUM_25<span style="color:#999999">,</span> <span style="color:slategray">/*lrclk=*/</span>GPIO_NUM_26<span style="color:#999999">,</span><span style="color:slategray">/*din=*/</span>GPIO_NUM_14<span style="color:#999999">)</span> <span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Initialize failed !"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:slategray">//No I2S pin signal detected, init failed </span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">3000</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Initialize succeed!"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:slategray">//I2S pin signal detected, init succeeded </span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">void</span> <span style="color:#0077aa">loop</span><span style="color:#999999">(</span><span style="color:#0077aa">void</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">3000</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
</code></span></span></span></span>
Result
Open Arduino IDE, select board as "FireBeetle2 ESP32-E" and set upload rate to 921600

Copy the codes to Arduino IDE, and burn into FireBeetle2 ESP32-E.

打开手机蓝牙并连接到蓝牙Amplifier节点,然后播放muisc。

教程 2 - 从 SD 卡播放音乐
要求
-
硬件
- 火甲虫 ESP32-E(DFR0654) x 1
- 扬声器 x1
- MicroSD 模块 (DFR0229) x 1
- SD/MicroSD 存储卡(SKU:FIT0394)×1
- 读卡器 ×1
- M-M/F-M/F-F 跳线
-
软件
- Arduino IDE
- 点击 FireBeetle 2 ESP32-E 维基页面查找 SDK 安装教程
- 下载并安装 I2S 放大器库。(关于如何安装库?)
连接图

Description:
I2S Module VCC to ESP32-E 3V3
I2S Module GND to ESP32-E GND
I2S Module LRC to ESP32-E 26/D3
I2S Module BCLK to ESP32-E 25/D2
I2S Module DIN to ESP32-E 14/D6
SD card module 5V to ESP32-E VCC
SD card module GND to ESP32-E GND
SD card module MOSI to ESP32-E 23/MOSI
SD card module SS to ESP32-E 4/D12
SD card module SCL to ESP32-E 18/SCK
SD card module MISO to ESP32-E 19/MISO
I2S Module SPK+ to Speaker power +
I2S Module SPK- to Speaker power -
Sample Code
Connect to SD card module, then the music in the SD card can be played. Press RST button to play from the beginning,
<span style="color:#24292e"><span style="background-color:#ffffff"><span style="background-color:#f5f2f0"><span style="color:black"><code class="language-arduino"><span style="color:#990055">#<span style="color:#0077aa">include</span> <span style="color:#669900"><DFRobot_MAX98357A.h></span></span>
DFRobot_MAX98357A amplifier<span style="color:#999999">;</span>
<span style="color:#0077aa">String</span> musicList<span style="color:#999999">[</span><span style="color:#990055">100</span><span style="color:#999999">]</span><span style="color:#999999">;</span> <span style="color:slategray">// SD card music playlist </span>
<span style="color:#0077aa">void</span> <span style="color:#0077aa">setup</span><span style="color:#999999">(</span><span style="color:#0077aa">void</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">begin</span><span style="color:#999999">(</span><span style="color:#990055">115200</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#0077aa">while</span> <span style="color:#999999">(</span> <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span>amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">initI2S</span><span style="color:#999999">(</span><span style="color:slategray">/*_bclk=*/</span>GPIO_NUM_25<span style="color:#999999">,</span> <span style="color:slategray">/*_lrclk=*/</span>GPIO_NUM_26<span style="color:#999999">,</span> <span style="color:slategray">/*_din=*/</span>GPIO_NUM_14<span style="color:#999999">)</span> <span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Initialize I2S failed !"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">3000</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">while</span> <span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span>amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">initSDCard</span><span style="color:#999999">(</span><span style="color:slategray">/*csPin=*/</span>GPIO_NUM_4<span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Initialize SD card failed !"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">3000</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Initialize succeed!"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">scanSDMusic</span><span style="color:#999999">(</span>musicList<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">printMusicList</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">setVolume</span><span style="color:#999999">(</span><span style="color:#990055">5</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">closeFilter</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">openFilter</span><span style="color:#999999">(</span>bq_type_highpass<span style="color:#999999">,</span> <span style="color:#990055">500</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">SDPlayerControl</span><span style="color:#999999">(</span>SD_AMPLIFIER_PLAY<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">5000</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#0077aa">if</span><span style="color:#999999">(</span>musicList<span style="color:#999999">[</span><span style="color:#990055">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span><span style="color:#dd4a68">length</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Changing Music...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">playSDMusic</span><span style="color:#999999">(</span>musicList<span style="color:#999999">[</span><span style="color:#990055">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span><span style="color:#dd4a68">c_str</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"The currently selected music file is incorrect!\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">void</span> <span style="color:#0077aa">loop</span><span style="color:#999999">(</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
<span style="color:#dd4a68">parseSerialCommand</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">delay</span><span style="color:#999999">(</span><span style="color:#990055">500</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">void</span> <span style="color:#dd4a68">printMusicList</span><span style="color:#999999">(</span><span style="color:#0077aa">void</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
uint8_t i <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span> <span style="color:#990055">0</span><span style="color:#999999">;</span>
<span style="color:#0077aa">if</span><span style="color:#999999">(</span>musicList<span style="color:#999999">[</span>i<span style="color:#999999">]</span><span style="color:#999999">.</span><span style="color:#dd4a68">length</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"\nMusic List: "</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"The SD card audio file scan is empty, please check whether there are audio files in the SD card that meet the format!"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">while</span><span style="color:#999999">(</span>musicList<span style="color:#999999">[</span>i<span style="color:#999999">]</span><span style="color:#999999">.</span><span style="color:#dd4a68">length</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">print</span><span style="color:#999999">(</span><span style="color:#669900">"\t"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">print</span><span style="color:#999999">(</span>i<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">print</span><span style="color:#999999">(</span><span style="color:#669900">" - "</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span>musicList<span style="color:#999999">[</span>i<span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
i<span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">++</span></span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">void</span> <span style="color:#dd4a68">parseSerialCommand</span><span style="color:#999999">(</span><span style="color:#0077aa">void</span><span style="color:#999999">)</span>
<span style="color:#999999">{</span>
<span style="color:#0077aa">String</span> cmd<span style="color:#999999">;</span>
float value<span style="color:#999999">;</span>
<span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">available</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
cmd <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span> <span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">readStringUntil</span><span style="color:#999999">(</span><span style="color:#669900">'-'</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"hp"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Setting a High-Pass filter...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
value <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">parseFloat</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">openFilter</span><span style="color:#999999">(</span>bq_type_highpass<span style="color:#999999">,</span> value<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"lp"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Setting a Low-Pass filter...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
value <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">parseFloat</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">openFilter</span><span style="color:#999999">(</span>bq_type_lowpass<span style="color:#999999">,</span> value<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"closeFilter"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Closing filter...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">closeFilter</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"vol"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Setting volume...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
value <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">parseFloat</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">setVolume</span><span style="color:#999999">(</span>value<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"start"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"starting amplifier...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">SDPlayerControl</span><span style="color:#999999">(</span>SD_AMPLIFIER_PLAY<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"pause"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Pause amplifier...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">SDPlayerControl</span><span style="color:#999999">(</span>SD_AMPLIFIER_PAUSE<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"stop"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Stopping amplifier...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">SDPlayerControl</span><span style="color:#999999">(</span>SD_AMPLIFIER_STOP<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"musicList"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Scanning music list...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">scanSDMusic</span><span style="color:#999999">(</span>musicList<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#dd4a68">printMusicList</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">equals</span><span style="color:#999999">(</span><span style="color:#669900">"changeMusic"</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
cmd <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">=</span></span> musicList<span style="color:#999999">[</span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">parseInt</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">]</span><span style="color:#999999">;</span>
<span style="color:#0077aa">if</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">length</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Changing Music...\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
amplifier<span style="color:#999999">.</span><span style="color:#dd4a68">playSDMusic</span><span style="color:#999999">(</span>cmd<span style="color:#999999">.</span><span style="color:#dd4a68">c_str</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"The currently selected music file is incorrect!\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span><span style="color:#0077aa">else</span><span style="color:#999999">{</span>
<span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Help : \n \
Currently available commands (format: cmd-value):\n \
Start playback: e.g. start-\n \
Pause playback: e.g. pause-\n \
Stop playback: e.g. stop-\n \
Print music list: e.g. musicList-\n \
Change songs according to the music list: e.g. changeMusic-1\n \
Set and open high-pass filter: e.g. hp-500\n \
Set and open low-pass filter: e.g. lp-15000\n \
Close filter: e.g. closeFilter-\n \
Set volume: e.g. vol-5.0\n \
For the detailed meaning, please refer to the code comments of this demo.\n"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">while</span><span style="color:#999999">(</span><span style="color:#669900">Serial</span><span style="color:#999999">.</span><span style="color:#dd4a68">read</span><span style="color:#999999">(</span><span style="color:#999999">)</span> <span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">>=</span></span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span>
</code></span></span></span></span>
Result
Open Arduino IDE, select board as "FireBeetle2 ESP32-E" and set upload rate to 921600

将代码复制到Arduino IDE中,刻录到FireBeetle2 ESP32-E中,音乐文件SD卡会自动播放。

API函数
/**
* @fn begin
* @brief Init function
* @param btName - Created Bluetooth device name
* @param bclk - I2S communication pin number, serial clock (SCK), aka bit clock (BCK)
* @param lrclk - I2S communication pin number, word select (WS), i.e. command (channel) select, used to switch between left and right channel data
* @param din - I2S communication pin number, serial data signal (SD), used to transmit audio data in two's complement format
* @return true on success, false on error
*/
bool begin(const char *btName="bluetoothAmplifier",
int bclk=GPIO_NUM_25,
int lrclk=GPIO_NUM_26,
int din=GPIO_NUM_27);
/**
* @fn initI2S
* @brief Initialize I2S
* @param _bclk - I2S communication pin number, serial clock (SCK), aka bit clock (BCK)
* @param _lrclk - I2S communication pin number, word select (WS), i.e. command (channel) select, used to switch between left and right channel data
* @param _din - I2S communication pin number, serial data signal (SD), used to transmit audio data in two's complement format
* @return true on success, false on error
*/
bool initI2S(int _bclk, int _lrclk, int _din);
/**
* @fn initBluetooth
* @brief Initialize bluetooth
* @param _btName - The created Bluetooth device name
* @return true on success, false on error
*/
bool initBluetooth(const char * _btName);
/**
* @fn initSDCard
* @brief Initialize SD card
* @param csPin The number of the cs pin for spi communication of SD card module
* @return true on success, false on error
*/
bool initSDCard(uint8_t csPin=GPIO_NUM_5);
/*************************** Function ******************************/
/**
* @fn scanSDMusic
* @brief Scan the music files in WAV format in the SD card
* @param musicList - The music files in WAV format scanned from the SD card. Type: character string array.
* @return None
* @note Only support English for path name of music files and WAV for their format currently.
*/
void scanSDMusic(String * musicList);
/**
* @fn playSDMusic
* @brief Play music files in the SD card
* @param Filename - music file name, only support the music files in .wav format currently
* @note Music file name must be an absolute path like /musicDir/music.wav
* @return None
* @note Only support English for path name of music files and WAV for their format currently.
*/
void playSDMusic(const char *Filename);
/**
* @fn SDPlayerControl
* @brief SD card music playback control interface
* @param CMD - playback control command:
* @n SD_AMPLIFIER_PLAY: start to play music, which can be played from the position where you paused before
* @n If no music file is selected through playSDMusic(), the first one in the playlist will be played by default.
* @n Playback error may occur if music files are not scanned from SD card in the correct format (only support English for path name of music files and WVA for their format currently)
* @n SD_AMPLIFIER_PAUSE: pause playback, retain the playback position of the current music file
* @n SD_AMPLIFIER_STOP: stop playback, end the current music playback
* @return None
*/
void SDPlayerControl(uint8_t CMD);
/**
* @fn getMetadata
* @brief Get "metadata" through AVRC command
* @param type - The type of metadata to be obtained, and the parameters currently supported:
* @n ESP_AVRC_MD_ATTR_TITLE ESP_AVRC_MD_ATTR_ARTIST ESP_AVRC_MD_ATTR_ALBUM
* @return The corresponding type of "metadata"
*/
String getMetadata(uint8_t type);
/**
* @fn getRemoteAddress
* @brief Get address of Bluetooth device remotely
* @note The address will be obtained after the module is paired with the remote Bluetooth device and successfully communicates with it based on the Bluetooth AVRCP protocol.
* @return Return the array pointer storing the address of the remote Bluetooth device
* @n Return None when the module does not connect to the remote device or failed to communicate with it based on the Bluetooth AVRCP protocol.
* @n AVRCP(Audio Video Remote Control Profile)
*/
uint8_t * getRemoteAddress(void);
/**
* @fn setVolume
* @brief Set volume
* @param vol - Set volume, the range can be set to 0-9
* @note 5 for the original volume of audio data, no increase or decrease
* @return None
*/
void setVolume(float vol);
/**
* @fn openFilter
* @brief Enable audio filter
* @param type - bq_type_highpass: enable high-pass filtering; bq_type_lowpass: enable low-pass filtering
* @param fc - Threshold of filtering, range: 2-20000
* @note For example, setting high-pass filter mode and the threshold of 500 indicates to filter out the audio signal below 500; high-pass filter and low-pass filter will work simultaneously.
* @return None
*/
void openFilter(int type, float fc);
/**
* @fn closeFilter
* @brief Disable the audio filter
* @return None
*/
void closeFilter(void);
/**
* @fn reverseLeftRightChannels
* @brief Reverse left and right channels, When you find that the left
* @n and right channels play opposite, you can call this interface to adjust
* @return None
*/
void reverseLeftRightChannels(void);
更多推荐

所有评论(0)