ESP32教程39/55 - 将ESP32用作蓝牙音乐播放器 | SunFounder的ESP32物联网学习套件
在本教程中,我们将探讨如何将ESP32用作蓝牙音乐播放器。ESP32是一款功能强大的微控制器,集成了Wi-Fi和蓝牙功能,使其成为物联网应用的绝佳选择。我们将使用蓝牙A2DP接收器将音频流传输到ESP32,然后通过其内置DAC输出。
音频模块
为实现这一目标,我们将使用必要的库和配置来设置ESP32,以处理蓝牙音频流。在本教程结束时,您将拥有一个可用的蓝牙音频播放器,可以通过智能手机或其他支持蓝牙的设备进行控制。如需更详细的说明,请务必观看视频(视频中00:00处)。
扬声器图片
硬件说明
该项目的主要组件包括ESP32微控制器和BluetoothA2DPSink库。ESP32内置数模转换器(DAC),无需额外硬件即可输出音频。BluetoothA2DPSink库简化了蓝牙音频接收器的设置过程,使您能够通过蓝牙接收音频流。
ESP32具有多个GPIO引脚,可配置用于各种用途,包括音频输出。在我们的设置中,我们将使用GPIO25作为左右音频通道。该库负责管理蓝牙连接和音频流,使您能够更专注于应用程序,而不是底层的蓝牙协议。
数据手册详情
| 制造商 |
乐鑫科技 |
| 零件编号 |
ESP32-WROOM-32 |
| 逻辑/IO电压 |
3.3 V |
| 电源电压 |
3.0–3.6 V |
| 输出电流(每通道) |
最高40 mA |
| PWM频率指导 |
1 KHz - 40 KHz |
| 热限制 |
125 °C |
| 封装 |
QFN48 |
| 备注/变体 |
提供多种配置 |
- 常用GPIO引脚可用于音频输出。
- 确保提供正确的电源(3.3 V)以避免损坏。
- 保持固件更新以获得更好的蓝牙性能。
- 使用外部天线以增强蓝牙范围。
- 注意DAC输出限制;如需更高质量的音频,请使用外部DAC。
接线说明
esp32-39_bluetooth_audio_wiring
要为蓝牙音频播放接线ESP32,首先将ESP32连接到电源。使用USB线将其连接到计算机,这将提供所需电源。接下来,连接音频输出引脚:将左音频通道连接到GPIO25,右音频通道连接到同一GPIO25引脚。您可以使用跳线进行这些连接。
由于ESP32具有内置DAC,因此音频输出不需要任何额外组件。但是,请确保ESP32与您可能使用的任何外部音频设备之间共地。此设置将允许您通过蓝牙直接将音频流传输到ESP32。
代码示例与讲解
以下代码片段初始化蓝牙A2DP接收器,并设置用于音频播放的I2S配置。
// ==> 使用ESP32内置DAC的示例
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
const i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
.sample_rate = 44100,
.bits_per_sample = (i2s_bits_per_sample_t)16,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
};
a2dp_sink.set_i2s_config(i2s_config);
a2dp_sink.start("ESP32_Bluetooth");
}
在setup()函数中,我们首先配置I2S设置,将模式指定为主模式并启用内置DAC。采样率设置为44100 Hz,这是音频播放的标准值。然后以指定名称启动蓝牙A2DP接收器,使其能够被其他蓝牙设备识别。
loop()函数保持为空,因为蓝牙库在后台处理流传输。您可以查看文章下方加载的完整代码以了解更多详情。
演示/预期效果
设置完成并上传代码后,给ESP32上电,并在您的蓝牙设备上搜索名为“ESP32_Bluetooth”的设备。连接后,所连接设备上播放的任何音频都应通过ESP32流式输出。只要连接正确且电源稳定,您就可以通过DAC获得高质量的音频输出。
常见问题包括音频输出引脚接线错误和电源供电不足。请确保ESP32正确供电,并确保接地连接牢固。如果遇到任何问题,请查看视频中的故障排除提示(视频中00:00处)。
视频时间戳
- 00:00 开始
- 2:12 介绍
- 5:22 接线说明
- 7:51 Arduino代码说明
- 10:37 在Arduino IDE中选择ESP32开发板和COM端口
- 12:19 使用手机通过ESP32播放音乐
- 13:30 将更强大的放大器连接到ESP32
图像
esp32-39_bluetooth_audio_wiring
speaker_pic
audio_module
esp32-39_bluetooth_audio_wiring
840-ESP32 Tutorial 39/55- Arduino code for playing audio via bluetooth
语言: C++
/*
* // ==> 示例使用 ESP32 内置 DAC
*
* // R,L 连接到 GPIO25
*/
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
const i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
.sample_rate = 44100, // 通过蓝牙的信息进行了修正
.bits_per_sample = (i2s_bits_per_sample_t)16, // DAC模块将只使用来自最高有效位的8位。
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_MSB,
.intr_alloc_flags = 0, // 默认中断优先级
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false
};
a2dp_sink.set_i2s_config(i2s_config);
a2dp_sink.start("ESP32_Bluetooth");
}
void loop() {
}