audio-reactive-led-strip/README.md

5.0 KiB

audio-reactive-led-strip

Real-time LED strip music visualization using the ESP8266 and Python

block diagram

overview

Demo (click gif for video)

visualizer demo

Overview

The repository includes everything needed to build an LED strip music visualizer (excluding hardware):

  • Python real-time visualization code, which includes code for:
  • Arduino firmware for the ESP8266 (ws2812_controller.ino)

What do I need to make one?

The following hardware is needed to build an LED strip music visualizer:

  • Computer with Python 2.7 or 3.5 (Anaconda is recommended on Windows)
  • Any ESP8266 module with RX1 pin exposed. These modules are known to be compatible (but many others work too):
    • NodeMCU v3
    • Adafruit HUZZAH
    • Adafruit Feather HUZZAH
  • Any ws2812b LED strip (such as Adafruit Neopixels)

Installation

Python Dependencies

Visualization code is compatible with Python 2.7 or 3.5. A few Python dependencies must also be installed:

  • Numpy
  • Scipy (for digital signal processing)
  • PyQtGraph (for GUI visualization)
  • PyAudio (for recording audio with microphone)

On Windows machines, the use of Anaconda is highly recommended. Anaconda simplifies the installation of Python dependencies, which is sometimes difficult on Windows.

Installing dependencies with Anaconda

Create a conda virtual environment (this step is optional but recommended)

conda create --name visualization-env python=3.5
activate visualization-env

Install dependencies using pip and the conda package manager

conda install numpy scipy pyqtgraph
pip install pyaudio

Installing dependencies without Anaconda

The pip package manager can also be used to install the python dependencies.

pip install numpy
pip install scipy
pip install pyqtgraph
pip install pyaudio

If pip is not found try using python -m pip install instead.

Arduino dependencies

ESP8266 firmare is uploaded using the Arduino IDE. See this tutorial to setup the Arduino IDE for ESP8266.

This ws2812b i2s library must be downloaded and installed in the Arduino libraries folder.

Hardware Connections

The ESP8266 has hardware support for I²S and this peripheral is used by the ws2812b i2s library to control the ws2812b LED strip. This signficantly improves performance compared to bit-banging the IO pin. Unfortunately, this means that the LED strip must be connected to the RX1 pin, which is not accessible in some ESP8266 modules (such as the ESP-01).

For the NodeMCU v3 and Adafruit Feather HUZZAH, the location of the RX1 pin is shown in the images below. Many other modules also expose the RX1 pin.

nodemcu-pinout feather-huzzah-pinout

Setup and Configuration

  1. Install Python and Python dependencies
  2. Install Arduino IDE and ESP8266 addon
  3. Download and extract all of the files in this repository onto your computer
  4. In ws2812_controller.ino:
  • Set const char* ssid to your router's SSID
  • Set const char* password to your router's password
  • Set IPAddress gateway to match your router's gateway
  • Set IPAddress ip to the IP address that you would like your ESP8266 to use (your choice)
  • Set #define NUM_LEDS to the number of LEDs in your LED strip
  1. In config.py:
  • Set N_PIXELS to the number of LEDs in your LED strip (must match NUM_LEDS in ws2812_controller.ino)
  • Set UDP_IP to the IP address of your ESP8266 (must match ip in ws2812_controller.ino)
  • If needed, set MIC_RATE to your microphone sampling rate in Hz

Running the Visualization

Once everything has been configured, run visualization.py to start the visualization. The visualization will automatically use your default recording device (microphone) as the audio input.

A PyQtGraph GUI will open to display the output of the visualization on the computer.

If you encounter any issues or have questions about this project, feel free to open a new issue.