在esp32开发板上实现的web_radio,基于wm8978 codec芯片
前言
本文介绍了如何在esp32板子上实现自己的web_radio,用的是wm8978 codec芯片。详细代码参考github工程,这里其实是fork了另一位大牛的工程,在原来的工程中,其实已经可以工作。不过,用的是芯片自带的DAC转换而已,效果不是很好。这里考虑了使用外接IIS codec芯片:wm8978,这是淘宝链接:WM8978音频解码模块扬声器驱动I2S模块STM32F103软解MP3开发板,是IIC接口的,使用很方便。但是注意,这个芯片是需要提供MCLK的!网上查了一下,发现ESP32的GPIO 0正好可以输出该时钟信号。闲话少说,let’s begin!
下载编译
其实README里面已经很详细,关于如何下载esp-idf
以及下载配置工具链我就不多说了。
git clone https://github.com/cloverclose3/ESP32_MP3_Decoder.git
make menuconfig # 配置 Web Radio / Bluetooth Speaker --->
# [*] WM8978 codec support ----
# Wifi Configuration --->
# (你的wifi ssid) WiFi SSID
# (你的wifi psk) WiFi Password
git submodule init
git submodule update
make
硬件连接
在这个工程里面,用到了很多的GPIO口,有的板子,比如我的,有些gpio口已经接了其他的外设,比如led灯,喇叭,继电器等等。还有些gpio口是系统预留的,我们无法使用。还有些gpio只有输入功能等等这些限制。这里罗列了一下esp32可用的gpio,摘录自esp32手册:
The ESP32 chip features 40 physical GPIO pads. Some GPIO pads cannot be used or do not have the corresponding pin on the chip package (refer to the ESP32 Datasheet).
- GPIO6-11 are usually used for SPI flash.
- GPIO20, GPIO24, and GPIO28-31 are not available as pins.
- GPIO34-39 can only be set as input mode and do not have software pullup or pulldown functions.
而这个工程里面已经用到的gpio口有:
- control: 原来用的是GPIO 0,因为我需要用GPIO 0来产生codec需要的MCLK,所以,被我改成了使用GPIO 12。
- lcd: 使用到了GPIO 5 16 17 18 19 21
鉴于上面的分配,我选择连接codec的gpio如下:
- IIC: SDA <-----> GPIO14
- IIC: SCL <-----> GPIO15
- IIS: BCLK <-----> GPIO26
- IIS: LR CLK <-----> GPIO25
- IIS: DATA CLK <-----> GPIO22
- IIS: MCLK <-----> GPIO0
这里的GPIO 0输出的是12M的频率:256*44kHz=11.264MHz,这里的44k是一般的mp3的采样率,再根据芯片手册上 MCLK = 256fs,所以,12M的输出可以满足需求。
最后,再次重申一点,上面的连接只是在我的板子上的情况,哪些口可以用需要根据你板子的实际外设情况来看。有些GPIO口被占用了你需要换其他的口!
最终的连接图如下:
烧写测试
注意,在烧写的时候,需要把GPIO 0接地,烧完了,然后再接到MCLK上。上电,接上耳机,嗯,效果相当不错哦。。
TODO
我在原来工程的基础上,注释掉了LCD的task,发现如果不去掉,会影响网络的连接!这个问题有时间慢慢查吧,这里暂时也用不着液晶的显示屏,注释掉也没有影响。