网站首页 > 知识剖析 正文
ESP8266播放音频文件
1、如何播放音频?
ESP8266播放音频文件可以参考:
https://github.com/earlephilhower/ESP8266Audio
这里有各种音频文件的播放说明,包括MOD、WAV、FLAC、MIDI、RTTTL、MP3、 AAC;除了可以播放本地存储的音频文件,还可以通过http进行流式播放;
要把文件上传到ESP8266里面,需要用到一个工具:ESP8266 Sketch Data Upload 按照这个工具里面的步骤操作后,重启Arduino IDE 可以在菜单栏里面的工具下看到ESP8266 Sketch Data Upload这个选项,单击这个选项会在项目源码目录下创建一个data的文件夹,把需要上传的文件放入该文件夹之后,再次单击ESP8266 Sketch Data Upload这个选项即可以把文件上传到ESP8266里面了。
安装ESP8266Audio这个用于支持播放音频的库,参考
https://link.zhihu.com/?target=https%3A//github.com/earlephilhower/ESP8266Audio%23installation
参考下图接线,使用RX输出:
另外一种接线方式:
示例代码:
// esp8266 播放音频文件
#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("/hello.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);
}
}
TIPS:
hello.mp3需要通过ESP8266 Sketch Upload 进行上传hello.mp3最好是一个8位44.1kHZ单声道(mono)的音频文件注意文件大小,太大会导致上传失败
上面的示例代码只会在机器启动的时候播放一次。
2、如何控制播放?
一般都希望可以按自己的需要进行播放音频,比如加一个按钮触控开关,每次触发开关就播放一次音频。实现这样的小功能就需要对上面示例代码进行简单修改了。
接多一个开关:
示例代码:
// 按钮控制播放音频
#include <Arduino.h>
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2SNoDAC *out;
int SWITCH_PIN = D4;
int switchVal = 1;
void setup()
{
Serial.begin(9600);
delay(1000);
SPIFFS.begin();
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
pinMode(SWITCH_PIN, INPUT);
}
void loop()
{
switchVal = digitalRead(SWITCH_PIN);
Serial.println(switchVal);
if (mp3->isRunning()) { // 是否在播放
if (!mp3->loop()){ // 是否播放完了
mp3->stop(); // 停止播放
delete file;
delete mp3;
mp3 = new AudioGeneratorMP3();
}
} else {
if (switchVal == 0) { // 开关接通为低电平
file = new AudioFileSourceSPIFFS("/hello.mp3"); // 初始化音频文件
Serial.printf("MP3 done\n");
delay(1000);
mp3->begin(file, out); // 开始播放文件
}
}
}
TIPS
file播放一次之后就无法再次播放,所以每次播放前需要重新初始化一个音频文件
...
file = new AudioFileSourceSPIFFS("/hello.mp3");
...
音频在播放的时候loop是持续执行的,没有等待音频播放完毕;所以每次loop都是需要判断是否在播放;如果在播放,判断是否播放完成。
...
if (mp3->isRunning()){ // 判断是否在播放
if (!mp3->loop()){ // 判断是否播放完成
...
}
}
...
成功写入程序后,每次单击按钮即可播放hello.mp3。
参考资料:
ESP8266播放音频文件
https://zhuanlan.zhihu.com/p/37907663
ESP8266Audio
https://github.com/earlephilhower/ESP8266Audio
Playing Wave File Using Arduino
https://www.instructables.com/id/Playing-Wave-file-using-arduino/
用ESP8266播放音乐
https://www.jianshu.com/p/88e789a4b9de
猜你喜欢
- 2025-09-06 postgresql自定义函数实现,通过contrib模块进行扩展
- 2025-09-06 PostgreSQL "+"操作符函数的获取机制
- 2025-09-06 VBA中SQLOpen函数_vba调用sql获取数据
- 2025-09-06 VBA中SQLExecQuery函数_vba操作sql数据库
- 2025-09-06 第 10 章:聚合函数与分组 - PostgreSQL入门
- 2025-09-06 SQL面试经典问题-开窗函数_sql开窗函数详解
- 2025-09-06 技术栈:我们把SQL窗口函数分为5大类12小类,这样好记吗?
- 2025-09-06 第 15 章:窗口函数 (Window Functions) - PostgreSQL入门
- 2025-09-06 SQL常用经典函数大全_sql函数有哪些
- 2025-09-06 SQL窗口函数知多少?_sql窗口函数有哪些
- 最近发表
-
- postgresql自定义函数实现,通过contrib模块进行扩展
- PostgreSQL "+"操作符函数的获取机制
- VBA中SQLOpen函数_vba调用sql获取数据
- VBA中SQLExecQuery函数_vba操作sql数据库
- 第 10 章:聚合函数与分组 - PostgreSQL入门
- SQL面试经典问题-开窗函数_sql开窗函数详解
- 技术栈:我们把SQL窗口函数分为5大类12小类,这样好记吗?
- 第 15 章:窗口函数 (Window Functions) - PostgreSQL入门
- SQL常用经典函数大全_sql函数有哪些
- SQL窗口函数知多少?_sql窗口函数有哪些
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)