Inhaltsverzeichnis:
- Schritt 1: Ausrüstung
- Schritt 2: Einrichten des Raspberry Pi
- Schritt 3: Einrichten des Beispielcodes
- Schritt 4: Erstellen Sie ein selbstsigniertes SSL-Zertifikat
- Schritt 5: Anschließen der Hardware
- Schritt 6: Serverseitiger Code
- Schritt 7: Website-Code
- Schritt 8: Endlich
Video: Disco-Pi - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
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
- 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
- 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
- Barrel Jack Connector - Ich habe einen von meinem örtlichen Elektronikladen gekauft, etwa so. Stellen Sie nur sicher, ob Ihr Netzteil passt
- 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
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
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
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:
Mikrogravitations-Pflanzenzüchter "Disco Ball": 13 Schritte
Microgravity Plant Grower "Disco Ball": Hallo Leser, dieses Projekt ist eine professionelle Einreichung für den Growing Beyond Earth Maker Contest Wettbewerbsregeln, die ich aufgelistet habe
CD-Disco: 7 Schritte
CD-Disco: Machen Sie eine coole Disco-Beleuchtung für Ihr Zimmer, indem Sie einfach eine CD oder DVD, einige RGB-LEDs und einen Batteriehalter verwenden STEPHERES A VI