EffectMidi
October 8, 2025 · View on GitHub
简体中文 | English

Built with electron-vite, developed using TypeScript + React, and runs on the Arduino platform
Description
This project is inspired by Effect_Piano_light_controller. It controls external lighting effects for MIDI keyboards through a desktop application by reading MIDI keyboard inputs and controlling LED strip effects.
Features

All configurations are saved to the .effect-midi directory in the user's home directory, for example, a common path would be C:/Users/Administrator/.effect-midi, or replace Administrator with your username.
The effect-midi.db database file is saved within this directory, and both portable and installed versions read configurations from it. It's a plain text SQLite database file that you can open with any database management tool to view the configurations.

This program provides the following features:
- ✨Interface Appearance Settings: (Control side) Background image, color theme, background animation, click animation, note waterfall, language switching (currently supports Chinese and English)
- ⚙️Device Connection: Support for selecting active MIDI devices and serial port devices (serial port selection requires manual activation)
- 🌈Effect Settings: Support for setting LED strip background color, foreground color, endpoint light color, diffusion width, delay time
All components in the control interface except the bottom keyboard component can be collapsed (collapse button in the top-left corner). When collapsed, it provides a better view of the keyboard note waterfall.
More feature introductions and project overview
Video effects created using this project
You can also use green screen images for post-editing
Usage
Hardware List
- Development Board:
- RP Pico/RP2040 series: Cost-effective, tested and passed, can use the complete functionality of the current project
- Arduino Uno R3: Does not support USB HID, requires using the
deprecated_serialbranch code for serial communication-based legacy compatibility. Actual testing shows poor user experience due to probabilistic serial data loss, causing frequent delays and losses - Arduino Mega 2560: To be tested
- ESP32: To be tested, USB HID support has been confirmed, expected to use the complete functionality of the current project
- STM32: To be tested
- WS2812B LED Strip: The program is compatible with 144 LEDs/m specification (one key corresponds to two LEDs), requiring a total of 178 LED beads (2 endpoint LEDs + 88×2). Usually, you need to purchase a two-meter LED strip and cut off the excess LEDs
- MIDI Keyboard: 88-key MIDI keyboard, can be an electronic piano, MIDI keyboard, etc. (Currently, keyboards with fewer than 88 keys require code modification to adjust key mapping)
- Wires: The simplest solution requires 2 male-to-male dupont wires and 1 male-to-female dupont wire
- 330Ω Resistor: Recommended range (220Ω-470Ω) helps protect components and increase signal stability; can work without it if unavailable, but not recommended
Wiring Scheme
RP2040 series, additionally provides Fritzing project file (doc/effect-midi.rp2040.fzz):

Since the development board is directly connected to the PC in this project's solution, external power supply is usually not needed.
If PC power supply is insufficient, you can use a 5V DC power supply.

Program Flashing
- Download the project code. Releases provides Arduino project code that can be used after extraction
- Use Arduino IDE to open the extracted
EffectMidi/EffectMidi.ino. Note that the project code is not a single file; if copied to other directories, the directory structure must be maintained (complete files under theEffectMididirectory) - Install the corresponding development board manager (RP2040): Open Arduino IDE ->
File->Preferences->Additional Boards Manager URLs, add the following URL:https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
- Click OK and wait for the download to complete
- Select the board:
Tools->Board-> SelectRaspberry Pi Pico-> corresponding model development board
- Install dependency libraries:
Tools->Manage Libraries-> Search forFastLEDandAdafruit TinyUSB Library-> Install. If OLED display is needed (requires code modification, test use only, no actual functionality), search forAdafruit SSD1306andAdafruit GFX Libraryto install
- Select USB scheme:
Tools->USB Stack-> SelectAdafruit TinyUSB
- Compile and upload: Click the
Uploadbutton in the top-left corner. Note that if using RP2040, you need to hold theBOOTSELbutton before powering on the development board during flashing to start the board in write mode
- After flashing is complete, the development board program restarts. The endpoint LEDs slowly blink, indicating the program has started normally and is waiting for control side connection
Control Program
Visit the Releases page of this project to download the appropriate version. After extraction, run EffectMidi.exe and follow the prompts.
Working Principle
EffectMidi Main Program
- Windows control side reads MIDI signals from MIDI input devices
- Windows control side sends specified signals to the embedded side via USB serial port
- Embedded side receives control signals and controls LED effects
Development Environment
Hardware Devices
Refer to Hardware List
PC Control Side
The project is built with electron-vite, recommended to use Visual Studio Code editor (and suggest installing Tailwind CSS IntelliSense, Prettier - Code formatter, EditorConfig for VS Code, stylus).
In the development environment, after startup, you can open developer tools with F12.
pnpm installinstall dependencies. If strange errors occur during this process, try pnpm 8.x.x versionpnpm devstart development environmentpnpm build:winpackage Windows versionpnpm build:macpackage macOS versionpnpm build:linuxpackage Linux version
Development Board Side
Recommend using Arduino IDE, or your preferred IDE with development board flashing capabilities.
Depends on the following libraries:
- FastLED - Required, used to control LED strips
- Adafruit_TinyUSB - Required, used for USB communication. If this functionality is not needed, you may need to manually delete related code. After installation, you need to manually select
Adafruit TinyUSBinArduino IDE->Tools->USB Stack
In the development environment, you can activate debug information display by enabling #define USE_OLED, or completely delete related code from the source to free up some performance. Connection method:
SDA->SDA(GP4)SCL->SCL(GP5)GND->GNDVCC->5V
Note: If using a development board with small memory (such as Arduino Uno R3), OLED may not work.
Dependent libraries:
Open Source Statement
This project uses the GNU GPL v3 license, continuing the original project's open source license while reserving the right to change.
Code inherited from Effect_Piano_light_controller exists only in the effect_piano_refactor branch. The main branch code is a completely new implementation.
This project uses the following USB identifiers:
If other devices use the same identifiers, those devices will also appear in this program's device list.
- VID:
0x1209(Open source identifier assigned by PID.org) - PID:
0x0666(Project custom identifier)