Spisu treści:

Disco-pi: 8 kroków (ze zdjęciami)
Disco-pi: 8 kroków (ze zdjęciami)

Wideo: Disco-pi: 8 kroków (ze zdjęciami)

Wideo: Disco-pi: 8 kroków (ze zdjęciami)
Wideo: TOP GIRLS - JAKBYŚ MNIE ZECHCIAŁ (Oficjalny Teledysk) 2024, Lipiec
Anonim
Disco-pi
Disco-pi

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

  1. 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
  2. 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
  3. Złącze Barrel Jack - kupiłem jedno w moim lokalnym sklepie z elektroniką, coś takiego. Tylko upewnij się, czy pasuje do twojego zasilacza
  4. 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

Podłączanie sprzętu
Podłączanie sprzętu
Podłączanie sprzętu
Podłączanie sprzętu
Podłączanie sprzętu
Podłączanie sprzętu
Podłączanie sprzętu
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

Kod strony internetowej
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

Image
Image

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: