Cuprins:

Disco-pi: 8 pași (cu imagini)
Disco-pi: 8 pași (cu imagini)

Video: Disco-pi: 8 pași (cu imagini)

Video: Disco-pi: 8 pași (cu imagini)
Video: Marish - Dacă n-ai o moldoveancă | Official Music Video 2024, Iulie
Anonim
Disco-pi
Disco-pi

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

  1. 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
  2. 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
  3. 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
  4. 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

Conectarea hardware-ului
Conectarea hardware-ului
Conectarea hardware-ului
Conectarea hardware-ului
Conectarea hardware-ului
Conectarea hardware-ului
Conectarea hardware-ului
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

Codul site-ului web
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ă

Image
Image

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: