Spisu treści:
- Krok 1: Sprzęt
- Krok 2: Konfiguracja Raspberry Pi
- Krok 3: Konfiguracja przykładowego kodu
- Krok 4: Utwórz samopodpisany certyfikat SSL
- Krok 5: Podłączanie sprzętu
- Krok 6: Kod po stronie serwera
- Krok 7: Kod strony internetowej
- Krok 8: Wreszcie
Wideo: Disco-pi: 8 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
Ta instrukcja pokazuje, jak używać Raspberry Pi do sterowania kolorową taśmą LED w oparciu o muzykę odtwarzaną z przeglądarki internetowej.
Pokazuje, jak stworzyć podstawową stronę internetową przy użyciu Node.js przez HTTPS i użyć socket.io przez WSS (Secure Websocket).
Witryna składa się z jednej strony, która ma bardzo prosty układ. Strona internetowa wypełnia listę rozwijaną plikami muzycznymi, które znajdują się w folderze public/audio na serwerze. Wybranie opcji na liście odtwarza plik muzyczny na stronie internetowej za pomocą elementu audio HTML 5. Podczas odtwarzania pliku muzycznego strona internetowa wykorzystuje interfejs AudioContext do analizy muzyki, która jest następnie przesyłana na serwer przez bezpieczne połączenie z gniazdem sieciowym.
Serwer działający na Raspberry Pi używa natywnej biblioteki Node RPI WS281x (opakującej bibliotekę WS281X Jeremy'ego Garffa) do zmiany kolorów diod LED na pasku LED WS2811 na podstawie danych przesyłanych przez gniazdo sieciowe.
Przykładowy kod można znaleźć tutaj: disco-pi
Krok 1: Sprzęt
- Raspberry Pi - użyłem Raspberry Pi 2B, który układałem, ale możesz dostać zestaw startowy Raspberry Pi 3 za około 100 CAD
- Taśma LED WS2811 - bawiłem się ALITOVE 16.4ft 150 Pixels WS2811. To jest dostarczane z kontrolerem i zasilaczem za około 45-50 CAD CAD
- Złącze Barrel Jack - kupiłem jedno w moim lokalnym sklepie z elektroniką, coś takiego. Tylko upewnij się, czy pasuje do twojego zasilacza
- Złącza zworek / drut - miałem kilka kabli połączeniowych żeńskich i męskich i trochę drutu o rozmiarze 22 Gauge Solid leżącego wokół?
Krok 2: Konfiguracja Raspberry Pi
System operacyjny
Zwykle używam najnowszej wersji Raspbian. Pobierz obraz i zapisz go na karcie SD. Jeśli używasz komputera z systemem Windows, możesz użyć programu Win32 Disk Imager, aby zapisać obraz na karcie SD.
Node.js
Zainstaluj najnowszą wersję Node.js. W momencie pisania używam 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Zainstaluj git
sudo apt-get zainstaluj git
Krok 3: Konfiguracja przykładowego kodu
Sklonuj przykładowy kod
1. Skonfiguruj folder podstawowy, w którym chcesz zainstalować
cd /opcja
sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock
2. Sklonuj przykładowe repozytorium git
klon git
lub
git klon [email protected]:haydockjp/disco-pi.git
3. Zainstaluj zależności
cd disco-pi
instalacja npm
Może to potrwać 2-3 minuty
Krok 4: Utwórz samopodpisany certyfikat SSL
1. Utwórz plik klucza prywatnego
cd /opt/com.jonhaydock/disco-pi/certs
openssl genrsa -out disco-pi-key.pem 2048
2. Utwórz CSR (Żądanie Podpisania Certyfikatu)
openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem
W tym momencie zostaniesz poproszony o podanie pewnych informacji dla żądania certyfikatu. Ponieważ jest to certyfikat z podpisem własnym, to od Ciebie zależy, jak dokładnie wypełnisz dane. Oto przykład
Nazwa kraju (kod 2-literowy) [AU]:CA
Nazwa stanu lub prowincji (pełna nazwa) [Some-State]:Kolumbia Brytyjska Nazwa miejscowości (np. miasto) :Vancouver Nazwa organizacji (np. firma) [Internet Widgits Pty Ltd]:Nazwa jednostki organizacyjnej Disco Pi (np. sekcja) : Nazwa pospolita (np. FQDN serwera lub TWOJA nazwa) :disco-pi Adres e-mail :[email protected] Hasło wyzwanie : Opcjonalna nazwa firmy :
W tym przykładzie wystarczy nacisnąć klawisz powrotu, aby pozostawić puste hasło wyzwania
3. Wygeneruj certyfikat
openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem
4. Dla dodatkowego bezpieczeństwa utworzymy również plik Diffie Hellman Parameters
openssl dhparam -out dh_2048.pem 2048
Może to zająć 15-20 minut
Krok 5: Podłączanie sprzętu
Zasilanie taśmy LED
Pasek LED zasilany jest napięciem 12 woltów. Raspberry Pi jest w stanie wyprowadzić tylko 3,3 V lub 5 V i nie jest w stanie wyprowadzić w pobliżu amperów potrzebnych do napędzania tak wielu diod LED.
Ważne jest, aby nie podłączać zasilacza 12 V do Raspberry Pi.
Mój pasek miał również dodatkowe przewody zasilające podłączone do paska na obu końcach. Proponuję zakleić je taśmą, aby nie miały kontaktu z żadnym innym sprzętem.
Kolejne kroki wykonuj na własne ryzyko. Nie biorę odpowiedzialności za wszystko, co może pójść nie tak.
Pasek ledowy
Moja taśma LED ma trzy przewody:
CZERWONY - +12 V
CZARNY - ziemia
ZIELONY - Dane
UWAGA: jest Din i Dout - Data In i Data Out. Upewnij się, że pracujesz z końcem paska LED z napisem Din.
Upewnienie się, że Barrel Jack nie jest podłączony do zasilania
1. Podłącz czerwony przewód z paska LED do strony + gniazda Barrel Jack.
Użyłem białego drutu o średnicy 22 mm.
Umieść przewód w gnieździe + w lufie i przykręć go na miejscu.
Wciśnij drugi koniec przewodu do gniazda na diodzie LED. Upewnij się, że łączysz się czerwonym przewodem.
2. Podłącz czarny przewód z paska LED do - strony gniazda Barrel Jack.
Użyłem czarnego drutu o średnicy 22 mm.
Umieść przewód w gnieździe - w lufie. W tym momencie również umieść męski koniec jednego z kabli połączeniowych (brązowy przewód na zdjęciu) w tym samym otworze i przykręć oba na miejscu.
Wciśnij drugi koniec czarnego przewodu do gniazda na diodzie LED.
Upewnij się, że łączysz się za pomocą czarnego przewodu.
3. Podłącz zielony przewód z paska LED
Weź jeden z żeńskich kabli połączeniowych. Na moich zdjęciach to jest zielony przewód.
Umieść męską końcówkę w gnieździe LED z zielonym przewodem.
To jest kabel do transmisji danych.
Malina Pi
1. Weź zielony kabel połączeniowy i podłącz go do GPIO Raspberry Pi.
Musisz podłączyć go do PCM_CLK (Pin 12 / GPIO 18)
2. Weź czarny kabel połączeniowy i podłącz go do Raspberry Pi GPIO.
Musisz podłączyć go do jednej z podstaw. Proponuję użyć pinu 14, ale możesz również użyć pinu 6, 9, 20, 25, 30, 34 lub 39.
UWAGA: aby to zadziałało źródło zasilania LED i Raspberry Pi muszą mieć wspólną masę. Należy również pamiętać, że nie wolno podłączać przewodu 12 V + (czerwony) do Raspberry Pi.
Moc LED
Nie powinieneś być w stanie podłączyć zasilacza 12 V do gniazda lufy
Wszystkie diody LED na pasku LED powinny teraz świecić na BIAŁE
Krok 6: Kod po stronie serwera
Uruchamianie kodu po stronie serwera
cd /opt/com.jonhaydock/disco-pi
początek sudo npm
Spowoduje to uruchomienie serwera WWW i rozpoczęcie nasłuchiwania żądań HTTPS i WSS.
Domyślny port to 443, ale możesz to zmienić, ustawiając zmienną środowiskową przed uruchomieniem kodu. Na przykład
eksportuj DISCO_PI_PORT=1443
Moja taśma LED ma 150 diod LED. Są one kontrolowane w grupach po trzy. Oznacza to, że nie mogę sterować każdą diodą LED z osobna i muszę przesłać wystarczającą ilość informacji, aby kontrolować 50.
Jeśli twoja dioda LED ma mniej lub więcej, możesz nadpisać liczbę diod, które kontrolujesz, przekazując parametr do uruchomienia. Na przykład, jeśli możesz sterować tylko 10 diodami LED
sudo npm start 10
Główny kod serwera można znaleźć w pliku app.js. Ten plik uruchamia serwer WWW HTTPS, a także dodaje plik socket.io, aby nasłuchiwać żądań websocket na tym samym porcie.
Aby wejść na stronę, należy otworzyć przeglądarkę internetową na głównym komputerze (testowałem to tylko w Chrome) i użyć adresu IP Raspberry Pi, np.
10.0.1.2/
Możesz znaleźć swój adres IP z wiersza poleceń Raspberry Pi.
ifconfig
Serwer WWW będzie udostępniać dowolną zawartość w folderze publicznym. Domyślnie wyświetla stronę index.html.
Ma jeden punkt końcowy API - /api/audio. Ten punkt końcowy wyszukuje dowolne pliki w folderze public/audio i zwraca listę. Na przykład
["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "This Is What You Came For (feat. Rihanna).mp3"]
Aby dodać muzykę jako opcję, skopiuj pliki do tego folderu. Osobiście używam Filezilli przez ssh. Folder, do którego chcesz dodać pliki to /opt/com.jonhaydock/disco-pi/public/audio
Krok 7: Kod strony internetowej
Kiedy wejdziesz na stronę, powinieneś zobaczyć coś takiego.
Jeśli zobaczysz ostrzeżenie dotyczące bezpieczeństwa, dzieje się tak, ponieważ używamy certyfikatu SSL z podpisem własnym. Możesz go zignorować lub dodać jako wyjątek.
Po wybraniu nazwy pliku źródło elementu audio HTML 5. zostanie ustawiony na ten plik. Gdy będzie gotowy, zacznie grać muzyka. Po zakończeniu utworu muzyka się zatrzyma.
Jeśli wybierzesz opcję Brak, muzyka przestanie być odtwarzana.
Podczas odtwarzania pliku muzycznego strona internetowa wykorzystuje interfejs AudioContext do analizy muzyki, która jest następnie przesyłana na serwer przez bezpieczne połączenie z gniazdem sieciowym.
Komunikat jest typem, w którym socket.io na serwerze został skonfigurowany do nasłuchiwania „ws2811”. Zawiera tablicę 50 elementów, które mieszczą się w przedziale od 0 do 255.
"ws2811", {"0":251, "1":252, "2":241, "3":217, "4":193, "5":164, "6":148, "7":139, "8":110, "9":96, "10":81, "11":67, "12":72, "13":66, "14":60, "15":60, "16":63, "17":54, "18":37, "19":30, "20":31, "21":26, "22":13, "23":3, " 24":10, "25":7, "26":6, "27":0, "28":0, "29":0, "30":1, "31":8, "32":12, "33":3, "34":2, "35":2, "36":0, "37":0, "38":0, "39":0, "40":0, "41":0, "42":0, "43":0, "44":0, "45":0, "46":0, "47":0, "48":0, " 49:0}
Serwer wykorzystuje natywną bibliotekę Node RPI WS281x (opakującą bibliotekę WS281X Jeremy'ego Garffa) do zmiany kolorów diod LED na pasku LED WS2811 na podstawie danych przesyłanych przez gniazdo sieciowe.
Krok 8: Wreszcie
Powinieneś zobaczyć, jak diody LED na pasku zmieniają kolor wraz z muzyką, na podstawie analizy szybkiej transformacji Fouriera wykonanej na stronie internetowej.
Mam nadzieję, że ci się to spodoba. Daj mi znać, co z nim zrobisz!
UWAGA: Jeśli masz jakiekolwiek problemy
Ponieważ ta biblioteka i wbudowane audio Raspberry Pi używają PWM, nie można ich używać razem.
Może być konieczne umieszczenie na czarnej liście modułu jądra audio Broadcom, tworząc plik /etc/modprobe.d/snd-blacklist.conf z
czarna lista snd_bcm2835
Jeśli urządzenie audio nadal ładuje się po umieszczeniu na czarnej liście, może być konieczne zakomentowanie go w pliku /etc/modules. W systemach bezgłowych może być również konieczne wymuszenie wymuszenia dźwięku przez HDMI
Edytuj plik config.txt i dodaj:
hdmi_force_hotplug=1
hdmi_force_edid_audio=1
Aby ta zmiana zaczęła obowiązywać, wymagane jest ponowne uruchomienie
Zalecana:
Portable Disco V2 - Diody LED sterowane dźwiękiem: 11 kroków (ze zdjęciami)
Portable Disco V2 - Diody LED sterowane dźwiękiem: Przebyłem długą drogę w mojej podróży z elektroniką, odkąd zrobiłem swoją pierwszą przenośną dyskotekę. W oryginalnej wersji zhakowałem obwód na płytce prototypowej i udało mi się zbudować schludną, małą kieszonkową dyskotekę. Tym razem zaprojektowałem własną płytkę PCB i
Led Disco Box: 7 kroków (ze zdjęciami)
Led Disco Box: jak zrobić własne Led Disco Box
Light-Up Disco Table: 27 kroków (ze zdjęciami)
Light-Up Disco Table: Każde mieszkanie potrzebuje niesamowitych mebli, więc dlaczego nie zrobić własnego? Ten stolik kawowy zawiera paski LED, które świecą w różne konfigurowalne wzory i kolory. Sterowanie oświetleniem odbywa się za pomocą Arduino i ukrytego przycisku, a całość
Organizator na biurko Disco: 8 kroków (ze zdjęciami)
Disco Desktop Organizer: Materiały: triplex, grubość: 3mmIle drewnianych płyt zależy od tego, jak duża jest Twoja wycinarka laserowa… dostosuj plik do maksymalnej wielkości płyty drewnianej… może potrzebujesz więcej niż 1 płyty (pamiętaj o tym). 6 x diody błyskowe (użyłem 7 kolorowych diod błyskowych) ava
Kontrolowane dźwiękiem diody LED - Pocket Disco: 11 kroków (ze zdjęciami)
Kontrolowane dźwiękiem diody LED - Pocket Disco: Stwórz własną kieszonkową dyskotekę z kilkoma diodami LED sterowanymi muzyką. Wszystko, czego potrzebujesz, to trochę muzyki lub dźwięku, a diody LED będą tańczyć w rytm dźwięku. Jest to naprawdę mały obwód do zbudowania i do jego wykonania potrzeba tylko kilku komponentów. Główny b