前几天在知乎上看到一个音乐节奏灯得帖子,觉得很有意思。就上淘宝买了材料,跟着淘主得视频做了个LED音乐节奏灯。(我可能是吃饱撑着没事做)。在此记录一下制作过程。

本程序代码由Scott Lawson编写,并发布在Github,这个代码最后一次更新在2年前。由于兼容性问题,由知乎用户:(英语老师摸我腿)修改,其还有制作教程。感谢各位大佬支持。

工具

1.Arduino

2.Anaconda(Python)

3.PVC管

4.ESP8266开发板

5.LED灯带(60颗/1米)

6.5V的灯座

7.灯罩

8.杜邦线

9.MicroUSB数据线

实现步骤:

1.

下载并安装Arduino和Anaconda

2.

在Anaconda中创建Python环境,并命名为MusicLed

3.

在Anaconda的MusicLed环境下Open Terminal安装一些库

conda install numpy scipy pyqtgraph
pip insatll pyaudio

4.

注:最好先连上VPN,不然安装很容易失败。

安装完Arduino,打开安装一些库。

首先点击(文件)-(首选项)-(附加开发板管理器网址)-(http://arduino.esp8266.com/stable/package_esp8266com_index.json)

然后点击(工具)-(开发板)-(开发板管理器)-(等它加载完成在搜索框输入:ESP8266。只有一个结果直接点击安装)。

接着点击(项目)-(加载库)-(管理库)-(搜索框输入websock,安装的版本为2.1.1)。

5.

注:电脑小白最好安装Notepad++

修改代码:注意以下注释就好了。只要修改ws2812_controller.ion和config.py两处的部分注释代码。

源代码在:https://github.com/ZhangCats/MusicLed

6.

修改完两个代码后,就要把arduino代码上传到ESP8266上。

首先把板子插在电脑的USB端口上。

然后查看设备管理器中板子在哪个口,例如:CH340(COM3)。

接着点击ws2812_controller.ino进入Arduino,点击(工具)-(开发板)-(SparkFun ESP8266 Thing Eev)-修改端口为(COM3)-(上传代码即可)。

最后点击Strat.bat,看到以下界面说明代码基本无误:

7.

接下来就是组装节奏灯就好啦。

注:这里注意灯带上的箭头,不要接反了。

如果看不懂上图可以看这个(灵魂画手):

这里将用将两根杜邦线分别接上5v的红线与GND,然后用PVC电气胶布缠绕上即可。

记得用一根杜邦线将ESP8266的RX口和灯带的DI口连接起来,否则灯带不会亮。

然后将灯带缠绕到PVC管上。

最后通电就可以啦。注:灯座的插头电压可能不够导致灯带亮的时候,ESP板子不通电(分压)。这时候把充电头换成手机的快充头即可给两个部件同时通电。

节奏灯,程序打开了,灯不亮。PING一下你给ESP8266设置的IP地址,如果通,那说明ESP8266运行正常,请检查线是否接好,并保证两个文件设置正确。关闭PC程序,重新打开试试

8.

大家电脑可能没有混音功能。所以先下载Viocemeeter,点击A1选择如下图所示:

然后在(声音)-(播放)将其设置为默认设备即可,(录制)也是如此。

9.

最后(给灯座通上点)-(点击Start.bat)-(打开Voicemeeter)-(打开音乐播放器播放音乐即可,当然你直接对着电脑讲话也有同样效果只要是有声音输入都行)。

完!

Arduino代码

ws2812_controller.ino

/** 注意,一定要看到文件隔壁还有很多后缀名为".h"的文件,如果没有的话,那说明当前文件夹下没有这个文件。编译会出错。* 参考资料:https://github.com/scottlawsonbc/audio-reactive-led-strip* 源码2年未更新,稍作修改。* 你只需要修改代码后面后中文注释的地方!*/#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WebSocketsServer.h>
#include <Hash.h>
#include <WiFiUdp.h>
#include "ws2812_i2s.h"#define NUM_LEDS 120 //LED灯数量#define BUFFER_LEN 1024#define PRINT_FPS 1const char* ssid     = "zzzzzzzccccccc"; //你家WIFI名字
const char* password = "zcp5313.."; //你家WIFI密码
unsigned int localPort = 7777;
char packetBuffer[BUFFER_LEN];static WS2812 ledstrip;
static Pixel_t pixels[NUM_LEDS];
WiFiUDP port;//你可以使用Windows+R键输入cmd,然后输入命令ipconfig 查看自己网络情况。IPAddress ip(192, 168, 1, 150); //你给ESP8266设置的IP地址,注意,这个IP不可以跟其他设备(手机电脑灯)重复。IPAddress gateway(192, 168, 1, 1); //你家网络的网关,这个跟你电脑的网关一样IPAddress subnet(255, 255, 255, 0); //子网掩码,跟你电脑的一样,一般不需要修改。void setup() {Serial.begin(115200);WiFi.config(ip, gateway, subnet);WiFi.begin(ssid, password);Serial.println("");// Connect to wifi and print the IP address over serialwhile (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.print("Connected to ");Serial.println(ssid);Serial.print("IP address: ");Serial.println(WiFi.localIP());port.begin(localPort);ledstrip.init(NUM_LEDS);
}uint8_t N = 0;
#if PRINT_FPSuint16_t fpsCounter = 0;uint32_t secondTimer = 0;
#endifvoid loop() {// Read data over socketint packetSize = port.parsePacket();// If packets have been received, interpret the commandif (packetSize) {int len = port.read(packetBuffer, BUFFER_LEN);for(int i = 0; i < len; i+=4) {packetBuffer[len] = 0;N = packetBuffer[i];pixels[N].R = (uint8_t)packetBuffer[i+1];pixels[N].G = (uint8_t)packetBuffer[i+2];pixels[N].B = (uint8_t)packetBuffer[i+3];} ledstrip.show(pixels);#if PRINT_FPSfpsCounter++;#endif}#if PRINT_FPSif (millis() - secondTimer >= 1000U) {secondTimer = millis();Serial.printf("FPS: %d\n", fpsCounter);fpsCounter = 0;}   #endif
}

