基于ESP32控制MAX9814和Ws2812的音乐氛围灯
一、介绍
本篇文章旨在分享如何自己动手制作一个,随着音乐律动的氛围灯。
二、准备工作
1.烧录平台:Arduino
1.烧录平台:Arduino
官网的一些下载方法不怎么会,我这是按照老师的步骤下载安装的,还有关于Esp32开发板补丁,要想要的话可私。
步骤一:
安装好Arduino和Esp32的补丁之后,还需要安装必要的库文件,让编译器和开发板可以正常烧录,防止报错。必要的库文件:FastLED MegunoLink。有两种安装库文件的方法:1.官网下载压缩包进行添加 2.在Arduino编译器里进行安装。步骤详情在图片下方。
步骤二:
(1).官网下载安装
在搜索引擎里搜索相应的库,下载Arduino官网版本的库文件压缩包。下载完成后,打开Arduino编译器左上角的“项目”→“加载库”→“添加.ZIP库”,将下载好的库文件进行添加即可。
(2)Arduino编译器
在编译器左上角找到“工具”→“管理库”。在搜索栏里输入“FastLED"和“MegunoLink”,进行下载安装。
步骤三:检查库文件是否安装好
打开编译器左上角的“文件”→“示例”→“第三方库示例”,检查是否有安装好的库文件。有就代表安装完成!
2.硬件材料
2.硬件材料
Ws2812b灯带 x1(规格可视情况购买,这里以1米64灯珠进行演示),Esp32开发板 x1(引脚最好是已经焊接好的),Max9814 x1(购买时记得让客服把引脚接好),公母线若干
三、连线方式及运行代码
1.连线方式
1.连线方式
2.代码部分
2.代码部分
(1)灯珠的引脚和数量
(1)灯珠的引脚和数量
#define N_PIXELS 64//灯珠数量
#define MIC_PIN p4//A0(看丝印)
#define LED_PIN 15// D4(看丝印)
灯珠数量根据灯带进行更改,引脚由于个人AO与D4的顺序不一样也要记得更改。
(2)主源码
(2)主源码
#include<FastLED.h>
#include<MegunoLink.h>
#include<Filter.h>
#define N_PIXELS 64//灯珠数量
#define MIC_PIN p4//A0(看丝印)
#define LED_PIN 15// D4(看丝印)
//以下参数可以根据您的音频级别进行调整
#define NOISE 580 //声音
#define TOP (N_PIXELS+2)
#define LED_TYPE WS2812B//灯板型号
#define BRIGHTNESS 100
#define COLOR_ORDER GRB
CRGB leds[N_PIXELS];
int lvl = 0, minLvl = 0, maxLvl = 136; //根据需要调整麦克风接收“最小值”和“最大值”
//音频过滤实现平滑原始音频信号
ExponentialFilter<long> ADCFilter(5,0);
void music_vu()
{
int n, height;
n = analogRead(MIC_PIN);
n = abs(1023 - n);
n = (n <= NOISE) ? 0 : abs(n - NOISE);
ADCFilter.Filter(n);
lvl = ADCFilter.Current();
height = TOP * (lvl - minLvl) / (long)(maxLvl - minLvl);
if(height < 0L) height = 0;
else if(height > TOP) height = TOP;
for(uint8_t i = 0; i < N_PIXELS; i++)
{
if(i >= height) leds[i] = CRGB(0,0,0);
else leds[i] = Wheel( map( i, 0, N_PIXELS-1, 30, 150 ) );
}
FastLED.show();
}
void setup() {
Serial.begin(115200);
FastLED.addLeds<LED_TYPE,LED_PIN,COLOR_ORDER>(leds,N_PIXELS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
music_vu();
}
//调整颜色设置
CRGB Wheel(byte WheelPos) {
if(WheelPos < 85)//初始颜色
return CRGB(WheelPos * 3, 255 - WheelPos * 3, 0);
else if(WheelPos < 170) {
WheelPos -= 85;
return CRGB(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;//终止颜色
return CRGB(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
四、总结
由于是第一次写博客,有的地方也是参考别人和借鉴网络的,如果有错误的地方,还请多多包涵。还望各位指正!!!!