Innehållsförteckning:
- Steg 1: Utrustning
- Steg 2: Konfigurera Raspberry Pi
- Steg 3: Konfigurera exempelkoden
- Steg 4: Skapa ett självsignerat SSL -certifikat
- Steg 5: Ansluta hårdvaran
- Steg 6: Kod på serversidan
- Steg 7: Webbplatskod
- Steg 8: Slutligen
Video: Disco-pi: 8 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Denna instruerbara visar hur man använder en Raspberry Pi för att styra en färgad LED -remsa, baserad på musik som spelas från en webbläsare.
Den visar hur du skapar en grundläggande webbplats med Node.js via HTTPS och använder socket.io över WSS (Secure Websocket).
Webbplatsen har en enda sida som har en mycket grundläggande layout. Webbsidan fyller i en rullgardinsmeny med musikfiler som finns i mappen public/audio på servern. Om du väljer ett alternativ i listan spelas musikfilen på webbsidan med ljudelementet HTML 5. När du spelar musikfilen använder webbsidan AudioContext -gränssnittet för att analysera musiken, som sedan skickas till servern via en säker webbanslutning.
Servern som körs på en Raspberry Pi använder Node RPI WS281x Native -biblioteket (omsluter Jeremy Garffs WS281X -bibliotek) för att ändra färgerna på lysdioderna på en WS2811 LED -remsa, baserat på data som skickas via webbuttaget.
Exempelkoden hittar du här: disco-pi
Steg 1: Utrustning
- Raspberry Pi - Jag använde en Raspberry Pi 2B som jag hade lagt, men du kan få ett Raspberry Pi 3 Starter Kit för cirka 100 CAD
- WS2811 LED Strip - Jag lekte med ALITOVE 16.4ft 150 Pixels WS2811. Detta levereras med en styrenhet och en strömförsörjning för cirka 45-50 CAD
- Barrel Jack Connector - Jag köpte en från min lokala elektronikbutik, något liknande. Se bara till om det passar din strömförsörjning
- Bygelkontakter / tråd - Jag hade några kvinnliga till manliga anslutningskablar och några 22 Gauge Solid hook up wire liggande
Steg 2: Konfigurera Raspberry Pi
Operativ system
Jag använder normalt den senaste Raspbian -versionen. Ladda ner bilden och skriv den till SD -kortet. Om du använder en Windows -dator kan du använda Win32 Disk Imager för att skriva bilden till SD -kortet.
Node.js
Installera den senaste versionen av Node.js. I skrivande stund använder jag 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Installera git
sudo apt-get install git
Steg 3: Konfigurera exempelkoden
Klona exempelkoden
1. Skapa en basmapp att installera i
cd /opt
sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock
2. Klona exempel på git -förvaret
git-klon https://github.com/haydockjp/disco-pi.git"
eller
git klon [email protected]: haydockjp/disco-pi.git
3. Installera beroende
cd disco-pi
npm installera
Detta kan ta 2-3 minuter
Steg 4: Skapa ett självsignerat SSL -certifikat
1. Skapa en privat nyckelfil
cd /opt/com.jonhaydock/disco-pi/certs
openssl genrsa -out disco-pi-key.pem 2048
2. Skapa en CSR (begäran om certifikatsignering)
openssl req -ny -key disco-pi-key.pem -out disco-pi-csr.pem
Vid denna tidpunkt kommer du att bli ombedd att ange information om certifikatförfrågan. Eftersom detta är ett självsignerat certifikat är det upp till dig hur exakt du fyller i detaljerna. Här är ett exempel
Landnamn (kod med två bokstäver) [AU]: CA
Stat eller provinsnamn (fullständigt namn) [Någon delstat]: British Columbia ortnamn (t.ex. stad) : Vancouver organisationsnamn (t.ex. företag) [Internet Widgits Pty Ltd]: Disco Pi organisatoriska enhetsnamn (t.ex. avsnitt) : Vanligt namn (t.ex. server FQDN eller DITT namn) : disco-pi E-postadress : [email protected] Ett utmaningslösenord : Ett valfritt företagsnamn :
I det här exemplet trycker du bara på retur för att lämna utmaningslösenordet tomt
3. Skapa certifikatet
openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem
4. För extra säkerhet skapar vi också en Diffie Hellman Parameters -fil
openssl dhparam -out dh_2048.pem 2048
Detta kan ta 15-20 minuter
Steg 5: Ansluta hårdvaran
Drar LED -remsan
LED -remsan drivs av 12 volt. Raspberry Pi kan bara mata ut 3.3v eller 5v och kan inte mata ut någonstans nära de förstärkare som behövs för att driva så många lysdioder.
Det är viktigt att inte ansluta 12 volt strömförsörjning till Raspberry Pi.
Min remsa hade också ytterligare strömkablar anslutna till remsan i vardera änden. Jag föreslår att du tejpar upp dessa så att de inte kommer i kontakt med någon annan utrustning.
Utför nästa steg på egen risk. Jag tar inget ansvar för något som kan gå fel.
LED -remsa
Min LED -remsa har tre ledningar:
RÖD - +12 volt
SVART - Mark
GRÖN - Data
OBS: det finns en Din och en Dout - Data In och Data Out. Se till att du arbetar med slutet av LED -remsan som säger Din.
Se till att Barrel Jack inte är ansluten till strömförsörjningen
1. Anslut den röda ledningen från LED -remsan till + sidan av fatuttaget.
Jag använde en vit 22 gauge -anslutningstråd.
Placera tråden i + -facket i fatuttaget och skruva fast det.
Skjut in den andra änden av tråden i uttaget på lysdioden. Se till att du ansluter till den röda tråden.
2. Anslut den svarta ledningen från LED -remsan till - sidan av fatuttaget.
Jag använde en svart 22 gauge -anslutningstråd.
Placera tråden i - -facket i fatuttaget. Vid denna tidpunkt placerar du också hanänden på en av anslutningskablarna (brun tråd på fotot) i samma hål och skruvar fast dem båda.
Skjut in den andra änden av den svarta ledningen i uttaget på lysdioden.
Se till att du ansluter med den svarta ledningen.
3. Anslut den gröna ledningen från LED -remsan
Ta en av hon- till han -anslutningskablarna. På mina foton är detta den gröna tråden.
Placera hanänden i LED -uttaget med den gröna tråden.
Detta är datakabeln.
Raspberry Pi
1. Ta den gröna kontaktkabeln och anslut den till Raspberry Pi GPIO.
Du måste ansluta den till PCM_CLK (Pin 12 / GPIO 18)
2. Ta den svarta kontaktkabeln och anslut den till Raspberry Pi GPIO.
Du måste ansluta den till en av grunderna. Jag föreslår att du använder stift 14, men du kan också använda stift 6, 9, 20, 25, 30, 34 eller 39.
OBS! För att detta ska fungera måste LED -strömkällan och Raspberry Pi ha en gemensam grund. Observera också att du inte får ansluta 12 Volt + (röd tråd) till Raspberry Pi.
LED -ström
Du bör inte kunna ansluta din 12 volts strömförsörjning till fatuttaget
Alla lysdioder på din LED -remsa ska nu lysa VITA
Steg 6: Kod på serversidan
Kör koden på serversidan
cd /opt/com.jonhaydock/disco-pi
sudo npm start
Detta kommer att starta webbservern och börja lyssna på HTTPS- och WSS -förfrågningar.
Standardporten är 443, men du kan åsidosätta detta genom att ställa in en miljövariabel innan du startar koden. Till exempel
exportera DISCO_PI_PORT = 1443
Min LED -remsa har 150 lysdioder. Dessa kontrolleras i grupper om treor. Det betyder att jag inte kan styra varje LED individuellt, och jag måste skicka igenom tillräckligt med information för att styra 50.
Om din LED har mer eller mindre kan du åsidosätta antalet lysdioder som du styr genom att ange en parameter för att starta. Till exempel om du bara kan styra 10 lysdioder
sudo npm start 10
Huvudserverkoden finns i filen app.js. Den här filen startar HTTPS -webbservern och lägger också till på socket.io för att lyssna efter websocket -förfrågningar på samma port.
För att komma åt webbplatsen bör du öppna en webbläsare på din huvuddator (jag har bara testat detta i Chrome) och använda IP -adressen till Raspberry Pi, t.ex.
10.0.1.2/
Du kan ta reda på din IP -adress från kommandoraden Raspberry Pi.
ifconfig
Webbservern kommer att visa upp allt innehåll under den offentliga mappen. Som standard visas index.html -sidan.
Den har en API -slutpunkt - /api /audio. Denna slutpunkt söker efter filer under mappen public/audio och returnerar listan. Till exempel
["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"]
Om du vill lägga till musik som ett alternativ kopierar du filer till den här mappen. Jag använder personligen Filezilla över ssh. Mappen som du vill lägga till filer till är /opt/com.jonhaydock/disco-pi/public/audio
Steg 7: Webbplatskod
När du träffar webbplatsen bör du se något liknande.
Om du ser en säkerhetsvarning beror det på att vi använder ett självsignerat SSL-certifikat. Du kan ignorera det eller lägga till det som ett undantag.
När du väljer ett filnamn, källan för HTML 5 -ljudelementet. kommer att ställas in på den filen. När den är klar börjar musiken spela. När sången är klar stannar musiken.
Om du väljer alternativet Ingen kommer musiken att sluta spela.
När du spelar musikfilen använder webbsidan AudioContext -gränssnittet för att analysera musiken, som sedan skickas till servern via en säker webbanslutning.
Meddelandet är den typ som socket.io på servern har ställts in för att lyssna på "ws2811". Den innehåller en uppsättning med 50 element, som är mellan 0 och 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}
Servern använder Node RPI WS281x Native -biblioteket (omsluter Jeremy Garffs WS281X -bibliotek) för att ändra färgerna på lysdioderna på en WS2811 LED -remsa, baserat på data som skickas via websocket.
Steg 8: Slutligen
Du bör se lysdioderna på remsan ändra färg med musiken, baserat på analysen av Fast Fourier Transform på webbsidan.
Jag hoppas att du gillar det här. Låt mig veta vad du gör med det!
OBS: Om du har några problem
Eftersom detta bibliotek och det inbyggda Raspberry Pi -ljudet båda använder PWM kan de inte användas tillsammans.
Du kan behöva svartlista Broadcom-ljudkärnmodulen genom att skapa en fil /etc/modprobe.d/snd-blacklist.conf med
svartlista snd_bcm2835
Om ljudenheten fortfarande laddas efter svartlistning kan du också behöva kommentera den i filen /etc /modules. På huvudlösa system kan du också behöva tvinga ljud genom hdmi
Redigera config.txt och lägg till:
hdmi_force_hotplug = 1
hdmi_force_edid_audio = 1
En omstart krävs för att denna ändring ska träda i kraft
Rekommenderad:
Bärbara Disco V2 -ljudkontrollerade lysdioder: 11 steg (med bilder)
Bärbara Disco V2 -ljudstyrda lysdioder: Jag har kommit långt med min elektronikresa sedan jag gjorde mitt första bärbara diskotek. I den ursprungliga byggnaden hackade jag ihop en krets på prototypkort och lyckades bygga en snygg, liten fickdisko. Den här gången konstruerade jag min egen PCB och
Led Disco Box: 7 steg (med bilder)
Led Disco Box: Hur man gör din egen Led Disco Box
Light-Up Disco Table: 27 steg (med bilder)
Light-Up Disco Table: Varje lägenhet behöver fantastiska möbler, så varför inte göra dina egna? Detta soffbord innehåller LED -remsor som lyser upp i olika anpassningsbara mönster och färger. Ljusen styrs av en Arduino och en dold knapp, och det hela
Disco Desktop Organizer: 8 steg (med bilder)
Disco Desktop Organizer: Material: triplex, tjocklek: 3 mm Hur många träplattor beror på hur stor din laserskärare är … justera filen på din maximala träplatta … kanske du behöver mer än 1 tallrik (tänk på det). 6 x blixtljus (jag använde 7 färgblixtslampor) ava
Infinite Disco: 6 steg (med bilder)
Infinite Disco: I det här projektet gjorde jag en oändlig spegel baserad på en dodekaeder som reagerar på ljud