用你的 ESP32 做一个音乐电台
Posted tidyjiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用你的 ESP32 做一个音乐电台相关的知识,希望对你有一定的参考价值。
本工程源代码托管位置 https://github.com/tidyjiang8/esp32-projects
在 GitHub 上找到一个德国小伙移植的 ESP32 音频相关的项目,实现起来比较简单,在这里分享一下。该项目主要是向一个网络服务器获取音乐,然后在 ESP32 上面进行本地解码、播放,从而做成了一个网络电台的功能。
【所需硬件】
最简单的方案包括:
- 一块 ESP32 开发板
- 一个低功率的喇叭
由于没有喇叭,我直接用的耳机代替的。
【硬件接线】
对于内置 DAC 模式,一共需要接三根线:
GPIO25 ---- 左声道
GPIO26 --- 右声道
GND --- 地
一般耳机的左/右声道如下图所示:
【快速开始】
【 假设】
- 你已经安装好 ESP-IDF 和工具链。
- 你已经有一个 WiFi 热点。
- 板子与耳机的线已经接好(PS:我是板子跑起来后用手直接将线按在耳机的接口上的)。
【步骤】
- 使用数据线将开发板连接到你的系统中,让系统能够识别到你的板子(Windows 是
COM\\*
, Linux 是/dev/ttyUSB\\*
)。 - 进入
web_radio
所在目录。 - 执行命名
make menuconfig
进行配置。
- 对串口进行配置。
- 对需要连接的 AP 的 SSID 和 PASSWORD 进行配置。依次进入
Web Radio / Bluetooth Speaker --->
、Wifi Configuration --->
,然后输入热点的SSID
和密码
。 - 对音频输出模式进行选项。依次进入
Web Radio / Bluetooth Speaker --->
、Audio Output --->
、Select Audio Output Mode
,然后选择Built-In DAC
。
- 执行命令
make
进行编译 - 执行命令
make flash monitor
将编译生成的镜像烧写到 ESP32 开发板上面,并查看串口输出。
【现象】
带上耳机,有没有听到音乐呢?
此外,按下 boot 按键,音乐会暂停,再次按下 boot 按键,音乐会重新播放。
【实现原理总结】
整个 Web Radio 的实现过程可以划分为三部分:
- 获取音频流。程序使用的 http 协议从一个服务器上面获取的音频数据,并将整个数据存放到一个 buffer 中。
- 对音频流进行解码。当 buffer 中有一定的数据后(可以通过宏进行调整),开启解码线程。解码线程会从这个 buffer 中取出数据,然后调用解码库,将音频流解码为可直接输出的数字信号。
- 将解码后的数据通过 DAC 输出。解码线程每解完一帧数据后,将它通过 I2S 驱动程序直接送给 DAC。
这里面存在一个同步的问题,即从服务器上面获取音频流与对音频流进行解码的同步。如果获取的音频流过快,超过了解码的速度,则它可能将 buffer 撑爆,因此会丢失部分数据;如果解码的速度过快,超过了获取音频的速度,则它可能将 buffer 消耗的干干净净,从而也会出现声音卡顿问题。这需要进行权衡。
以上是关于用你的 ESP32 做一个音乐电台的主要内容,如果未能解决你的问题,请参考以下文章