Innholdsfortegnelse:

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

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

Video: Disco-pi: 8 trinn (med bilder)
Video: Цимес. Так готовят только в Одессе! Старое Еврейское Блюдо 2024, Juli
Anonim
Disco-pi
Disco-pi

Denne instruksjonen viser hvordan du bruker en Raspberry Pi til å kontrollere en farget LED -stripe, basert på musikk spilt fra en nettleser.

Den viser hvordan du lager et grunnleggende nettsted ved hjelp av Node.js over HTTPS og bruker socket.io over WSS (Secure Websocket).

Nettstedet har en enkelt side som har en veldig grunnleggende layout. Nettsiden fyller ut en rullegardinliste med musikkfiler, som er plassert i den offentlige/lydmappen på serveren. Hvis du velger et alternativ i listen, spilles musikkfilen av på websiden av HTML 5 -lydelementet. Mens du spiller musikkfilen, bruker websiden AudioContext -grensesnittet for å analysere musikken, som deretter sendes til serveren via en sikker websocket -tilkobling.

Serveren som kjører på en Raspberry Pi bruker Node RPI WS281x Native -biblioteket (pakker inn Jeremy Garffs WS281X -bibliotek) for å endre fargene på lysdiodene på en WS2811 LED -stripe, basert på dataene som sendes gjennom websocket.

Eksempelkoden finner du her: disco-pi

Trinn 1: Utstyr

  1. Raspberry Pi - Jeg brukte en Raspberry Pi 2B som jeg hadde liggende, men du kan få et Raspberry Pi 3 Starter Kit for rundt CAD 100
  2. WS2811 LED Strip - Jeg lekte med ALITOVE 16.4ft 150 Pixels WS2811. Dette kommer med en kontroller og en strømforsyning for ca CAD 45-50
  3. Barrel Jack Connector - Jeg kjøpte en fra min lokale elektronikkbutikk, noe sånt som dette. Bare vær sikker på om den passer til strømforsyningen din
  4. Stikkontakter / ledning - Jeg hadde noen hun -til -mann -tilkoblingskabler og noen 22 gauge Solid hook up wire liggende

Trinn 2: Konfigurere Raspberry Pi

Operativsystem

Jeg bruker normalt den nyeste Raspbian -bygningen. Last ned bildet og skriv det til SD -kortet. Hvis du bruker en Windows -datamaskin, kan du bruke Win32 Disk Imager til å skrive bildet til SD -kortet.

Node.js

Installer den nyeste versjonen av Node.js. I skrivende stund bruker jeg 8.9.1

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

sudo apt-get install nodejs

Installer git

sudo apt-get install git

Trinn 3: Konfigurere eksempelkoden

Klon eksempelkoden

1. Sett opp en basismappe å installere i

cd /opt

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

2. Klon eksempelgit -depotet

git-klon https://github.com/haydockjp/disco-pi.git"

eller

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

3. Installer avhengighetene

cd disco-pi

npm installere

Dette kan ta 2-3 minutter

Trinn 4: Lag et selvsignert SSL -sertifikat

1. Opprett en privat nøkkelfil

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

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

2. Lag en CSR (forespørsel om sertifikatsignering)

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

På dette tidspunktet vil du bli bedt om informasjon om sertifikatforespørselen. Siden dette er et selvsignert sertifikat, er det opp til deg hvor nøyaktig du fyller ut detaljene. Her er et eksempel

Landnavn (kode på 2 bokstaver) [AU]: CA

Stat eller provinsnavn (fullt navn) [Noen-delstat]: British Columbia lokalitetsnavn (f.eks. By) : Vancouver organisasjonsnavn (f.eks. Selskap) [Internet Widgits Pty Ltd]: Disco Pi organisasjonsenhetsnavn (f.eks. Seksjon) : Vanlig navn (f.eks. Server FQDN eller DITT navn) : disco-pi E-postadresse : [email protected] Et utfordringspassord : Et valgfritt firmanavn :

I dette eksemplet trykker du bare på retur for å la utfordringspassordet stå tomt

3. Generer sertifikatet

openssl x509 -req -dager 1095 -i disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. For ekstra sikkerhet vil vi også opprette en Diffie Hellman Parameters -fil

openssl dhparam -out dh_2048.pem 2048

Dette kan ta 15-20 minutter

Trinn 5: Koble til maskinvaren

Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren
Koble til maskinvaren

Forsyner LED -stripen

LED -stripen drives av 12 volt. Raspberry Pi kan bare levere 3.3v eller 5v og er ikke i stand til å sende noen steder i nærheten av forsterkere som trengs for å drive så mange lysdioder.

Det er viktig å ikke koble 12 volt strømforsyningen til Raspberry Pi.

Stripen min hadde også flere strømledninger koblet til stripen i hver ende. Jeg foreslår at du tape disse opp slik at de ikke kommer i kontakt med noe av det andre utstyret ditt.

Utfør de neste trinnene på egen risiko. Jeg tar ikke ansvar for noe som kan gå galt.

LED -stripe

Min LED -stripe har tre ledninger:

RØD - +12 volt

SVART - Bakken

GRØNN - Data

MERK: det er en Din og en Dout - Data inn og Data Out. Sørg for at du jobber med enden av LED -stripen som sier Din.

Sikre at tønnekontakten ikke er koblet til strømforsyningen

1. Koble den røde ledningen fra LED -stripen til + siden av fatkontakten.

Jeg brukte en hvit 22 gauge hook -wire.

Plasser ledningen i + sporet i fatkontakten og skru den på plass.

