不务正业之音乐节奏灯 您所在的位置:网站首页 音乐氛围灯不随着音乐变化 不务正业之音乐节奏灯

不务正业之音乐节奏灯

2024-06-17 17:06| 来源: 网络整理| 查看: 265

前几天在知乎上看到一个音乐节奏灯得帖子,觉得很有意思。就上淘宝买了材料,跟着淘主得视频做了个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 #include #include #include #include #include "ws2812_i2s.h" #define NUM_LEDS 120 //LED灯数量 #define BUFFER_LEN 1024 #define PRINT_FPS 1 const 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 serial while (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_FPS uint16_t fpsCounter = 0; uint32_t secondTimer = 0; #endif void loop() { // Read data over socket int packetSize = port.parsePacket(); // If packets have been received, interpret the command if (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_FPS fpsCounter++; #endif } #if PRINT_FPS if (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 os DEVICE = 'esp8266' if DEVICE == 'esp8266': # 下面是你刚才在Arduino中为ESP8266设置的IP地址,不要填错了。 UDP_IP = '192.168.1.150' UDP_PORT = 7777 SOFTWARE_GAMMA_CORRECTION = False if DEVICE == 'pi': LED_PIN = 18 LED_FREQ_HZ = 800000 LED_DMA = 5 BRIGHTNESS = 255 LED_INVERT = True SOFTWARE_GAMMA_CORRECTION = True if DEVICE == 'blinkstick': SOFTWARE_GAMMA_CORRECTION = True USE_GUI = True DISPLAY_FPS = True # 下面是你LED灯的数量,这个也不能搞错,错了,程序就运行出错! N_PIXELS = 120 GAMMA_TABLE_PATH = os.path.join(os.path.dirname(__file__), 'gamma_table.npy') MIC_RATE = 44100 FPS = 60 _max_led_FPS = int(((N_PIXELS * 30e-6) + 50e-6)**-1.0) assert FPS


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有