Inhoudsopgave:

Disco-pi: 8 stappen (met afbeeldingen)
Disco-pi: 8 stappen (met afbeeldingen)

Video: Disco-pi: 8 stappen (met afbeeldingen)

Video: Disco-pi: 8 stappen (met afbeeldingen)
Video: Kleuters op familiefeest 😂 2024, Juli-
Anonim
discotheek
discotheek

Deze instructable laat zien hoe je een Raspberry Pi gebruikt om een gekleurde LED-strip te bedienen, gebaseerd op muziek die wordt afgespeeld vanuit een webbrowser.

Het laat zien hoe u een basiswebsite kunt maken met Node.js via HTTPS en socket.io via WSS (Secure Websocket).

De website heeft een enkele pagina die een zeer eenvoudige lay-out heeft. De webpagina vult een vervolgkeuzelijst met muziekbestanden, die zich in de openbare/audiomap op de server bevinden. Als u een optie in de lijst selecteert, wordt het muziekbestand op de webpagina afgespeeld met behulp van het HTML 5-audio-element. Tijdens het afspelen van het muziekbestand gebruikt de webpagina de AudioContext-interface om de muziek te analyseren, die vervolgens via een beveiligde websocket-verbinding naar de server wordt verzonden.

De server die op een Raspberry Pi draait, gebruikt de Node RPI WS281x Native-bibliotheek (die de WS281X-bibliotheek van Jeremy Garff verpakt) om de kleuren van de LED's op een WS2811 LED-strip te veranderen, op basis van de gegevens die via de websocket worden verzonden.

De voorbeeldcode is hier te vinden: disco-pi

Stap 1: Apparatuur

  1. Raspberry Pi - Ik gebruikte een Raspberry Pi 2B die ik had liggen, maar je kunt een Raspberry Pi 3 Starter Kit krijgen voor ongeveer CAD 100
  2. WS2811 LED Strip - Ik speelde met ALITOVE 16.4ft 150 Pixels WS2811. Deze wordt geleverd met een controller en een voeding voor ongeveer CAD 45-50
  3. Barrel Jack Connector - Ik heb er een gekocht bij mijn plaatselijke elektronicawinkel, zoiets als dit. Zorg er wel voor dat het bij uw voeding past!
  4. Jumper Connectors / Wire - Ik had een aantal Female naar Male connectorkabels en een aantal 22 Gauge Solid hook-up draad rondslingeren

Stap 2: De Raspberry Pi instellen

Besturingssysteem

Ik gebruik normaal gesproken de nieuwste Raspbian-build. Download de afbeelding en schrijf deze naar de SD-kaart. Als u een Windows-computer gebruikt, kunt u Win32 Disk Imager gebruiken om de afbeelding naar de SD-kaart te schrijven.

Node.js

Installeer de nieuwste versie van Node.js. Op het moment van schrijven gebruik ik 8.9.1

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

sudo apt-get install nodejs

Git installeren

sudo apt-get install git

Stap 3: De voorbeeldcode instellen

Kloon de voorbeeldcode

1. Stel een basismap in om in te installeren:

cd /opt

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

2. Kloon de voorbeeld-git-repository

git kloon

of

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

3. Installeer de afhankelijkheden

cd disco-pi

npm installeren

Dit kan 2-3 minuten duren

Stap 4: Maak een zelfondertekend SSL-certificaat

1. Maak een privésleutelbestand aan

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

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

2. Maak een CSR (Certificate Signing Request)

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

Op dit punt wordt u gevraagd om wat informatie voor de certificaataanvraag. Aangezien dit een zelfondertekend certificaat is, bepaalt u zelf hoe nauwkeurig u de gegevens invult. Hier is een voorbeeld

Landnaam (2-letterige code) [AU]:CA

Naam staat of provincie (volledige naam) [Some-State]:British Columbia Plaatsnaam (bijv. stad) :Vancouver Organization Name (bijv. bedrijf) [Internet Widgits Pty Ltd]:Disco Pi Organizational Unit Name (bijv. sectie) : Algemene naam (bijv. server FQDN of UW naam) :disco-pi E-mailadres :[email protected] Een uitdagingswachtwoord : Een optionele bedrijfsnaam :

