Inhaltsverzeichnis:

Disco-Pi - Gunook
Disco-Pi - Gunook

Video: Disco-Pi - Gunook

Video: Disco-Pi - Gunook
Video: Umbau vom Fahrrad zum E-Bike / Pedelec mit Bafang Motor 🚴🔧 - Praxis 2024, Juli
Anonim
Disco-pi
Disco-pi

Dieses anweisbare zeigt, wie man einen Raspberry Pi verwendet, um einen farbigen LED-Streifen zu steuern, basierend auf Musik, die von einem Webbrowser gespielt wird.

Es zeigt, wie Sie eine einfache Website mit Node.js über HTTPS erstellen und socket.io über WSS (Secure Websocket) verwenden.

Die Website hat eine einzige Seite, die ein sehr einfaches Layout hat. Die Webseite füllt eine Dropdown-Liste mit Musikdateien aus, die sich im öffentlichen/Audio-Ordner auf dem Server befinden. Wenn Sie eine Option in der Liste auswählen, wird die Musikdatei auf der Webseite unter Verwendung des HTML 5-Audioelements abgespielt. Beim Abspielen der Musikdatei verwendet die Webseite die AudioContext-Schnittstelle, um die Musik zu analysieren, die dann über eine sichere Websocket-Verbindung an den Server gesendet wird.

Der Server, der auf einem Raspberry Pi läuft, verwendet die Node RPI WS281x Native Library (die die WS281X-Bibliothek von Jeremy Garff umhüllt), um die Farben der LEDs auf einem WS2811-LED-Streifen basierend auf den über den Websocket gesendeten Daten zu ändern.

Den Beispielcode finden Sie hier: disco-pi

Schritt 1: Ausrüstung

  1. Raspberry Pi - Ich habe einen Raspberry Pi 2B verwendet, den ich herumgelegt hatte, aber Sie können ein Raspberry Pi 3 Starter Kit für ca. 100 CAD bekommen
  2. WS2811 LED-Streifen - Ich habe mit ALITOVE 16.4ft 150 Pixel WS2811 gespielt. Dies kommt mit einem Controller und einem Netzteil für ca. CAD 45-50
  3. Barrel Jack Connector - Ich habe einen von meinem örtlichen Elektronikladen gekauft, etwa so. Stellen Sie nur sicher, ob Ihr Netzteil passt
  4. Jumper-Anschlüsse / Draht - Ich hatte einige Buchse-zu-Stecker-Anschlusskabel und einige 22-Gauge-Festanschlusskabel herumliegen

Schritt 2: Einrichten des Raspberry Pi

Betriebssystem

Normalerweise verwende ich die neueste Raspbian-Version. Laden Sie das Bild herunter und schreiben Sie es auf die SD-Karte. Wenn Sie einen Windows-Computer verwenden, können Sie Win32 Disk Imager verwenden, um das Image auf die SD-Karte zu schreiben.

Node.js

Installieren Sie die neueste Version von Node.js. Zum Zeitpunkt des Schreibens verwende ich 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

git installieren

sudo apt-get install git

Schritt 3: Einrichten des Beispielcodes

Klonen Sie den Beispielcode

1. Richten Sie einen Basisordner für die Installation ein

cd /opt

sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock

2. Klonen Sie das Beispiel-Git-Repository

git-Klon

oder

git clone [email protected]:haydockjp/disco-pi.git

3. Installieren Sie die Abhängigkeiten

cd disco-pi

npm installieren

Dies kann 2-3 Minuten dauern

Schritt 4: Erstellen Sie ein selbstsigniertes SSL-Zertifikat

1. Erstellen Sie eine private Schlüsseldatei

cd /opt/com.jonhaydock/disco-pi/certs

openssl genrsa -out disco-pi-key.pem 2048

2. Erstellen Sie einen CSR (Certificate Signing Request)

openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem

An dieser Stelle werden Sie nach einigen Informationen für die Zertifikatsanforderung gefragt. Da es sich um ein selbstsigniertes Zertifikat handelt, liegt es an Ihnen, wie genau Sie die Angaben machen. Hier ist ein Beispiel

Ländername (2-Buchstaben-Code) [AU]:CA

Name des Bundesstaates oder der Provinz (vollständiger Name) [Some-State]:British Columbia Locality Name (z. B. Stadt) :Vancouver Organization Name (z. B. Firma) [Internet Widgits Pty Ltd]:Disco Pi Name der Organisationseinheit (z. B. Abschnitt) : Allgemeiner Name (zB Server-FQDN oder IHR Name) :disco-pi E-Mail-Adresse :[email protected] Ein Challenge-Passwort : Ein optionaler Firmenname :