Python代码

config.py

# 你只需要修改有注释的地方
# 其他未备注的地方,看得懂代码的人,请自行修改,需要需要了解numpy,pyaudio#conding = utf8
from __future__ import print_function
from __future__ import division
import osDEVICE = 'esp8266'if DEVICE == 'esp8266':
# 下面是你刚才在Arduino中为ESP8266设置的IP地址,不要填错了。UDP_IP = '192.168.1.150'UDP_PORT = 7777SOFTWARE_GAMMA_CORRECTION = Falseif DEVICE == 'pi':LED_PIN = 18LED_FREQ_HZ = 800000LED_DMA = 5BRIGHTNESS = 255LED_INVERT = TrueSOFTWARE_GAMMA_CORRECTION = Trueif DEVICE == 'blinkstick':SOFTWARE_GAMMA_CORRECTION = TrueUSE_GUI = TrueDISPLAY_FPS = True# 下面是你LED灯的数量,这个也不能搞错,错了,程序就运行出错!
N_PIXELS = 120GAMMA_TABLE_PATH = os.path.join(os.path.dirname(__file__), 'gamma_table.npy')MIC_RATE = 44100FPS = 60_max_led_FPS = int(((N_PIXELS * 30e-6) + 50e-6)**-1.0)
assert FPS <= _max_led_FPS, 'FPS must be <= {}'.format(_max_led_FPS)MIN_FREQUENCY = 200MAX_FREQUENCY = 12000N_FFT_BINS = 24N_ROLLING_HISTORY = 2MIN_VOLUME_THRESHOLD = 1e-7

不务正业之音乐节奏灯相关推荐

  1. 基于MSGEQ7的音乐节奏灯超详细适合入门

    Arduino基于MSGEQ7的音乐节奏灯 STEP1 了解获取项目的方法 项目集 https://create.arduino.cc/projecthub/HeinzKetschup/spectru ...

  2. 单片机音频节奏灯_音乐节奏灯(十个LED显示)

    音乐节奏灯(十个LED显示) [复制链接] 本帖最后由 ginny 于 2017-3-9 18:43 编辑 网上大部分咪头节奏灯都只是控制LED灯的亮度,而且LED个数只有四个.这我打算做个更好玩的. ...

  3. 基于Arduino的音乐动感节奏灯

    1.音乐动感节奏灯是个什么东西? 前段时间听音乐觉得无聊,便想着音乐光听也没意思啊,能不能 "看见" 音乐呢?于是谷歌了一番,发现还真有人做了将音乐可视化的东西,那就是音乐节奏灯. ...

  4. 单片机音频节奏灯_使LED灯随音乐闪烁的控制方法及音乐节奏闪灯技术

    [技术实现步骤摘要] 使LED灯随音乐闪烁的控制方法及音乐节奏闪灯 本专利技术涉及灯光控制方法及设备领域,尤其涉及一种使LED灯随音乐闪烁的控制方法及音乐节奏闪灯. 技术介绍 随着科技的进步,科技的发 ...

  5. 单片机音频节奏灯_单片机在音乐节奏识别灯效系统中的智能控制

    0引言目前国内外市场上有一种音乐彩灯设备,它由音控多谐振荡器.时序脉冲产生器和可控硅控制电路组成.其中由555电路和电容电阻等组成无稳态多谐振荡器,使音乐信号经过耦合变压器检波,加至555的控制端,并 ...

  6. Arduino 蜂鸣器播放音乐LED灯闪烁

    一.实验所需组件: led灯 三脚蜂鸣器 面包板 Arduino开发板 杜邦线 二.实验原理 蜂鸣器实现音乐播放: 控制好频率和节拍,就能演奏出好听的音乐.因此,在实验之前要先弄清楚各音调的频率.可参 ...

  7. unity 音乐节奏游戏_使用您当地音乐收藏的最佳节奏游戏

    unity 音乐节奏游戏 You can't have video games without music. Well, you can-the earliest games didn't have ...

  8. 2021-09-10 简单的音乐节奏游戏实现

    提前把需要使用的音乐音符节奏点规划到一张表或者是json文件里面,包含节奏点出现的时间类似: times= [ {"time":5.45}, {"time":6 ...

  9. Koreographer音乐节奏插件使用教程

    先贴一个小demo: 相信很多接触过音游开发或项目中有相关音乐节奏类型的需求的开发者们都就了解过这款插件,这里给一下这款插件的初阶教程指导,方便大家快速了解利用这款插件. 1. 插件安装 将unity ...

最新文章

  1. pr预设的卷及内核锐化是什么_看完这一篇,彻底搞懂锐化怎么用!
  2. 《中国人工智能学会通讯》——12.58 大数据不确定性学习的研究
  3. Linux下脚本实战之系统监控
  4. 《用户故事与敏捷方法》阅读笔记一
  5. [architecture]-Generic Timer
  6. 基于operator sdk编写一个k8s自定义资源管理应用
  7. 计算机网络protocol,北邮高级计算机网络课件1-protocol.pdf
  8. linux内核源码树
  9. keepalived高可用lvs集群,主/备和主/主模型
  10. mysql1241 错误,[Err] 1241 - Operand should contain 1 column(s)错误解析
  11. Python装饰器详解,详细介绍它的应用场景
  12. 微软邮件服务器名称,邮箱服务器角色概述
  13. 【一天一个C++小知识】011.C++编译的流程
  14. [读书笔记]编程之美(一)
  15. pandas实现上采样和下采样
  16. WSO2 ESB 5.0.0 配置 MySQL 数据源
  17. C#如何获取指定周的日期范围
  18. onkeyup事件只能输入数字,字母,下划线等
  19. 前端页面分辨率适配问题
  20. Not authorized , ReasonPhrase:Unauthorized

热门文章

  1. 欢迎观看Toni_hou的#生活1
  2. 数据安全-数据交换安全
  3. 弹性盒之主轴与交叉轴的区分
  4. 《惢客创业日记》2021.04.24-30(周六)惢客拾金演示词
  5. tabLayout+viewPager+fragment,当tab数目较少,能一屏展示时
  6. 【前端知识之JS】BOM的理解
  7. 小甲鱼课后作业_教学常规聚养料,润物无声花更艳 ——记长小教师一日教学常规点滴工作...
  8. win10下安装Ubuntu18.10双系统
  9. linux 添加隐藏用户登录,科学网—CentOS 7 在登录界面用户列表中隐藏指定账号 - 乔磊的博文...
  10. 关联规则—Apriori、FP-growth/FP-Tree