In dit voorbeeld drukt u gewoon op Return om het uitdagingswachtwoord leeg te laten

3. Genereer het certificaat

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Voor extra veiligheid zullen we ook een Diffie Hellman Parameters-bestand maken

openssl dhparam -out dh_2048.pem 2048

Dit kan 15-20 minuten duren

Stap 5: De hardware aansluiten

De hardware aansluiten
De hardware aansluiten
De hardware aansluiten
De hardware aansluiten
De hardware aansluiten
De hardware aansluiten
De hardware aansluiten
De hardware aansluiten

De LED-strip van stroom voorzien

De ledstrip wordt gevoed door 12 volt. De Raspberry Pi is alleen in staat om 3,3v of 5v uit te voeren en is niet in staat om ergens in de buurt van de versterkers te komen die nodig zijn om zoveel LED's aan te sturen.

Het is belangrijk om de 12 volt voeding niet op de Raspberry Pi aan te sluiten.

Mijn strip had ook aan beide uiteinden extra stroomdraden die op de strip waren aangesloten. Ik stel voor dat u deze vastplakt zodat ze geen contact maken met uw andere apparatuur.

Voer de volgende stappen op eigen risico uit. Ik neem geen verantwoordelijkheid voor iets dat mis kan gaan.

Loden strip

Mijn ledstrip heeft drie draden:

ROOD - +12 Volt

ZWART - Grond

GROEN - Gegevens

LET OP: er is een Din en een Dout - Data In en Data Out. Zorg ervoor dat u werkt met het uiteinde van de LED-strip waarop Din staat.

Ervoor zorgen dat de Barrel Jack niet is aangesloten op de voeding

1. Sluit de rode draad van de LED-strip aan op de + kant van de Barrel Jack.

Ik gebruikte een witte 22 gauge aansluitdraad.

Plaats de draad in de + sleuf in de cilinderaansluiting en schroef deze op zijn plaats.

Duw het andere uiteinde van de draad in de aansluiting op de LED. Zorg ervoor dat u verbinding maakt met de rode draad.

2. Sluit de zwarte draad van de LED strip aan op de - kant van de Barrel Jack.

Ik gebruikte een zwarte 22 gauge aansluitdraad.

Plaats de draad in de - gleuf in de cilinderaansluiting. Plaats op dit punt ook het mannelijke uiteinde van een van de connectorkabels (bruine draad op de foto) in hetzelfde gat en schroef ze allebei op hun plaats.

Duw het andere uiteinde van de zwarte draad in de aansluiting op de LED.

Zorg ervoor dat u verbinding maakt met de zwarte draad.

3. Sluit de groene draad van de ledstrip aan

Neem een van de vrouwelijke naar mannelijke connectorkabels. In mijn foto's is dit de groene draad.

Plaats het mannelijke uiteinde in de LED-aansluiting met de groene draad.

Dit is de datakabel.

Raspberry Pi

1. Pak de groene aansluitkabel en sluit deze aan op de Raspberry Pi GPIO.

Je moet hem aansluiten op de PCM_CLK (Pin 12 / GPIO 18)

2. Pak de zwarte aansluitkabel en sluit deze aan op de Raspberry Pi GPIO.

Je moet hem aansluiten op een van de gronden. Ik stel voor dat je pin 14 gebruikt, maar je kunt ook pin 6, 9, 20, 25, 30, 34 of 39 gebruiken.

OPMERKING: om dit te laten werken, moeten de LED-stroombron en de Raspberry Pi een gemeenschappelijke aarde hebben. Let er ook op dat je de 12 Volt+ (Rode draad) niet op de Raspberry Pi mag aansluiten.

LED-voeding

Je zou niet in staat moeten zijn om je 12 volt voeding aan te sluiten op de barrel jack

Alle LED's op uw LED-strip zouden nu WIT moeten oplichten

Stap 6: Server-side code

De server-side code uitvoeren

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Hierdoor wordt de webserver opgestart en wordt er geluisterd naar HTTPS- en WSS-verzoeken.