Skyv den andre enden av ledningen inn i kontakten på LED -en. Sørg for at du kobler til den røde ledningen.

2. Koble den svarte ledningen fra LED -stripen til - siden av fatkontakten.

Jeg brukte en svart 22 gauge hook -wire.

Sett ledningen inn i - sporet i fatkontakten. På dette tidspunktet plasserer du også enden av en av koblingskablene (brun ledning på bildet) i det samme hullet og skru dem begge på plass.

Skyv den andre enden av den svarte ledningen inn i kontakten på LED -en.

Sørg for at du kobler til den svarte ledningen.

3. Koble den grønne ledningen fra LED -stripen

Ta en av hunnene til han -tilkoblingskabler. På bildene mine er dette den grønne ledningen.

Plasser hanenden i LED -kontakten med den grønne ledningen.

Dette er datakabelen.

Bringebær Pi

1. Ta den grønne kontaktkabelen og koble den til Raspberry Pi GPIO.

Du må koble den til PCM_CLK (Pin 12 / GPIO 18)

2. Ta den svarte kontaktkabelen og koble den til Raspberry Pi GPIO.

Du må koble den til en av eiendommene. Jeg foreslår at du bruker pin 14, men du kan også bruke pin 6, 9, 20, 25, 30, 34 eller 39.

MERK: For at dette skal fungere må LED -strømkilden og Raspberry Pi ha en felles grunn. Vær også oppmerksom på at du ikke må koble 12 Volt + (rød ledning) til Raspberry Pi.

LED -strøm

Du bør ikke kunne koble din 12 volt strømforsyning til fatkontakten

Alle lysdiodene på LED -stripen skal nå lyse HVIT

Trinn 6: Kode på serversiden

Kjører koden på serversiden

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Dette vil starte webserveren og begynne å lytte etter HTTPS- og WSS -forespørsler.

Standardporten er 443, men du kan overstyre dette ved å angi en miljøvariabel før du starter koden. For eksempel

eksport DISCO_PI_PORT = 1443

Min LED -stripe har 150 lysdioder. Disse kontrolleres i grupper av treere. Dette betyr at jeg ikke kan kontrollere hver LED individuelt, og jeg må sende gjennom nok informasjon til å kontrollere 50.

Hvis din LED har mer eller mindre, kan du overstyre antall lysdioder du kontrollerer ved å legge inn en parameter til oppstarten. For eksempel hvis du bare kan kontrollere 10 lysdioder

sudo npm start 10

Hovedserverkoden finnes i app.js -filen. Denne filen starter HTTPS -webserveren og legger også til på socket.io for å lytte etter websocket -forespørsler på samme port.

For å få tilgang til nettstedet, bør du åpne en nettleser på hoveddatamaskinen din (jeg har bare testet dette i Chrome) og bruke IP -adressen til Raspberry Pi, f.eks.

10.0.1.2/

Du kan finne ut IP -adressen din fra kommandolinjen Raspberry Pi.

ifconfig

Nettserveren serverer alt innhold under den offentlige mappen. Som standard vises index.html -siden.

Den har ett API -sluttpunkt - /api /audio. Dette sluttpunktet ser etter filer under mappen public/audio og returnerer listen. For eksempel

["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"]

For å legge til musikk som et alternativ, kopierer du filer til denne mappen. Jeg personlig bruker Filezilla over ssh. Mappen du vil legge til filer i, er /opt/com.jonhaydock/disco-pi/public/audio

Trinn 7: Nettstedskode

Nettstedskode
Nettstedskode

Når du treffer nettstedet, bør du se noe slikt.

Hvis du ser en sikkerhetsadvarsel, er dette fordi vi bruker et selvsignert SSL-sertifikat. Du kan ignorere det eller legge det til som et unntak.

Når du velger et filnavn, kilden for HTML 5 -lydelementet. vil bli satt til den filen. Når den er klar, begynner musikken å spille. Når sangen er ferdig, stopper musikken.

Hvis du velger alternativet Ingen, slutter musikken å spille.

Mens du spiller musikkfilen, bruker websiden AudioContext -grensesnittet til å analysere musikken, som deretter sendes til serveren via en sikker websocket -tilkobling.

Meldingen er av typen socket.io på serveren som er konfigurert for å lytte etter "ws2811". Den inneholder en rekke 50 elementer, som er mellom 0 og 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}

Serveren bruker Node RPI WS281x Native -biblioteket (pakker inn Jeremy Garffs WS281X -bibliotek) for å endre fargene på lysdiodene på en WS2811 LED -stripe, basert på dataene som sendes gjennom websocket.

Trinn 8: Til slutt

Image
Image

Du bør se lysdiodene på stripen endre farge med musikken, basert på Fast Fourier Transform -analysen som ble utført på nettsiden.

Jeg håper du liker dette. Gi meg beskjed om hva du gjør med det!

MERK: Hvis du har problemer

Siden dette biblioteket og den innebygde Raspberry Pi -lyden både bruker PWM, kan de ikke brukes sammen.

Du må kanskje svarteliste Broadcom lydkjernemodulen ved å opprette en fil /etc/modprobe.d/snd-blacklist.conf med

svarteliste snd_bcm2835

Hvis lydenheten fortsatt lastes etter svarteliste, kan det hende du også må kommentere den i filen /etc /modules. På hodeløse systemer kan du også trenge å tvinge lyd gjennom hdmi

Rediger config.txt og legg til:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

En omstart er nødvendig for at denne endringen skal tre i kraft

Anbefalt: