Innehållsförteckning:

Disco-pi: 8 steg (med bilder)
Disco-pi: 8 steg (med bilder)

Video: Disco-pi: 8 steg (med bilder)

Video: Disco-pi: 8 steg (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Juli
Anonim
Disco-pi
Disco-pi

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

  1. 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
  2. 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
  3. 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
  4. 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

Ansluta hårdvaran
Ansluta hårdvaran
Ansluta hårdvaran
Ansluta hårdvaran
Ansluta hårdvaran
Ansluta hårdvaran
Ansluta hårdvaran
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

Webbplatskod
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

Image
Image

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: