• 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。

  • 相关阅读:
    上传和下载文件到google drive/Local pc
    三剑客之 grep
    人声分离网站,帮你快速提取视频中的人声和背景音乐
    MFC软件国际化的几个问题及其解决方案
    传出神经系统分为哪两类,传出神经的分类与功能
    Fury:一个基于JIT动态编译的高性能多语言原生序列化框架
    牛客网之SQL非技术快速入门(7)-字符串截取、切割、删除、替换
    Python函数装饰器的深入解析
    HCIP交换实验
    windows下的volatility取证分析与讲解
  • 原文地址:https://blog.csdn.net/platform/article/details/134340714