• ESP32 下蓝牙播放音乐


    之前发过一贴:

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

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

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

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

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

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

    1. #include
    2. #include "a2dp/BluetoothA2DPSink.h"
    3. BluetoothA2DPSink a2dp_sink;
    4. void setup(){
    5. i2s_pin_config_t my_pin_config = {
    6. .bck_io_num = 26,//输入 bck
    7. .ws_io_num = 25,//输入
    8. .data_out_num = 22,//输出
    9. .data_in_num = I2S_PIN_NO_CHANGE
    10. };
    11. a2dp_sink.set_pin_config(my_pin_config);
    12. a2dp_sink.start("my music");
    13. }
    14. void loop(){
    15. }

    需要特别说明的是:

    1. i2s_pin_config_t my_pin_config = {
    2. .bck_io_num = 26,//输入 bck
    3. .ws_io_num = 25,//输入
    4. .data_out_num = 22,//输出
    5. .data_in_num = I2S_PIN_NO_CHANGE
    6. };

     

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

    1. i2s_pin_config_t my_pin_config = {
    2. .bck_io_num = 32,//输入
    3. .ws_io_num = 33,//输入
    4. .data_out_num = 23,//输出
    5. .data_in_num = I2S_PIN_NO_CHANGE
    6. };

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

            .bck_io_num  // BCLK

            .ws_io_num //LRC

            .data_out_num // DIN

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

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

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

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

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

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

  • 相关阅读:
    期货开户合约的规模和价值
    Vue 访问外链失败问题
    01-redis篇 两种数据储存持久化方式
    UDS程序完整
    【MySQL用法】MySQL中大于,大于等于,小于,小于等于的转义写法
    Design A Pastebin
    R语言——taxize(第一部分)
    JVM对象创建与内存分配机制分析
    Ubuntu服务器配置qq邮箱发送信息
    基于YOLOv8模型的120类狗狗目标检测系统(PyTorch+Pyside6+YOLOv8模型)
  • 原文地址:https://blog.csdn.net/platform/article/details/134340714