码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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。

  • 相关阅读:
    “成为视频制作达人:高效为视频批量添加文字水印的技巧分享“
    PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)
    BERT tokenizer 增加全角标点符号
    [更新]ARCGIS之土地耕地占补平衡、进出平衡系统报备坐标txt格式批量导出工具(定制开发版)
    MLP-Mixer: An all-MLP Architecture for Vision
    为什么说指针是 C 语言的精髓?
    计算机毕业设计 旅游出行指南系统 Vue+SpringBoot+MySQL
    docker-compose一键部署mysql
    从零开始:Django项目的创建与配置指南
    Jmeter的学习
  • 原文地址:https://blog.csdn.net/platform/article/details/134340714
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号