Indholdsfortegnelse:

Disco-pi: 8 trin (med billeder)
Disco-pi: 8 trin (med billeder)

Video: Disco-pi: 8 trin (med billeder)

Video: Disco-pi: 8 trin (med billeder)
Video: Crazy Frog - Axel F (Official Video) 2024, November
Anonim
Disco-pi
Disco-pi

Denne instruktør viser, hvordan du bruger en Raspberry Pi til at styre en farvet LED -strip, baseret på musik, der spilles fra en webbrowser.

Det viser, hvordan du opretter et grundlæggende websted ved hjælp af Node.js over HTTPS og bruger socket.io over WSS (Secure Websocket).

Websitet har en enkelt side, der har et meget grundlæggende layout. Websiden udfylder en rulleliste med musikfiler, som er placeret i den offentlige/lydmappe på serveren. Hvis du vælger en indstilling på listen, afspilles musikfilen på websiden ved hjælp af HTML 5 -lydelementet. Mens musikfilen afspilles, bruger websiden AudioContext -grænsefladen til at analysere musikken, som derefter sendes til serveren via en sikker websocketforbindelse.

Serveren, der kører på en Raspberry Pi, bruger Node RPI WS281x Native -biblioteket (indpakning af Jeremy Garffs WS281X -bibliotek) til at ændre farverne på lysdioderne på en WS2811 LED -strip, baseret på de data, der sendes gennem websocket.

Eksempelkoden findes her: disco-pi

Trin 1: Udstyr

  1. Raspberry Pi - Jeg brugte en Raspberry Pi 2B, som jeg havde liggende, men du kan få et Raspberry Pi 3 Starter Kit til omkring CAD 100
  2. WS2811 LED Strip - Jeg spillede med ALITOVE 16.4ft 150 Pixels WS2811. Dette leveres med en controller og en strømforsyning til omkring CAD 45-50
  3. Barrel Jack Connector - Jeg købte en fra min lokale elektronikbutik, sådan noget. Bare sørg for, om den passer til din strømforsyning
  4. Jumper -stik / ledninger - jeg havde nogle hun -til -mand -stik kabler og nogle 22 gauge Solid hook up wire liggende

Trin 2: Opsætning af Raspberry Pi

Operativ system

Jeg bruger normalt den nyeste Raspbian -build. Download billedet og skriv det til SD -kortet. Hvis du bruger en Windows -computer, kan du bruge Win32 Disk Imager til at skrive billedet til SD -kortet.

Node.js

Installer den nyeste version af Node.js. I skrivende stund bruger 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

Trin 3: Opsætning af eksempelkoden

Klon eksempelkoden

1. Opret en basismappe at installere i

cd /opt

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

2. Klon eksemplet git repository

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

eller

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

3. Installer afhængighederne

cd disco-pi

npm installation

Dette kan tage 2-3 minutter

Trin 4: Opret et selvsigneret SSL -certifikat

1. Opret en privat nøglefil

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

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

2. Opret en CSR (anmodning om certifikatsignering)

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

På dette tidspunkt bliver du bedt om nogle oplysninger til certifikatanmodningen. Da dette er et selvsigneret certifikat, er det op til dig, hvor præcist du udfylder detaljerne. Her er et eksempel

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

Stat eller provinsnavn (fuldt navn) [Nogle-delstat]: British Columbia-lokalitetsnavn (f.eks. By) : Vancouver-organisationsnavn (f.eks. Virksomhed) [Internet Widgits Pty Ltd]: Disco Pi organisatoriske enhedsnavn (f.eks. Sektion) : Almindeligt navn (f.eks. Server FQDN eller DIT navn) : disco-pi E-mailadresse : [email protected] En udfordringskodeord : Et valgfrit firmanavn :

I dette eksempel skal du bare trykke på retur for at lade udfordringsadgangskoden være tom

3. Generer certifikatet

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

4. For ekstra sikkerhed opretter vi også en Diffie Hellman Parameters -fil

openssl dhparam -out dh_2048.pem 2048

Dette kan tage 15-20 minutter

Trin 5: Tilslutning af hardwaren

Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware
Tilslutning af hardware

Tænder LED -strimlen

LED -båndet drives af 12 volt. Raspberry Pi kan kun levere 3.3v eller 5v og er ikke i stand til at udsende nogen steder i nærheden af de forstærkere, der er nødvendige for at drive så mange lysdioder.

Det er vigtigt ikke at tilslutte 12 volt strømforsyningen til Raspberry Pi.

Min strip havde også yderligere strømledninger forbundet til båndet i hver ende. Jeg foreslår, at du tape disse op, så de ikke kommer i kontakt med noget af dit andet udstyr.

Udfør de næste trin på egen risiko. Jeg tager intet ansvar for noget, der kan gå galt.

LED Strip

Min LED -strip har tre ledninger:

RØD - +12 volt

SORT - Jord

GRØN - Data

BEMÆRK: der er en Din og en Dout - Data In og Data Out. Sørg for, at du arbejder med enden af LED -strimlen, der siger Din.

Sørg for, at tøndejacket ikke er tilsluttet strømforsyningen

1. Tilslut den røde ledning fra LED -stripen til + siden af Barrel Jack.

Jeg brugte en hvid 22 gauge tilslutningstråd.

Placer ledningen i + -åbningen i tønde -stikket, og skru den på plads.

