基于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);
  }
}

四、总结

由于是第一次写博客,有的地方也是参考别人和借鉴网络的,如果有错误的地方,还请多多包涵。还望各位指正!!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值