In diesem Beispiel drücken Sie einfach die Eingabetaste, um das Challenge-Passwort leer zu lassen

3. Generieren Sie das Zertifikat

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Für zusätzliche Sicherheit erstellen wir auch eine Diffie Hellman Parameters-Datei

openssl dhparam -out dh_2048.pem 2048

Dies kann 15-20 Minuten dauern

Schritt 5: Anschließen der Hardware

Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware
Anschließen der Hardware

Stromversorgung des LED-Streifens

Der LED-Streifen wird mit 12 Volt betrieben. Der Raspberry Pi kann nur 3,3 V oder 5 V ausgeben und kann nicht annähernd die Ampere ausgeben, die zum Antreiben so vieler LEDs erforderlich sind.

Es ist wichtig, das 12-Volt-Netzteil nicht an den Raspberry Pi anzuschließen.

Mein Streifen hatte auch zusätzliche Stromkabel, die an beiden Enden mit dem Streifen verbunden waren. Ich schlage vor, dass Sie diese mit Klebeband versehen, damit sie nicht mit Ihren anderen Geräten in Kontakt kommen.

Führen Sie die nächsten Schritte auf eigene Gefahr durch. Ich übernehme keine Verantwortung für alles, was schief gehen könnte.

LED-Leiste

Mein LED-Streifen hat drei Drähte:

ROT - +12 Volt

SCHWARZ - Masse

GRÜN - Daten

HINWEIS: Es gibt einen Din und einen Dout - Data In und Data Out. Stellen Sie sicher, dass Sie mit dem Ende des LED-Streifens arbeiten, auf dem Din steht.

Stellen Sie sicher, dass der Barrel Jack nicht mit der Stromversorgung verbunden ist

1. Verbinden Sie das rote Kabel vom LED-Streifen mit der + Seite der Barrel Jack.

Ich habe ein weißes 22-Gauge-Anschlusskabel verwendet.

Legen Sie den Draht in den + Schlitz in der Zylinderbuchse und schrauben Sie ihn fest.

Schieben Sie das andere Ende des Drahtes in die Buchse an der LED. Stellen Sie sicher, dass Sie mit dem roten Kabel verbunden sind.

2. Verbinden Sie das schwarze Kabel vom LED-Streifen mit der - Seite des Barrel Jack.

Ich habe ein schwarzes 22-Gauge-Anschlusskabel verwendet.

Legen Sie den Draht in den - Schlitz in der Zylinderbuchse. Stecken Sie an dieser Stelle auch das männliche Ende eines der Anschlusskabel (brauner Draht auf dem Foto) in das gleiche Loch und schrauben Sie beide fest.

Schieben Sie das andere Ende des schwarzen Kabels in die Buchse an der LED.

Stellen Sie sicher, dass Sie mit dem schwarzen Kabel verbunden sind.

3. Verbinden Sie das grüne Kabel vom LED-Streifen

Nehmen Sie eines der Steckerkabel von Buchse auf Stecker. Auf meinen Fotos ist dies der grüne Draht.

Stecken Sie das männliche Ende mit dem grünen Draht in die LED-Buchse.

Das ist das Datenkabel.

Himbeer-Pi

1. Nehmen Sie das grüne Anschlusskabel und verbinden Sie es mit dem Raspberry Pi GPIO.

Sie müssen es mit dem PCM_CLK (Pin 12 / GPIO 18) verbinden

2. Nehmen Sie das schwarze Anschlusskabel und verbinden Sie es mit dem Raspberry Pi GPIO.

Sie müssen es mit einem der Gründe verbinden. Ich schlage vor, Sie verwenden Pin 14, aber Sie können auch Pin 6, 9, 20, 25, 30, 34 oder 39 verwenden.

HINWEIS: Damit dies funktioniert, müssen die LED-Stromquelle und der Raspberry Pi eine gemeinsame Masse haben. Beachten Sie auch, dass Sie die 12 Volt + (rotes Kabel) nicht an den Raspberry Pi anschließen dürfen.

LED-Leistung

Sie sollten Ihr 12-Volt-Netzteil nicht an die Hohlbuchse anschließen können

Alle LEDs auf Ihrem LED-Streifen sollten jetzt WEISS leuchten

Schritt 6: Serverseitiger Code

Ausführen des serverseitigen Codes

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Dadurch wird der Webserver gestartet und auf HTTPS- und WSS-Anforderungen gewartet.