Skub den anden ende af ledningen ind i stikkontakten på LED'en. Sørg for, at du forbinder med den røde ledning.

2. Tilslut den sorte ledning fra LED -strimlen til - siden af Barrel Jack.

Jeg brugte en sort 22 gauge tilslutningstråd.

Placer ledningen i - åbningen i tøndejakken. På dette tidspunkt placeres også hanenden af en af konnektorskablerne (brun ledning på billedet) i det samme hul, og skru dem begge på plads.

Skub den anden ende af den sorte ledning ind i stikkontakten på LED'en.

Sørg for, at du forbinder med den sorte ledning.

3. Tilslut den grønne ledning fra LED -strimlen

Tag en af hun -til -han -forbindelseskablerne. På mine fotos er dette den grønne ledning.

Placer hanenden i LED -stikket med den grønne ledning.

Dette er datakablet.

Hindbær Pi

1. Tag det grønne stik og tilslut det til Raspberry Pi GPIO.

Du skal slutte den til PCM_CLK (Pin 12 / GPIO 18)

2. Tag det sorte stik kabel, og slut det til Raspberry Pi GPIO.

Du skal tilslutte den til en af grundene. Jeg foreslår, at du bruger pin 14, men du kan også bruge pin 6, 9, 20, 25, 30, 34 eller 39.

BEMÆRK: For at dette kan fungere, skal LED -strømkilden og Raspberry Pi have en fælles grund. Bemærk også, at du ikke må slutte 12 Volt + (rød ledning) til Raspberry Pi.

LED strøm

Du bør ikke være i stand til at slutte din 12 volt strømforsyning til tøndejackstikket

Alle lysdioderne på din LED -strip skal nu lyse HVID

Trin 6: Serverside kode

Kører serversiden kode

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Dette starter webserveren og begynder at lytte efter HTTPS- og WSS -anmodninger.

Standardporten er 443, men du kan tilsidesætte dette ved at angive en miljøvariabel, før du starter koden. For eksempel

eksport DISCO_PI_PORT = 1443

Min LED -strip har 150 lysdioder. Disse kontrolleres i grupper af treere. Det betyder, at jeg ikke kan styre hver LED individuelt, og jeg skal sende tilstrækkelig information til at styre 50.

Hvis din LED har mere eller mindre, kan du tilsidesætte antallet af LED'er, du kontrollerer, ved at indtaste en parameter til opstart. For eksempel hvis du kun kan styre 10 lysdioder

sudo npm start 10

Hovedserverkoden findes i filen app.js. Denne fil starter HTTPS -webserveren og tilføjer også på socket.io for at lytte efter websocket -anmodninger på den samme port.

For at få adgang til webstedet skal du åbne en webbrowser på din hovedcomputer (jeg har kun testet dette i Chrome) og bruge IP -adressen på Raspberry Pi, f.eks.

10.0.1.2/

Du kan finde ud af din IP -adresse fra kommandolinjen Raspberry Pi.

ifconfig

Webserveren serverer alt indhold under den offentlige mappe. Det er som standard at vise index.html -siden.

Det har et API -slutpunkt - /api /audio. Dette slutpunkt leder efter eventuelle 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"]

Hvis du vil tilføje musik som en mulighed, skal du kopiere filer til denne mappe. Jeg bruger personligt Filezilla over ssh. Den mappe, du vil tilføje filer til, er /opt/com.jonhaydock/disco-pi/public/audio

Trin 7: Webstedskode

Webstedskode
Webstedskode

Når du rammer webstedet, skal du se sådan noget.

Hvis du ser en sikkerhedsadvarsel, skyldes det, at vi bruger et selvsigneret SSL-certifikat. Du kan ignorere det eller tilføje det som en undtagelse.

Når du vælger et filnavn, er kilden til HTML 5 -lydelementet. vil blive indstillet til den fil. Når den er klar, begynder musikken at spille. Når sangen er færdig stopper musikken.

Hvis du vælger indstillingen Ingen, stopper musikken med at afspille.

Mens musikfilen afspilles, bruger websiden AudioContext -grænsefladen til at analysere musikken, som derefter sendes til serveren via en sikker websocketforbindelse.

Meddelelsen er den type, som socket.io på serveren er konfigureret til at lytte efter "ws2811". Den indeholder en matrix med 50 elementer, som er mellem 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 bruger Node RPI WS281x native -biblioteket (indpakning af Jeremy Garffs WS281X -bibliotek) til at ændre farverne på lysdioderne på en WS2811 LED -strip, baseret på de data, der sendes via websocket.

Trin 8: Endelig

Image
Image

Du bør se lysdioderne på stripen ændre farve med musikken, baseret på den hurtige Fourier Transform -analyse udført på websiden.

Jeg håber, at du nyder dette. Lad mig vide, hvad du gør med det!

BEMÆRK: Hvis du har problemer

Da dette bibliotek og den indbyggede Raspberry Pi -lyd både bruger PWM, kan de ikke bruges sammen.

Du skal muligvis sortliste Broadcom-lydkernemodulet ved at oprette en fil /etc/modprobe.d/snd-blacklist.conf med

sortliste snd_bcm2835

Hvis lydenheden stadig indlæses efter sortliste, skal du muligvis også kommentere den i filen /etc /modules. På hovedløse systemer kan det også være nødvendigt at tvinge lyd gennem hdmi

Rediger config.txt og tilføj:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

En genstart er påkrævet for at denne ændring træder i kraft

Anbefalede: