搜索代码

ESP32教程39/55 - 将ESP32用作蓝牙音乐播放器 | SunFounder的ESP32物联网学习套件

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
esp32-39_bluetooth_audio_wiring
speaker_pic
speaker_pic
audio_module
audio_module
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() {
}

资源与参考

文件📁

没有可用的文件。