Updated on 8月 1, 2020
音乐可视化 – 基于ESP32
一、简介
使用ESP32内置的ADC采集电脑输出的音频信号,通过RGB灯带展现出来
最初计划采用外置ADC将音频转为I2S格式传给ESP32,但是遇到了许多问题。 于是转为使用ESP32内置的ADC,虽然也踩了许多坑,但也逐一解决了
GitHub地址:https://github.com/XingKongSync/X.K.MusicESP
二、材料
- ESP32
- WS2812
- Music
三、接线
- 两条100颗灯珠的WS2812灯带串联,数据线接入ESP32的GPIO12
- 3.5mm的AUX线,左声道接入ESP32的ADC1_CHANNEL_3,地线接EPS32的GND
四、参考及引用
大部分代码来自于:
其他:
- https://esphome.io/
- https://esp32.com/viewtopic.php?f=12&t=10749
- https://www.reddit.com/r/esp32/comments/g48lzs/esp_32_i2s_and_cs4344_dac/
- https://www.youtube.com/watch?v=m8LwPNXqK9o&t=124s
- https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/i2s.html
五、踩坑总结
- 在通过I2S驱动使用内置ADC时,我读取了长度为512的I2S数据,但是只有前面一半数据可用,不知道为什么
- 如果音频线和ESP32没有接地,采集出来的信号中会有杂波
- 有的时候音量过大会导致ESP32重启,是因为电压超过了内置ADC的量程了吗?
- 接地后,当电脑在没有播放音乐的时候,会出现随机的尖刺,不知道为什么。我使用卡尔曼滤波器 + 星空曼滤波器解决了
- 我买的四段式AUX插座,如果把三段式音频插头插到底,会出现左右声道短路的情况,不知道其他AUX插座是不是这样
六、效果演示
https://www.bilibili.com/video/BV1vi4y1x7Pa/