Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
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
- 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
- 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
- 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!
- 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 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
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
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