Skip to content

Niewiaro/ESPy-Lumi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESPy-Lumi 🎶✨

Python C++ ESP32 Bluetooth License

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ń!!!


🛠 Architektura Systemu

System składa się z dwóch współpracujących ze sobą modułów:

  1. Aplikacja Host (Python na PC): Wykorzystuje bibliotekę PyAudio do ciągłego próbkowania strumienia audio. Pobrane próbki poddawane są Szybkiej Transformacie Fouriera (FFT) za pomocą biblioteki numpy. 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życiu matplotlib.

  2. 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.


📋 Wymagania Sprzętowe

  • 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.

🚀 Instalacja i Konfiguracja

1. Klonowanie repozytorium

git clone [https://github.com/Niewiaro/ESPy-Lumi.git](https://github.com/Niewiaro/ESPy-Lumi.git)
cd ESPy-Lumi

2. Konfiguracja i wgrywanie firmware'u (ESP32)

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.

  1. Otwórz folder projektu w VS Code z rozszerzeniem PlatformIO.
  2. Upewnij się, że biblioteka Adafruit NeoPixel jest zainstalowana (możesz odkomentować linię lib_deps = adafruit/Adafruit NeoPixel@^1.12.0 w pliku platformio.ini).
  3. Podłącz płytkę ESP32 i użyj opcji Build a następnie Upload.
  4. Włącz moduł Bluetooth w komputerze i sparuj urządzenie o nazwie ESP32_LED_Control.

3. Konfiguracja środowiska Python (PC)

Zaleca się użycie wirtualnego środowiska (virtualenv).

  1. 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).


🎵 Użytkowanie

  1. 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.
  2. Podłącz zasilanie do ESP32 i taśmy LED. Nastąpi sekwencja testowa RGBW sprawdzająca poprawność okablowania.
  3. Uruchom skrypt główny:
python main.py
  1. 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.

👨‍💻 Autor

Jakub Niewiarowski

📄 Licencja

Projekt dystrybuowany na licencji MIT.

About

AGH 🟩⬛🟥 Praca Inżynierska

Topics

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors