ESP32 下蓝牙播放音乐

之前发过一贴:

esp32 下蓝牙播放音乐歌词的获得_esp32 蓝牙音频-CSDN博客

说的是esp32 蓝牙接收音频流同步获得歌词的方案,但是有个很核心的内容由于硬件原因没有谈及,就是播放音乐。

这几天被抖音上各种水桶卡顿刺激了,经过一番折腾,终于成功,顺便来分享一下经验。

ESP32 下蓝牙播放音乐_第1张图片

其实使用A2DP 通过蓝牙接收数据进行播放相对简单:

硬件清单:esp32 ,喇叭和MAX98357 ,MAX98357 很便宜,包邮也才5.5

之前不想加这个MAX98357, 尝试过esp32 直接输出的方案,音量极低,不知道是不是接触不良,代码简单如下:

#include 

#include "a2dp/BluetoothA2DPSink.h"

BluetoothA2DPSink a2dp_sink;

void setup(){


 i2s_pin_config_t my_pin_config = {
        .bck_io_num = 26,//输入 bck
        .ws_io_num = 25,//输入 
        .data_out_num = 22,//输出
        .data_in_num = I2S_PIN_NO_CHANGE
    };
  a2dp_sink.set_pin_config(my_pin_config);
  a2dp_sink.start("my music");

}


void loop(){

}

需要特别说明的是:

 i2s_pin_config_t my_pin_config = {
        .bck_io_num = 26,//输入 bck
        .ws_io_num = 25,//输入 
        .data_out_num = 22,//输出
        .data_in_num = I2S_PIN_NO_CHANGE
    };

 

       这个GPIO可以任意指定,下面的配置也是可以正常运行的。

  i2s_pin_config_t my_pin_config = {
        .bck_io_num = 32,//输入
        .ws_io_num = 33,//输入
        .data_out_num = 23,//输出
        .data_in_num = I2S_PIN_NO_CHANGE
    };

需要特别指明一下这个配置对应MAX98357  上的引脚:

        .bck_io_num  // BCLK

        .ws_io_num //LRC

        .data_out_num // DIN

我在这里花时间比较多的原因是,因为原先使用A2DP  是注册了多个数据的回调:

  // a2dp_sink.set_rssi_active(true);
  // a2dp_sink.set_rssi_callback(rssi);
  // a2dp_sink.set_on_data_received(data_receive_callback);
  // a2dp_sink.set_stream_reader(read_data_stream, false);

这导致了花了太多时间查找原因,上面的回调导致不能正常输出音频,没有明确确认是那个回调,但是估计是: a2dp_sink.set_stream_reader(read_data_stream, false);

因此,如果你尝试ESP32 通过I2S 链接硬件放大器进行蓝牙下的音乐播放请先使用最简单的代码,如果没有音频请查找硬件连接线。

MAX98357  链接喇叭的时候莫名的正反接线都可以。

建议别尝试不通过放大器的方案了,最简单的原因就是哪怕你折腾通了,但是单片机能够引脚能够输出的电流是极小的,好像是30ma,这很难带动喇叭,说实话这个MAX98357  的总功率太小,才3W。

你可能感兴趣的:(嵌入式硬件,esp32,蓝牙,MAX98357,音乐)