Sprzętowo-programowy system wizualizacji widma akustycznego w czasie rzeczywistym.
Projekt ESPy-Lumi to zaawansowany wizualizator dźwięku, który przechwytuje sygnał audio z komputera, poddaje go analizie częstotliwościowej (FFT) i bezprzewodowo steruje adresowalną taśmą LED za pomocą mikrokontrolera ESP32, symulując zjawisko rozszczepienia światła widzialnego.
Important
🎓 Nota Akademicka & Big Shoutout! Ten projekt został zrealizowany w ramach mojej pracy inżynierskiej na Akademii Górniczo-Hutniczej im. Stanisława Staszica w Krakowie (AGH). Ogromne podziękowania dla mojego Promotora za poprowadzenie przez cały proces, wsparcie merytoryczne i niesamowitą inżynierską podróż! 🙌 Również podziękowanie dla firmy amc TECH za udostępnienie profesjonalnego sprzętu i inżynierów do przeprowadzenia badań!!!
System składa się z dwóch współpracujących ze sobą modułów:
-
Aplikacja Host (Python na PC): Wykorzystuje bibliotekę
PyAudiodo ciągłego próbkowania strumienia audio. Pobrane próbki poddawane są Szybkiej Transformacie Fouriera (FFT) za pomocą bibliotekinumpy. Otrzymane widmo jest logarytmicznie dzielone na 144 pasma (odpowiadające liczbie diod LED), normalizowane i przesyłane w formie łańcucha znaków (CSV) poprzez wirtualny port szeregowy Bluetooth (pyserial). Dodatkowo, system renderuje wykresy diagnostyczne w czasie rzeczywistym przy użyciumatplotlib. -
Oprogramowanie Układowe (ESP32 - NodeMCU-32S): Napisane w środowisku PlatformIO (framework Arduino). Moduł odbiera paczki danych przez Bluetooth Classic. Kluczowym elementem implementacji jest autorski algorytm mapujący natężenie poszczególnych pasm dźwięku na długości fal świetlnych (380-750 nm), które następnie są konwertowane na wartości przestrzeni barw RGBW dla taśmy LED SK6812 przy użyciu biblioteki
Adafruit_NeoPixel.
- Mikrokontroler: Moduł z rodziny ESP32 (konfiguracja domyślna pod
nodemcu-32s). - Element wykonawczy: Taśma LED z adresowalnymi diodami SK6812 RGBW (144 diody).
- Zasilanie: Zasilacz impulsowy 5V o odpowiedniej wydajności prądowej (dla 144 diod zalecane min. 8A, w zależności od maksymalnej jasności).
- Host: Komputer klasy PC z modułem Bluetooth oraz środowiskiem Python.
git clone [https://github.com/Niewiaro/ESPy-Lumi.git](https://github.com/Niewiaro/ESPy-Lumi.git)
cd ESPy-Lumi
Projekt firmware'u został przygotowany w środowisku PlatformIO.
Zauważ, że plik konfiguracyjny platformio.ini zawiera niestandardową flagę kompilatora -DBT_SPP_RX_BUFFER_SIZE=2048. Zwiększenie bufora sprzętowego Bluetooth było niezbędne do uniknięcia gubienia pakietów przy szybkiej transmisji długich ramek CSV.
- Otwórz folder projektu w VS Code z rozszerzeniem PlatformIO.
- Upewnij się, że biblioteka Adafruit NeoPixel jest zainstalowana (możesz odkomentować linię
lib_deps = adafruit/Adafruit NeoPixel@^1.12.0w plikuplatformio.ini). - Podłącz płytkę ESP32 i użyj opcji Build a następnie Upload.
- Włącz moduł Bluetooth w komputerze i sparuj urządzenie o nazwie
ESP32_LED_Control.
Zaleca się użycie wirtualnego środowiska (virtualenv).
- Zainstaluj wymagane pakiety z pliku
requirements.txt:
pip install -r requirements.txt
W systemach Linux (np. Ubuntu) instalacja PyAudio wymaga uprzedniego zainstalowania pakietów deweloperskich: sudo apt-get install portaudio19-dev.
2. Ustal port COM (Windows) lub ścieżkę do urządzenia /dev/rfcomm* (Linux), na którym zamapowano połączenie Bluetooth z ESP32.
3. W pliku konfiguracyjnym w Pythonie zaktualizuj zmienną serial_port na właściwą dla Twojego systemu (domyślnie COM6).
- Ustawienia Audio (Ważne): Aby wizualizować muzykę odtwarzaną bezpośrednio na komputerze (np. ze Spotify lub YouTube), w ustawieniach dźwięku systemu Windows należy włączyć "Miks stereo" (Stereo Mix) i ustawić go jako Domyślne urządzenie nagrywające.
- Podłącz zasilanie do ESP32 i taśmy LED. Nastąpi sekwencja testowa RGBW sprawdzająca poprawność okablowania.
- Uruchom skrypt główny:
python main.py
- Na ekranie pojawi się okno diagnostyczne z wykresami oscyloskopu, widmem amplitudowym (FFT) oraz symulacją słupków equalizera. Jednocześnie taśma LED zacznie płynnie reagować na dźwięk.
Jakub Niewiarowski
Projekt dystrybuowany na licencji MIT.