用ESP8266播放音乐

简介: 最近我们做一个项目需要在ESP8266中播放一段音乐,当时一下就傻了,ESP8266可是没有D/A输出的! 一开始我们直接买了一块D/A解码的板子然后接上一个小功放来播放,但效果令人失望。

最近我们做一个项目需要在ESP8266中播放一段音乐,当时一下就傻了,ESP8266可是没有D/A输出的! 一开始我们直接买了一块D/A解码的板子然后接上一个小功放来播放,但效果令人失望。声音小不说其声音有很大的干扰噪声。而且这种做法无疑是难以产品化的,一个D/A解码再加一个功放那成本已经直接飙升了。

几经努力我们终于找到了一个非常实用的方案,根本不需要增加任何的附加硬件就以直接播放mp3!

这都归功于ESP8266Audio这个库,将喇叭直接接到一个数字输出口就可以直接播放MP3了,为了能有更大的功率加个普通三极管就可以完美推动一个小功率喇叭正常动作了。

 2N3904 (NPN)
                            +---------+
                            |         |     +-|
                            | E  B  C |    / S|
                            +-|--|--|-+    | P|
                              |  |  +------+ E|
                              |  |         | A|
ESP8266-GND ------------------+  |  +------+ K| 
                                 |  |      | E|
ESP8266-I2SOUT (Rx) -------------+  |      \ R|
                                    |       +-|
USB 5V -----------------------------+

这里我会放一个最简单的示例来展示一下怎么来使用这个库。

首先这个示例要使用SPIFFS来存储音乐文件,关于SPIFFS的具体用法可以参考我以前发表的SPIFFS的使用一文。

将ESP8266Audio这个库安装好以后,要先引用以下几个头文件:

#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"

这个库使用起来非常简单。首先是初始化

AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2SNoDAC *out;

void setup()
{
  SPIFFS.begin();
  file = new AudioFileSourceSPIFFS("/test.mp3");
  out = new AudioOutputI2SNoDAC();
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}

然后在主循环函数中判断文件是否已经播放完成

void loop()
{
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop(); 
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
  }
}

以下是全部代码:

#include <Arduino.h>
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2SNoDAC *out;
void setup()
{
  Serial.begin(115200);
  delay(1000);
  SPIFFS.begin();
  file = new AudioFileSourceSPIFFS("/jamonit.mp3");
  out = new AudioOutputI2SNoDAC();
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
}

void loop()
{
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop(); 
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
  }
}

参考阅读

相关文章
|
Android开发 芯片
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
1231 0
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
|
芯片
STM32使用HAL库实现RS485通讯(全双工串口)
STM32使用HAL库实现RS485通讯(全双工串口)
3175 0
|
JavaScript 大数据 BI
Superset图表通过iframe嵌入Html网页展示一文详解
Superset图表通过iframe嵌入Html网页展示一文详解
3542 0
Superset图表通过iframe嵌入Html网页展示一文详解
|
算法 Ubuntu 物联网
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
经过上一篇的WiFI入门篇,我们知道了WiFi初始化方式 和学会了WiFi的几种工作方式, 在实际应用中,环境复杂多变,在固件中输入SSID 的方式太不通用了, 所以肯定是需要学习一下如何在不同的环境中联网,就是所谓的配网。 ESP32-C3的配网方式有多种,本文主要说明测试 Smart方式 和 BlueIF方式。
3941 0
ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)
|
10月前
|
存储 人工智能 机器人
【2026必看 AI智能体】零基础Coze平台使用教程
本文介绍了Coze智能体的实战入门与进阶应用,涵盖智能体创建、配置大语言模型(LLM)、使用插件扩展功能、构建知识库(RAG)实现高考志愿填报助手、利用记忆功能开发记账本,以及通过API调用和工作流实现中草药识别与菜谱生成等复杂任务,全面展示其在多场景下的智能化能力。
8770 11
|
10月前
|
Java 应用服务中间件 微服务
了解spring项目与springboot项目的区别和优缺点
Spring Boot是Spring的增强版,通过自动配置和Starter依赖简化开发,内置服务器支持JAR包直接运行,适合微服务与快速开发;传统Spring项目则更灵活,适合复杂定制场景。二者互补,新项目推荐Spring Boot。
|
前端开发 JavaScript API
electron多标签页模式更像客户端
electron多标签页模式更像客户端
1512 7
electron多标签页模式更像客户端
|
IDE API 开发工具
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
10131 3
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
|
JSON API 开发者
速卖通获得AliExpress商品详情API接口文章
速卖通(AliExpress)是阿里巴巴旗下的全球跨境电商平台,提供便捷的在线购物渠道。为帮助开发者和商家高效管理商品信息,速卖通提供了商品详情API接口。本文介绍如何使用aliexpress.item_get API获取商品详情,包括获取API密钥、调用API接口及处理响应数据,帮助用户提升商品管理和营销效率。注意API调用限制和合法合规使用。
|
人工智能 编解码 算法
视频云技术解析:春晚“子弹时间”背后的黑科技
视频云技术解析:春晚“子弹时间”背后的黑科技
626 0

热门文章

最新文章