Der Standardport ist 443, aber Sie können dies überschreiben, indem Sie eine Umgebungsvariable festlegen, bevor Sie den Code starten. Zum Beispiel

DISCO_PI_PORT=1443 exportieren

Mein LED-Streifen hat 150 LEDs. Diese werden in Dreiergruppen angesteuert. Das bedeutet, dass ich nicht jede LED einzeln ansteuern kann und ich genügend Informationen senden muss, um 50 zu steuern.

Wenn Ihre LED mehr oder weniger hat, können Sie die Anzahl der LEDs, die Sie steuern, überschreiben, indem Sie einen Parameter an den Start übergeben. Wenn Sie beispielsweise nur 10 LEDs steuern können

sudo npm start 10

Den Hauptservercode finden Sie in der Datei app.js. Diese Datei startet den HTTPS-Webserver und fügt socket.io hinzu, um auf Websocket-Anfragen am selben Port zu lauschen.

Um auf die Website zuzugreifen, sollten Sie auf Ihrem Hauptrechner einen Webbrowser öffnen (ich habe dies nur in Chrome getestet) und die IP-Adresse des Raspberry Pi verwenden, z. B.

10.0.1.2/

Sie können Ihre IP-Adresse über die Befehlszeile des Raspberry Pi herausfinden.

ifconfig

Der Webserver stellt alle Inhalte im öffentlichen Ordner bereit. Standardmäßig wird die Seite index.html angezeigt.

Es hat einen API-Endpunkt - /api/audio. Dieser Endpunkt sucht nach Dateien im öffentlichen/Audio-Ordner und gibt die Liste zurück. Zum Beispiel

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "Dafür bist du gekommen (feat. Rihanna).mp3"]

Um optional Musik hinzuzufügen, kopieren Sie Dateien in diesen Ordner. Ich persönlich benutze Filezilla über ssh. Der Ordner, dem Sie Dateien hinzufügen möchten, ist /opt/com.jonhaydock/disco-pi/public/audio

Schritt 7: Website-Code

Website-Code
Website-Code

Wenn Sie die Website aufrufen, sollten Sie so etwas sehen.

Wenn Sie eine Sicherheitswarnung sehen, liegt dies daran, dass wir ein selbstsigniertes SSL-Zertifikat verwenden. Sie können es ignorieren oder als Ausnahme hinzufügen.

Bei Auswahl eines Dateinamens die Quelle für das HTML 5-Audioelement. wird auf diese Datei gesetzt. Sobald Sie fertig sind, beginnt die Musik zu spielen. Sobald der Song zu Ende ist, wird die Musik gestoppt.

Wenn Sie die Option Keine auswählen, wird die Musikwiedergabe beendet.

Beim Abspielen der Musikdatei verwendet die Webseite die AudioContext-Schnittstelle, um die Musik zu analysieren, die dann über eine sichere Websocket-Verbindung an den Server gesendet wird.

Die Nachricht ist der Typ, dass socket.io auf dem Server eingerichtet wurde, um auf "ws2811" zu lauschen. Es enthält ein Array von 50 Elementen, die zwischen 0 und 255 liegen.

"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, 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}

Der Server verwendet die Node RPI WS281x Native Library (die die WS281X Library von Jeremy Garff umschließt), um die Farben der LEDs auf einem WS2811 LED-Streifen basierend auf den über den Websocket gesendeten Daten zu ändern.

Schritt 8: Endlich

Image
Image

Sie sollten sehen, dass die LEDs auf dem Streifen die Farbe mit der Musik ändern, basierend auf der Fast Fourier Transform-Analyse, die auf der Webseite durchgeführt wurde.

Ich hoffe, dass Sie dies genießen. Lass mich wissen, was du damit machst!

HINWEIS: Bei Problemen

Da diese Bibliothek und das Onboard Raspberry Pi Audio beide PWM verwenden, können sie nicht zusammen verwendet werden.

Möglicherweise müssen Sie das Broadcom-Audio-Kernel-Modul auf die schwarze Liste setzen, indem Sie eine Datei /etc/modprobe.d/snd-blacklist.conf mit. erstellen

schwarze Liste snd_bcm2835

Wenn das Audiogerät nach dem Blacklisting immer noch geladen wird, müssen Sie es möglicherweise auch in der Datei /etc/modules auskommentieren. Auf Headless-Systemen müssen Sie möglicherweise auch Audio über HDMI erzwingen

Bearbeiten Sie config.txt und fügen Sie Folgendes hinzu:

hdmi_force_hotplug=1

hdmi_force_edid_audio=1

Damit diese Änderung wirksam wird, ist ein Neustart erforderlich

Empfohlen: