Taula de continguts:

Discopi: 8 passos (amb imatges)
Discopi: 8 passos (amb imatges)

Vídeo: Discopi: 8 passos (amb imatges)

Vídeo: Discopi: 8 passos (amb imatges)
Vídeo: ПИРОЖОК. МЯСО с КАРТОШКОЙ. КАЗАН КЕБАБ. Рецепт. Одесса. ENG SUB 2024, Desembre
Anonim
Disc-pi
Disc-pi

Aquest instructiu mostra com utilitzar un Raspberry Pi per controlar una tira LED de colors, basada en la música reproduïda des d’un navegador web.

Mostra com crear un lloc web bàsic mitjançant Node.js a través d’HTTPS i utilitzar socket.io a través de WSS (Secure Websocket).

El lloc web té una sola pàgina amb un disseny molt bàsic. La pàgina web omple una llista desplegable amb fitxers de música, que es troben a la carpeta pública / d'àudio del servidor. Si seleccioneu una opció a la llista, es reproduirà el fitxer de música a la pàgina web mitjançant l'element d'àudio HTML 5. Mentre es reprodueix el fitxer de música, la pàgina web utilitza la interfície AudioContext per analitzar la música, que després s’envia al servidor mitjançant una connexió de port de xarxa segur.

El servidor que s’executa en un Raspberry Pi utilitza la biblioteca Native RPI WS281x Native (que embolcalla la biblioteca WS281X de Jeremy Garff) per canviar els colors dels LEDs d’una tira LED WS2811, en funció de les dades enviades a través del portal web.

El codi d'exemple es pot trobar aquí: disco-pi

Pas 1: equipament

  1. Raspberry Pi: he utilitzat un Raspberry Pi 2B que tenia al voltant, però podeu obtenir un kit d’inici Raspberry Pi 3 per aproximadament 100 CAD
  2. Cinta LED WS2811: jugava amb ALITOVE 16,4 peus i 150 píxels WS2811. Això ve amb un controlador i una font d'alimentació per aproximadament 45-50 CAD
  3. Connector Jack Barrel: en vaig comprar un a la meva botiga d’electrònica local, una cosa així. Assegureu-vos si s’adapta a la vostra font d’alimentació
  4. Connectors de pont / filferro: tenia alguns cables de connectors de femella a mascle i uns cables de connexió sòlids de calibre 22 que estaven al voltant

Pas 2: Configuració del Raspberry Pi

Sistema operatiu

Normalment faig servir la versió més recent de Raspbian. Descarregueu la imatge i escriviu-la a la targeta SD. Si utilitzeu un ordinador Windows, podeu utilitzar Win32 Disk Imager per escriure la imatge a la targeta SD.

Node.js

Instal·leu la versió més recent de Node.js. En el moment d’escriure, estic fent servir 8.9.1

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

sudo apt-get install nodejs

Instal·leu git

sudo apt-get install git

Pas 3: Configuració del codi d'exemple

Cloneu el codi d'exemple

1. Configureu una carpeta base per instal·lar-la

cd / opt

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

2. Cloneu el repositori d'exemple git

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

o bé

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

3. Instal·leu les dependències

cd disco-pi

Instal·lació de npm

Això pot trigar 2-3 minuts

Pas 4: creeu un certificat SSL autofirmat

1. Creeu un fitxer de clau privada

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

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

2. Creeu una CSR (Sol·licitud de signatura de certificats)

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

En aquest moment se us demanarà informació sobre la sol·licitud de certificat. Com que es tracta d’un certificat autofirmat, depèn de la precisió que empleneu les dades. Aquí en teniu un exemple

Nom del país (codi de 2 lletres) [AU]: CA

Nom de l'estat o província (nom complet) [Alguns estats]: British Columbia Nom de la localitat (per exemple, ciutat) : Nom de l'organització de Vancouver (per exemple, empresa) [Internet Widgits Pty Ltd]: Nom de la unitat organitzativa Disco Pi (per exemple, secció) : Nom comú (per exemple, nom de domini general del servidor o el vostre nom) : disco-pi Adreça de correu electrònic : [email protected] Una contrasenya de desafiament : un nom d'empresa opcional :

En aquest exemple, només cal prémer Retorn per deixar en blanc la contrasenya de desafiament

3. Generar el certificat

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

4. Per a més seguretat, també crearem un fitxer de Paràmetres Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Això pot trigar entre 15 i 20 minuts

Pas 5: Connexió del maquinari

Connexió del maquinari
Connexió del maquinari
Connexió del maquinari
Connexió del maquinari
Connexió del maquinari
Connexió del maquinari
Connexió del maquinari
Connexió del maquinari

Alimentació de la tira LED

La tira LED funciona amb 12 volts. El Raspberry Pi només és capaç de generar 3,3v o 5v i no és capaç de sortir a prop dels amplificadors necessaris per conduir tants LED.

És important no connectar la font d'alimentació de 12 volts al Raspberry Pi.

La meva tira també tenia cables d’alimentació addicionals connectats a la banda a cada extrem. Us suggereixo que enregistreu-los perquè no entrin en contacte amb cap altre equip.

Realitzeu els passos següents sota el vostre propi risc. No assumeixo cap responsabilitat per qualsevol cosa que pugui sortir malament.

Tira LED

La meva tira LED té tres cables:

VERMELL - +12 volts

NEGRE: terra

VERD: dades

NOTA: hi ha un Din i un Dout - Data In i Data Out. Assegureu-vos que esteu treballant amb l'extrem de la tira LED que diu Din.

Assegureu-vos que el Barrel Jack no està connectat a la font d'alimentació

1. Connecteu el cable vermell de la tira LED al costat + del barril Jack.

Vaig fer servir un cable de connexió de calibre 22 blanc.