De standaardpoort is 443, maar u kunt dit overschrijven door een omgevingsvariabele in te stellen voordat u de code start. Bijvoorbeeld

exporteren DISCO_PI_PORT=1443

Mijn ledstrip heeft 150 leds. Deze worden in groepjes van drie gecontroleerd. Dit betekent dat ik niet elke LED afzonderlijk kan aansturen en dat ik voldoende informatie moet doorsturen om er 50 te kunnen bedienen.

Als uw LED meer of minder heeft, kunt u het aantal LED's dat u bestuurt overschrijven door een parameter door te geven aan de opstart. Als u bijvoorbeeld slechts 10 LED's kunt bedienen

sudo npm start 10

De hoofdservercode is te vinden in het app.js-bestand. Dit bestand start de HTTPS-webserver en voegt ook socket.io toe om te luisteren naar websocket-verzoeken op dezelfde poort.

Om toegang te krijgen tot de website, moet u een webbrowser openen op uw hoofdcomputer (ik heb dit alleen in Chrome getest) en het IP-adres van de Raspberry Pi gebruiken, b.v.

10.0.1.2/

U kunt uw IP-adres achterhalen via de Raspberry Pi-opdrachtregel.

ifconfig

De webserver zal alle inhoud onder de openbare map weergeven. Standaard wordt de pagina index.html weergegeven.

Het heeft één API-eindpunt - /api/audio. Dit eindpunt zoekt naar bestanden in de map public/audio en retourneert de lijst. Bijvoorbeeld

["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 muziek als optie toe te voegen, kopieert u bestanden naar deze map. Persoonlijk gebruik ik Filezilla via ssh. De map waaraan u bestanden wilt toevoegen is /opt/com.jonhaydock/disco-pi/public/audio

Stap 7: Websitecode

Websitecode
Websitecode

Als je op de website komt, zou je zoiets moeten zien.

Als u een beveiligingswaarschuwing ziet, komt dit omdat we een zelfondertekend SSL-certificaat gebruiken. U kunt het negeren of als uitzondering toevoegen.

Bij het selecteren van een bestandsnaam, de bron voor het HTML 5-audio-element. zal worden ingesteld op dat bestand. Als je klaar bent, begint de muziek te spelen. Zodra het nummer is afgelopen, stopt de muziek.

Als u de optie Geen selecteert, stopt de muziek met spelen.

Tijdens het afspelen van het muziekbestand gebruikt de webpagina de AudioContext-interface om de muziek te analyseren, die vervolgens via een beveiligde websocket-verbinding naar de server wordt verzonden.

Het bericht is van het type dat de socket.io op de server is ingesteld om te luisteren naar "ws2811". Het bevat een array van 50 elementen, die tussen 0 en 255 liggen.

"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}

De server gebruikt de Node RPI WS281x Native-bibliotheek (die de WS281X-bibliotheek van Jeremy Garff verpakt) om de kleuren van de LED's op een WS2811 LED-strip te wijzigen, op basis van de gegevens die via de websocket worden verzonden.

Stap 8: Eindelijk

Image
Image

Je zou de LED's op de strip van kleur moeten zien veranderen met de muziek, gebaseerd op de Fast Fourier Transform-analyse die op de webpagina is uitgevoerd.

Ik hoop dat u hiervan geniet. Laat me weten wat je ermee doet!

OPMERKING: Als u problemen heeft:

Aangezien deze bibliotheek en de ingebouwde Raspberry Pi-audio beide de PWM gebruiken, kunnen ze niet samen worden gebruikt.

Mogelijk moet u de Broadcom-audiokernelmodule op de zwarte lijst zetten door een bestand /etc/modprobe.d/snd-blacklist.conf te maken met

zwarte lijst snd_bcm2835

Als het audioapparaat nog steeds wordt geladen nadat het op de zwarte lijst is geplaatst, moet u mogelijk ook commentaar geven in het bestand /etc/modules. Op headless-systemen moet u mogelijk ook audio via HDMI

Bewerk config.txt en voeg toe:

hdmi_force_hotplug=1

hdmi_force_edid_audio=1

Opnieuw opstarten is vereist om deze wijziging door te voeren

Aanbevolen: