ESP8285+WS2812+MAX9814制作的音乐律动氛围灯

article/2025/9/27 11:31:34

该项目主要参考了立创EDA开源广场的项目:

esp8285芯片ESP-01F模块为主控,MAX9814音频采集模块,WS2812 2020rgb灯珠,Arduino编程环境简单制作一个律动灯条。

因为正在学习硬件PCB,所以只能算是一个仿照。

硬件:

下面附上原理图和pcb:

 相比原项目,我做的只是一个学习项目,为了能白嫖pcb打样,原来的30个ws2812我只用了20个,原项目的自动下载电路IMH3A因为太贵了淘宝还不包邮就换成了两个L8050Q,因为是后面画好pcb买材料时发现的,所以L8050Q没有位置放了,所以pcb就不是长条形状了。只能往外面扩展了。

 

为了板子好看所以把所有元件的丝印都去掉了,看的时候不是很方便。我第一次尝试很小的板子布线,过孔也不少,但还是学到些东西。

这个项目主要采用的一节锂电池就行,大概在4v左右,标的是3.7v。通过typeC充电,LED指示。

通过MAX9814进行音频采集模拟值。 

上面标注了DC offset(直流偏移):1.2v。而esp8285或者8266的ADC采样只能接收1v,所以采集的ADC信号要进行串联电阻分压,具体咪头电路详解可以参照:

卓大大的咪头电路分析

所以电压信号是一个在不断变化的类似交流信号向上偏置的结果。

下面附上pcb和原理图资料:

EDA版本和AD版本的pcb和原理图

软件:

 主要需要库有:

 注意这个库的最新版本我的有错误,如果运行发现程序出错的显示库里面有错,建议下载旧版本试试。

ADC采样:

 采集ADC的引脚是A0。

 因为是关于1.25v上下波动的,所以把采集到的ADC减去1.25v即默认没有声音下采集到的电压值。(我测到的是480)

ws2812灯的点亮:

 利用这个simple库可以轻松点亮灯以及改变颜色。

 定义好引脚和灯的数量

用 RGB点亮第i个灯。

滤波:

我利用过均值滤波,冒泡排序取中值发现效果都不好,所以又去掉了,采用了十个值求平均值,这里可以再试试不滤波

下面把均值滤波+冒泡排序滤波和普通均值滤波两种最后调出的可行的代码附上:

均值滤波+冒泡排序滤波:

参考:

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library#include <Adafruit_NeoPixel.h>#define NOISE 5       //噪音底线#ifdef __AVR__#include <avr/power.h>
#endif// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            13// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      20// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);int delayval = 10; // delay for half a secondvoid setup() {// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif// End of trinket special codepixels.begin(); // This initializes the NeoPixel library.Serial.begin(115200);
}void loop() {int ADC_VALUE[100];int last_VALUE=0;int ADC_sort[10];int light_ADC=0;for(int i=0;i<100;i++){ADC_VALUE[i]=analogRead(A0);}for(int i=0;i<10;i++){int ADC_compute=0;for(int j=i*10;j<(i*10+10);j++){ADC_compute+=ADC_VALUE[j];}ADC_sort[i]=ADC_compute/10;}last_VALUE=last_VALUE/10;//平均值滤波,10个,上面//下面冒泡排序,优化版本int my_position = 9;for(int i=0;i<9;i++){boolean isSwap = false;int newPosition = 0;for(int j=0;j<my_position;j++){if(ADC_sort[j]>ADC_sort[j+1]){int temp=ADC_sort[j];ADC_sort[j]=ADC_sort[j+1];ADC_sort[j+1]=temp;isSwap = true;  newPosition = j;       }if(!isSwap){break;}my_position = newPosition;}}light_ADC=(ADC_sort[5]+ADC_sort[6])/2;light_ADC = abs(475 - light_ADC);//  Serial.println( light_ADC);light_ADC = (light_ADC <= NOISE) ? 0 : light_ADC; int num;if(light_ADC<12){num=light_ADC/2;}else{num=light_ADC/3;}if(num>=21){num=20;}   for(int i=0;i<num;i++){if(i<=10){pixels.setPixelColor(i, pixels.Color(50,255-i*25,0)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(7);}else{pixels.setPixelColor(i, pixels.Color(50,5,255-(i-10)*25)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(7);}}for(int i=num;i>=0;i--){pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(7);}}// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.

普通均值滤波:

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library#include <Adafruit_NeoPixel.h>#define NOISE 40       //噪音底线#ifdef __AVR__#include <avr/power.h>
#endif// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            13// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      20// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);void setup() {// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif// End of trinket special codepixels.begin(); // This initializes the NeoPixel library.Serial.begin(115200);
}void loop() {int ADC_VALUE[100];int last_VALUE=0;int ADC_sort[10];int light_ADC=0;int ADC_compute=0;for(int i=0;i<10;i++){ADC_compute+=analogRead(A0);}last_VALUE=ADC_compute/10;//平均值滤波,10个,上面light_ADC=last_VALUE;light_ADC=abs(last_VALUE-480);light_ADC = (light_ADC <= NOISE) ? 0 :(light_ADC-15); Serial.println(abs(last_VALUE-480));int num;num=light_ADC/8;if(num>=21){num=20;}   for(int i=0;i<num;i++){if(i<=10){pixels.setPixelColor(i, pixels.Color(50,255-i*25,0)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(10);}else{pixels.setPixelColor(i, pixels.Color(50,5,255-(i-10)*25)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(10);}}// delay(10);for(int i=num;i>=0;i--){pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color. pixels.show(); // This sends the updated pixel color to the hardware.delay(1);}}// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.

主要是把灯挨个点亮,再挨个熄灭,把采集到的ADC除以某个数计算点的个数。

附上实物图:

 按键买错了,所以焊接成那样了

主要材料:

 这个轻触开关我买错了,封装买大了:

  

不完善之处:这个灯感觉采集的值不是线性的,所以计算点亮灯的个数的计算方法还有待改进,按键啥的还没用到,网页啥的也没写,esp8266这些感觉开发不是很方便,库隐藏起来还需要到本地文件找,下载程序也比起keil要慢一些。


http://chatgpt.dhexx.cn/article/WKN8Xoqx.shtml

相关文章

探索ESP8285(2)搭建Windows版MQTT服务器

CCC_122&#xff1a;博客只用于学习交流&#xff0c;不涉及任何商业用途&#xff0c;如果有错误之处&#xff0c;欢迎指正。 MQTT服务器有多个选择&#xff0c;例如EMQX&#xff0c;Mosquitto&#xff0c;Apollo&#xff0c;以下我们选择比较简单的EMQX来搭建MQTT的服务器。 一…

峥果智能连接不到服务器,峥果浴霸 ESP8285版本 固件

ESP ZINGUO 峥果智能浴霸个人固件. 作者声明 注意: 本项目主要目的为作者本人自己学习及使用峥果智能浴霸而开发&#xff0c;本着开源精神及造福网友而开源&#xff0c;仅个人开发&#xff0c;可能无法做到完整的测试&#xff0c;所以不承担他人使用本项目照成的所有后果。 严禁…

ESP8266 简单研究 ESP8285 研究

网址&#xff1a; http://wiki.ai-thinker.com/esp8266 ESP8266 系列模组专题 概述 ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组&#xff0c;可以方便地进行二次开发&#xff0c;接入云端服务&#xff0c;实现…

基于RK3399ESP8285自动售货柜项目—MP08开发板端代码详解

基于RK3399&ESP8285自动售货柜项目—②MP08开发板端代码详解 本系列文章将详细讲解该基于RK3399及ESP8285自动售货柜的完整实现方法&#xff0c;从硬件连接到网络通信再到软件实现&#xff0c;本产品所用开发板为RK3399以及MP08_2019/11/03 , 如有疑问与见解&#xff0c;可…

ESP8285 ESP-AT编译流程和操作步骤

ESP8282ESP-AT编译流程和操作步骤 ESP8285 相当于ESP8266EX 1M SPI Flash ,他的编译工具和ESP-AT 都是跟ESP8266EX 一样的. 他的AT指令不能做OTA分区. 由于flash空间原因. 个人理解 配置好 esp8285 的编译工具链 setup-toolchain export PATH"$PATH:$HOME/xtensa-lx1…

Sipeed M1W内部esp8285固件烧录教程

Sipeed 的K210是真的香啊&#xff0c;但是内部的这个esp8285是做的真的不咋地。买回来之后这个8285折腾死我了&#xff0c;好几次固件出问题&#xff0c;掉固件&#xff0c;问了客户姐姐和群主“泽畔”大佬才解决&#xff0c;所以总结下。 下载固件&#xff1a; 首先我们需要先…

ESP8266与ESP8285开发时有什么区别

ESP8266与ESP8285开发时有什么区别 ESP8266与ESP8285开发时有什么区别烧录环节的改变编译前Makefile文件的更改 ESP8266与ESP8285开发时有什么区别 ESP8266模块在WiFi联网领域已经被广泛使用&#xff0c;但是ESP8266芯片是需要外挂Flash芯片的&#xff0c;这样就使模块不能做的…

ESP8285 sdkconfig

ESP8285与ESP8266使用同一套SDK&#xff0c;ESP8285内部集成了1MB或2MB的SPI FLASH&#xff0c;DOUT模式&#xff0c;所以编译和下载时需要将SPI MODE设置为DOUT模式&#xff0c;编译代码之前先执行make menuconfig ->Serial flasher config->Flash SPI mode->DOUT&am…

探索ESP8285(1)搭建arduino开发ESP8285环境搭建

CCC_122&#xff1a;博客只用于学习交流&#xff0c;不涉及任何商业用途&#xff0c;如果有错误之处&#xff0c;欢迎指正。 前言&#xff1a;ESP8285其实是ESP8266的升级版本&#xff0c;两者可以共用同一套SDK&#xff0c;只是ESP8285内部集成了1MB Flash&#xff0c;SPI Mod…

【开发环境准备】更新板载ESP8285固件

更新板载 ESP8285 固件 1. 简介: 目前 MaixPy 系列采用 M1W 模块的作为核心模块的开发板有: MaixDock(M1W), MaixGo 通常情况下我们不需要更新模块内部 WIFI SOC ESP8285 的固件,但是如果使用过程中存在 bug,以及有新版本的固件发布时我们就可以更新固件 MaixDock、Maix…

基于RK3399ESP8285自动售货柜项目—ESP8266(8285)程序编写与烧录

基于RK3399&ESP8285自动售货柜项目—ESP8266(8285)程序编写与烧录 本系列文章讲详细讲解该基于RK3399及ESP8285自动售货柜的完整实现方法&#xff0c;从硬件连接到网络通信再到软件实现&#xff0c;本产品所用开发板为RK3399以及MP08_2019/11/03 , 如有疑问与见解&#xff…

ESP8285调试记录

引言 1.1. 目的 ESP8285模组ESP-IDF(Espressif IoT Development Framework&#xff09;进行软件开发。包括编译环境搭建&#xff0c;客制化AT&#xff0c;API开发&#xff0c;调试下载等。 ESP-IDF介绍 2.1. 概述 ESP8285和ESP8266的代码是兼容的&#xff0c;8285是内置FlashS…

ESP8285开发套件、比ESP8266好,利用率比ESP-01更好

ESP8285 前言本人微信号&#xff1a;you-yu一、ESP8285和ESP8286&#xff1f;比ESP-01S可用GPIO多二、开发工具&#xff1f;下图是一个3D预览图下面是实物图&#xff1a;ESP8285 开发下载板下面是由ESP8285 开发出来的成品&#xff1a;然后再来两张成品图&#xff1a;总结 前言…

计算机网络(三)—— 数据链路层

本文幕布&#xff1a; 文档链接: https://www.mubucm.com/doc/7psaav2QHtm 密码: 9twi 文章目录 第三章 数据链路层3.0 数据链路层1. 数据链路层的信道类型 3.1 使用点对点信道的数据链路层3.1.1 数据链路和帧1. 链路&#xff08;link&#xff09;2. 数据链路&#xff08;data …

OpenHarmony网络应用开发

总目录&#xff1a; 文档链接: https://mubucm.com/doc/2sINVHMg9Pm 密码: mkxb 本文幕布&#xff1a; 文档链接: https://www.mubucm.com/doc/4hviFn1y1nm 密码: q2pe 课程链接&#xff1a; https://www.bilibili.com/video/BV1tv411b7SA?spm_id_from333.999.0.0 文章目录 …

XRHT系列电钢琴实训室配置方案及清单

建设背景 国家教育部为深入贯彻落实中央有关教育信息化的战略部署&#xff0c;完成《国家中长期教育改革和发展规划纲要&#xff08;2010-2020年&#xff09;》确定的教育信息化目标任务、全面深入推进“十三五”教育信息化工作&#xff0c;在《关于“十三五”期间全面深入推进…

【云驻共创】 JAVA常用的开发工具有哪些?

前言 俗话说&#xff0c;工欲善其事&#xff0c;必先利其器。工匠想要使他的工作做好&#xff0c;一定要先让工具锋利。比喻要做好一件事&#xff0c;准备工具非常重要。对于我们做程序员的来说也是一样的&#xff0c;想要提高开发效率&#xff0c;也需要选择好自己的开发工具…

taohui.org.cn建站历程

一直以来都在Qzone、CSDN等上面写博客&#xff0c;偶尔有些想法就在Paas平台上搭建服务&#xff0c;新浪和曾经的google上都用过其appengine。可是在别人的平台上写东西&#xff0c;总归有些不方便&#xff0c;有受制于人的感觉。《深入理解Nginx》这本书的在线支持站点&#x…

64位投影机专业测试软件,软件分享 篇十四:利用投影仪提高生活质量 —— 自用软件推荐...

软件分享 篇十四:利用投影仪提高生活质量 —— 自用软件推荐 2019-12-30 21:08:51 8点赞 121收藏 6评论 自从家里购入了投影仪以后,电视就变成摆设了 。。。本篇分享我自己经常用的几个投影软件产品评测 篇七:NAS影片播放神器 —— 新开发版体验测试V19.0KODI这款播放器相信…

强强联手,丝滑办公新体验!IdeaHub+华为云会议实测

目录 1. 前言 2. 软硬结合&#xff0c;天生一对 3. 全方位功能体验 3.1 IdeaHub接入华为云会议 3.2 随时随地一键开会 3.3 天生高清 3.3.1 高清视频 3.3.2 纯净音质 3.3.3 智能导播、智能音幕 3.4 天生融合 3.4.1 开会白板 3.4.2 无线投屏 3.4.3 一键流转 3.4.4 …