音乐灯带实时跟随当前环境声音,在led灯带上展现不同的虚拟效果。 程序基于ESP32模块,在Arduino或者ESPHome平台上运行(ESPHome平台可方便接入HomeAssistant)。
Real-time LED strip music visualization running on ESP32 based on Arduino or ESPHome platform(ESPHome can connect to HomeAssistant easily).
更多灯带视频参见https://lw.hachina.io/
- Nodemcu 32S
- HAChina的麦克风扩展板
- 可控灯带
注:
- HAChina的麦克风扩展板能与Nodemcu 32s直接进行物理对接。产品地址
- 如果不使用HAChina的麦克风扩展板,需要自己连接麦克风(PDM型,如果采用I2S麦克风,需要修改程序)。
- 灯带控制使用FastLED库,它支持的可控灯带类型: https://github.com/FastLED/FastLED#supported-led-chipsets
可以直接购买使用HAChina的麦克风扩展板,其中包含:一个PDM数字麦克风,一个触摸按钮,方便连接灯带的接线柱。
它能与nodemcu-32s方便对接。
git clone https://github.com/zhujisheng/audio-reactive-led-strip
cp -r audio-reactive-led-strip/includes/ ~/esphome_config/
cp audio-reactive-led-strip/music_leds_esphome.h ~/esphome_config/
注:以上命令供参考。你只要将includes
目录(目录中4个文件)和music_leds_esphome.h
文件放置在ESPhome的配置目录即可。
【配置灯带】
- 在ESPHome中应用向导生成基础yaml配置文件
- 在yaml配置文件的
esphome
域中增加包含music_leds_esphome.h
文件(如下面样例) - 按照常规fastled灯带配置(支持3线与4线的各种灯带)
- 在正常配置基础上,增加随音乐而动的
addressable_lambda
效果(如下面样例) - 编译固件,上传。启动后,在HomeAssistant配置中接入。
注:
- 上传固件到ESP32开发板时,需要按住板上IO0按钮(或者boot按钮)。
- 在供电不足时,上传后ESP32无法正常工作,增加电力供应即可。
- 如果灯带上led的数量不是60个,请同时修改配置文件中的
num_leds
,与music_leds_esphome.h
文件中的N_PIXELS
esphome:
name: ......
platform: ESP32
board: ......
includes:
- music_leds_esphome.h
- includes/FFT.h
- includes/ExpFilter.h
- includes/VisualEffect.h
- includes/gaussian_filter1d.h
.......
light:
- platform: fastled_clockless
# - platform: fastled_spi
id: LedsStrip
chipset: NEOPIXEL
#chipset: APA102
pin: GPIO21
#data_pin: GPIO21
#clock_pin: GPIO17
num_leds: 60
#rgb_order: BGR
name: "MUSIC LEDS"
effects:
- addressable_rainbow:
- addressable_lambda:
name: Scroll with Music
update_interval: 0s
lambda: |-
music_leds.ShowFrame(MODE_SCROLL, &it);
- addressable_lambda:
name: Energy with Music
update_interval: 0s
lambda: |-
music_leds.ShowFrame(MODE_ENERGY, &it);
- addressable_lambda:
name: Spectrum with Music
update_interval: 0s
lambda: |-
music_leds.ShowFrame(MODE_SPECTRUM, &it);
【配置触摸按钮】
以下配置实现Touch Pad开关灯的效果。 进一步的Touch Pad配置,参考:https://esphome.io/components/binary_sensor/esp32_touch.html
esp32_touch:
# setup_mode: True
binary_sensor:
- platform: esp32_touch
name: "Touch Pad on ESP32"
pin: GPIO32
threshold: 1000
on_press:
then:
- light.toggle: LedsStrip
启动arduino IDE ,在首选项中添加ESP32开发板网址:https://dl.espressif.com/dl/package_esp32_index.json
添加完成之后,打开开发板管理器,搜索ESP32,安装即可,由于网络原因,可能需要多安装几次才能成功。
在菜单项目
加载库
管理库……
中查找并安装最新版本的fastled
。
git clone https://github.com/zhujisheng/audio-reactive-led-strip
- 在Arduino中打开
audio-reactive-led-strip.ino
- 电脑USB口连接ESP32模块
- 在菜单
工具
中选择正确的开发板与端口(串口) - 编译上传即可
- 如果连接非三线60led的灯带,可以修改
audio-reactive-led-strip.ino
文件中的一些定义:N_PIXELS
以及FastLED.addLeds
调用
本项目的实现参考项目https://github.com/scottlawsonbc/audio-reactive-led-strip。但完全使用C++实现,运行硬件架构也更简洁(不需要带声音输入设备的PC或树莓派),并且能与HomeAssistant快速集成。
本项目中应用的PCB板的设计与生产,由Zack-Xu同学完成。