Cuprins:
- Pasul 1: Echipament
- Pasul 2: Configurarea Raspberry Pi
- Pasul 3: Configurarea exemplului de cod
- Pasul 4: Creați un certificat SSL auto-semnat
- Pasul 5: Conectarea hardware-ului
- Pasul 6: Cod lateral server
- Pasul 7: Codul site-ului web
- Pasul 8: În cele din urmă
Video: Disco-pi: 8 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Această instrucțiune arată cum să utilizați un Raspberry Pi pentru a controla o bandă LED colorată, pe baza muzicii redate de pe un browser web.
Arată cum să creați un site web de bază folosind Node.js prin HTTPS și cum utilizați socket.io prin WSS (Secure Websocket).
Site-ul are o singură pagină, care are un aspect foarte simplu. Pagina web completează o listă derulantă cu fișiere muzicale, care se află în folderul public / audio de pe server. Selectarea unei opțiuni din listă redă fișierul muzical din pagina web utilizând elementul audio HTML 5. În timp ce redați fișierul muzical, pagina web folosește interfața AudioContext pentru a analiza muzica, care este apoi trimisă la server printr-o conexiune securizată.
Serverul care rulează pe un Raspberry Pi folosește biblioteca nativă Node RPI WS281x (înfășurând biblioteca WS281X a lui Jeremy Garff) pentru a schimba culorile LED-urilor pe o bandă LED WS2811, pe baza datelor trimise prin priza web.
Exemplul de cod poate fi găsit aici: disco-pi
Pasul 1: Echipament
- Raspberry Pi - Am folosit un Raspberry Pi 2B pe care l-am pus, dar puteți obține un Raspberry Pi 3 Starter Kit pentru aproximativ 100 CAD
- WS2811 LED Strip - Mă jucam cu ALITOVE 16,4ft 150 Pixeli WS2811. Aceasta vine cu un controler și o sursă de alimentare pentru aproximativ 45-50 CAD
- Barrel Jack Connector - Am cumpărat unul de la magazinul meu local de electronice, ceva de genul acesta. Asigurați-vă că se potrivește cu sursa de alimentare
- Conectori jumper / sârmă - am avut niște cabluri de conectare de la mamă la tată și unele sârme de 22 gauge solid conectate în jur
Pasul 2: Configurarea Raspberry Pi
Sistem de operare
În mod normal, folosesc cea mai recentă versiune Raspbian. Descărcați imaginea și scrieți-o pe cardul SD. Dacă utilizați un computer Windows, puteți utiliza Win32 Disk Imager pentru a scrie imaginea pe cardul SD.
Node.js
Instalați cea mai recentă versiune a Node.js. La momentul scrierii, folosesc 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Instalați git
sudo apt-get install git
Pasul 3: Configurarea exemplului de cod
Clonați exemplul de cod
1. Configurați un folder de bază în care să instalați
cd / opt
sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock
2. Clonați exemplul de depozit git
git clone https://github.com/haydockjp/disco-pi.git"
sau
git clone [email protected]: haydockjp / disco-pi.git
3. Instalați dependențele
cd disco-pi
instalare npm
Acest lucru ar putea dura 2-3 minute
Pasul 4: Creați un certificat SSL auto-semnat
1. Creați un fișier cu cheie privată
cd /opt/com.jonhaydock/disco-pi/certs
openssl genrsa -out disco-pi-key.pem 2048
2. Creați un CSR (Cerere de semnare a certificatului)
openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem
În acest moment vi se va solicita câteva informații pentru solicitarea certificatului. Deoarece acesta este un certificat autosemnat, depinde de dvs. cât de precis completați detaliile. Iată un exemplu
Nume țară (cod cu 2 litere) [AU]: CA
Numele statului sau al provinciei (numele complet) [Some-State]: Columbia Britanică Numele localității (de exemplu, oraș) : Denumirea organizației din Vancouver (de exemplu, companie) [Internet Widgits Pty Ltd]: Nume unitate organizațională Disco Pi (de exemplu, secțiune) : Nume comun (de exemplu, FQDN server sau numele TĂU) : disco-pi Adresa de e-mail : [email protected] O parolă de provocare : Un nume de companie opțional :
În acest exemplu, trebuie doar să apăsați pe return pentru a lăsa necompletată parola de provocare
3. Generați certificatul
openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem
4. Pentru o securitate suplimentară, vom crea și un fișier Diffie Hellman Parameters
openssl dhparam -out dh_2048.pem 2048
Acest lucru ar putea dura 15-20 de minute
Pasul 5: Conectarea hardware-ului
Alimentarea benzii LED
Banda LED este alimentată de 12 volți. Raspberry Pi este capabil să producă doar 3.3v sau 5v și nu este capabil să scoată nicăieri lângă amplificatorii necesari pentru a conduce atât de multe LED-uri.
Este important să nu conectați sursa de alimentare de 12 volți la Raspberry Pi.
De asemenea, banda mea avea cabluri de alimentare suplimentare conectate la banda de la ambele capete. Vă sugerez să le înregistrați pentru a nu intra în contact cu niciun alt echipament.
Efectuați pașii următori pe propriul risc. Nu îmi asum responsabilitatea pentru nimic care ar putea merge prost.
Benzi LED
Banda mea LED are trei fire:
ROȘU - +12 volți
NEGRU - Pământ
VERDE - Date
NOTĂ: există un Din și un Dout - Data In și Data Out. Asigurați-vă că lucrați cu capătul benzii LED pe care scrie Din.
Asigurați-vă că mufa Barrel nu este conectată la sursa de alimentare
1. Conectați firul roșu de la banda LED la partea + a mufei barilului.
Am folosit o sârmă albă de 22 de ecartament.
Așezați firul în slotul + din mufa butoiului și înșurubați-l în poziție.
Împingeți celălalt capăt al firului în priza de pe LED. Asigurați-vă că vă conectați cu firul roșu.
2. Conectați firul negru de la banda LED la partea laterală a mufei cu butoi.
Am folosit o sârmă neagră cu cârlig de 22.
Așezați firul în fanta - în mufa cilindrului. În acest moment, așezați și capătul tată al unuia dintre cablurile conectorului (sârmă maro în fotografie) în aceeași gaură și înșurubați-le pe ambele în poziție.
Împingeți celălalt capăt al firului negru în mufa de pe LED.
Asigurați-vă că vă conectați cu firul negru.
3. Conectați firul verde de la banda LED
Luați unul dintre cablurile conectorului femel la mascul. În fotografiile mele acesta este firul verde.
Așezați capătul tată în mufa LED cu firul verde.
Acesta este cablul de date.
Raspberry Pi
1. Luați cablul conectorului verde și conectați-l la Raspberry Pi GPIO.
Trebuie să-l conectați la PCM_CLK (Pin 12 / GPIO 18)
2. Luați cablul conectorului negru și conectați-l la Raspberry Pi GPIO.
Trebuie să-l conectați la unul dintre motive. Vă sugerez să utilizați pinul 14, dar puteți utiliza și pinul 6, 9, 20, 25, 30, 34 sau 39.
NOTĂ: pentru ca acest lucru să funcționeze, sursa de alimentare cu LED și Raspberry Pi trebuie să aibă o bază comună. De asemenea, rețineți că nu trebuie să conectați 12 Volt + (fir roșu) la Raspberry Pi.
Putere LED
Nu ar trebui să puteți conecta sursa de alimentare de 12 volți la mufa baril
Toate LED-urile de pe banda LED ar trebui acum să se aprindă ALB
Pasul 6: Cod lateral server
Rularea codului lateral server
cd /opt/com.jonhaydock/disco-pi
sudo npm start
Aceasta va porni serverul web și va începe să asculte cererile HTTPS și WSS.
Portul implicit este 443, dar puteți suprascrie setând o variabilă de mediu înainte de a porni codul. De exemplu
export DISCO_PI_PORT = 1443
Banda mea de LED-uri are 150 de LED-uri. Acestea sunt controlate în grupuri de trei. Aceasta înseamnă că nu pot controla fiecare LED în mod individual și trebuie să trimit suficiente informații pentru a controla 50.
Dacă LED-ul dvs. are mai mult sau mai puțin, puteți înlocui numărul de LED-uri pe care le controlați trecând un parametru la pornire. De exemplu, dacă puteți controla doar 10 LED-uri
sudo npm începe 10
Codul principal al serverului poate fi găsit în fișierul app.js. Acest fișier pornește serverul web HTTPS și, de asemenea, adaugă pe socket.io pentru a asculta cererile websocket pe același port.
Pentru a accesa site-ul web, ar trebui să deschideți un browser web pe computerul dvs. principal (am testat acest lucru numai în Chrome) și să utilizați adresa IP a Raspberry Pi, de ex.
10.0.1.2/
Puteți afla adresa dvs. IP din linia de comandă Raspberry Pi.
ifconfig
Serverul web va difuza orice conținut din folderul public. Implicit este afișarea paginii index.html.
Are un punct final API - / api / audio. Acest punct final caută orice fișier din folderul public / audio și returnează lista. De exemplu
["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"]
Pentru a adăuga muzică ca opțiune, copiați fișierele în acest folder. Eu personal folosesc Filezilla peste ssh. Dosarul în care doriți să adăugați fișiere este /opt/com.jonhaydock/disco-pi/public/audio
Pasul 7: Codul site-ului web
Când accesați site-ul web, ar trebui să vedeți așa ceva.
Dacă vedeți un avertisment de securitate, acest lucru se datorează faptului că folosim un certificat SSL auto-semnat. Îl puteți ignora sau adăuga ca excepție.
La selectarea unui nume de fișier, sursa pentru elementul audio HTML 5. va fi setat la acel fișier. Odată gata, muzica va începe să se redea. Odată ce melodia a terminat, muzica se va opri.
Dacă selectați opțiunea None, muzica se va opri din redare.
În timp ce redați fișierul muzical, pagina web folosește interfața AudioContext pentru a analiza muzica, care este apoi trimisă la server printr-o conexiune securizată.
Mesajul este tipul în care socket.io de pe server a fost configurat pentru a asculta „ws2811”. Conține o matrice de 50 de elemente, care sunt între 0 și 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}
Serverul folosește biblioteca nativă Node RPI WS281x (înfășurând biblioteca WS281X a lui Jeremy Garff) pentru a schimba culorile LED-urilor pe o bandă LED WS2811, pe baza datelor trimise prin portalul web.
Pasul 8: În cele din urmă
Ar trebui să vedeți LED-urile de pe bandă care își schimbă culoarea odată cu muzica, pe baza analizei Transformatei Fourier rapide efectuată în pagina web.
Sper că vă place acest lucru. Anunță-mă ce faci cu el!
NOTĂ: Dacă aveți probleme
Deoarece această bibliotecă și conținutul audio Raspberry Pi de la bord folosesc atât PWM, nu pot fi utilizate împreună.
Este posibil să trebuiască să înscrieți lista neagră a modulului kernel audio Broadcom prin crearea unui fișier /etc/modprobe.d/snd-blacklist.conf cu
lista neagră snd_bcm2835
Dacă dispozitivul audio se încarcă în continuare după listarea neagră, poate fi necesar să îl comentați în fișierul / etc / modules. Pe sistemele fără cap este posibil să fie necesar să forțați sunetul prin HDMI
Editați config.txt și adăugați:
hdmi_force_hotplug = 1
hdmi_force_edid_audio = 1
Este necesară o repornire pentru ca această modificare să aibă efect
Recomandat:
Portable Disco V2 - LED-uri controlate de sunet: 11 pași (cu imagini)
Portable Disco V2 - LED-uri controlate de sunet: Am parcurs un drum lung cu călătoria mea electronică de când am făcut prima mea discotecă portabilă. În versiunea originală am piratat împreună un circuit pe placa prototip și am reușit să construiesc o discotecă de buzunar îngrijită. De data aceasta mi-am proiectat propriul PCB și
Led Disco Box: 7 pași (cu imagini)
Led Disco Box: Cum să vă creați propria Led Disc Disc
Organizator de birou Disco: 8 pași (cu imagini)
Disco Desktop Organizer: Materiale: triplex, grosime: 3 mm Câte plăci de lemn depinde de cât de mare este tăietorul laser … reglați fișierul pe placa de lemn de dimensiunea maximă … poate aveți nevoie de mai mult de 1 placă (țineți cont de asta). 6 leduri flash (am folosit 7 leduri flash) ava
Disco infinit: 6 pași (cu imagini)
Infinite Disco: În acest proiect, am realizat o oglindă infinită bazată pe un dodecaedru care reacționează la sunet
Disco Drinks Coaster: 4 pași (cu imagini)
Disco Drinks Coaster: Deși locuim chiar lângă Cambridge în Marea Britanie, soția mea este dependentă tragic de toate lucrurile din Las Vegas. Au trecut aproape șase luni de la ultima noastră vizită și ea dorește să obțină lumini puternice și cocktailuri. Puține lucruri fac o băutură mai plăcută decât unele