Col·loqueu el cable a la ranura + de la presa del canó i enrosqueu-lo al seu lloc.

Introduïu l’altre extrem del cable al sòcol del LED. Assegureu-vos que us connecteu amb el cable vermell.

2. Connecteu el cable negre de la tira LED al costat de la presa de barril.

He utilitzat un filferro negre de calibre 22.

Col·loqueu el cable a la ranura - de la presa del canó. En aquest punt, col·loqueu també l'extrem mascle d'un dels cables del connector (fil marró a la foto) al mateix forat i enrosqueu-los tots al lloc.

Introduïu l’altre extrem del cable negre a la presa del LED.

Assegureu-vos que us connecteu amb el cable negre.

3. Connecteu el cable verd de la tira LED

Agafeu un dels cables del connector femal a mascle. A les meves fotos aquest és el fil verd.

Col·loqueu l'extrem mascle a la presa LED amb el fil verd.

Aquest és el cable de dades.

Raspberry Pi

1. Agafeu el cable de connector verd i connecteu-lo al Raspberry Pi GPIO.

Cal connectar-lo al PCM_CLK (pin 12 / GPIO 18)

2. Agafeu el cable del connector negre i connecteu-lo al Raspberry Pi GPIO.

Cal connectar-lo a un dels motius. Us suggereixo que feu servir el pin 14, però també podeu utilitzar el pin 6, 9, 20, 25, 30, 34 o 39.

NOTA: perquè això funcioni, la font d'alimentació LED i el Raspberry Pi han de tenir un punt comú. Tingueu en compte també que no heu de connectar el cable de 12 volts + (cable vermell) al Raspberry Pi.

Alimentació LED

No hauríeu de poder connectar la font d'alimentació de 12 volts a la presa de barril

Ara tots els LEDs de la tira LED haurien d’il·luminar-se EN BLANC

Pas 6: Codi del servidor

Execució del codi del servidor

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Això iniciarà el servidor web i començarà a escoltar les sol·licituds HTTPS i WSS.

El port per defecte és 443, però podeu substituir-lo establint una variable d'entorn abans d'iniciar el codi. Per exemple

exportació DISCO_PI_PORT = 1443

La meva tira LED té 150 LED. Aquests es controlen en grups de tres. Això vol dir que no puc controlar tots els LEDs individualment i que he d’enviar prou informació per controlar-ne 50.

Si el vostre LED té més o menys, podeu anul·lar el nombre de LEDs que controleu passant un paràmetre a l'inici. Per exemple, si només podeu controlar 10 LED

sudo npm start 10

El codi del servidor principal es troba al fitxer app.js. Aquest fitxer inicia el servidor web HTTPS i també afegeix a socket.io per escoltar les sol·licituds de websocket al mateix port.

Per accedir al lloc web, heu d’obrir un navegador web a l’ordinador principal (només ho he provat a Chrome) i utilitzar l’adreça IP del Raspberry Pi, per exemple.

10.0.1.2/

Podeu trobar la vostra adreça IP a la línia d’ordres de Raspberry Pi.

ifconfig

El servidor web publicarà qualsevol contingut a la carpeta pública. Per defecte es mostra la pàgina index.html.

Té un punt final API: / api / audio. Aquest punt final busca qualsevol fitxer de la carpeta pública / àudio i torna la llista. Per exemple

["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"]

Per afegir música com a opció, copieu fitxers a aquesta carpeta. Personalment faig servir Filezilla sobre ssh. La carpeta a la qual voleu afegir fitxers és /opt/com.jonhaydock/disco-pi/public/audio

Pas 7: Codi del lloc web

Codi del lloc web
Codi del lloc web

Quan visiteu el lloc web, hauríeu de veure alguna cosa així.

Si veieu un advertiment de seguretat, és perquè utilitzem un certificat SSL autosignat. Podeu ignorar-lo o afegir-lo com a excepció.

En seleccionar un nom de fitxer, la font de l'element d'àudio HTML 5. es definirà en aquest fitxer. Un cop llesta, la música començarà a sonar. Un cop acabada la cançó, la música s'aturarà.

Si seleccioneu l'opció Cap, la música deixarà de reproduir-se.

Mentre es reprodueix el fitxer de música, la pàgina web utilitza la interfície AudioContext per analitzar la música, que després s’envia al servidor mitjançant una connexió de port de xarxa segur.

El missatge és del tipus que s'ha configurat el socket.io al servidor per escoltar "ws2811". Conté una matriu de 50 elements, entre 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}

El servidor utilitza la biblioteca Native RPI WS281x Native (que empaqueta la biblioteca WS281X de Jeremy Garff) per canviar els colors dels LEDs en una tira LED WS2811, en funció de les dades enviades a través del portal web.

Pas 8: Finalment

Image
Image

Hauríeu de veure que els LED de la tira canvien de color amb la música, basant-se en l’anàlisi de la transformada de Fourier ràpida feta a la pàgina web.

Espero que us agradi això. Feu-me saber què en feu.

NOTA: Si teniu algun problema

Atès que aquesta biblioteca i l’àudio integrat de Raspberry Pi fan servir PWM, no es poden utilitzar junts.

És possible que hàgiu de fer una llista negra del mòdul del nucli d’àudio Broadcom creant un fitxer /etc/modprobe.d/snd-blacklist.conf amb

llista negra snd_bcm2835

Si el dispositiu d'àudio es continua carregant després de la llista negra, també pot ser que hagueu de comentar-lo al fitxer / etc / modules. En sistemes sense capçalera, és possible que també hàgiu de forçar l’àudio a través del HDMI

Editeu config.txt i afegiu:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Cal que es reiniciï perquè aquest canvi tingui efecte

Recomanat: