Tabla de contenido:

Disco-pi: 8 pasos (con imágenes)
Disco-pi: 8 pasos (con imágenes)

Video: Disco-pi: 8 pasos (con imágenes)

Video: Disco-pi: 8 pasos (con imágenes)
Video: Paso 8: Baile con los pies. Aprende con todos los pasos Sencillos pero Efectivos 🔥🔥🔥🥳 2024, Noviembre
Anonim
Disco-pi
Disco-pi

Este instructivo muestra cómo usar una Raspberry Pi para controlar una tira de LED de colores, basada en la música reproducida desde un navegador web.

Muestra cómo crear un sitio web básico usando Node.js sobre HTTPS y usar socket.io sobre WSS (Secure Websocket).

El sitio web tiene una sola página que tiene un diseño muy básico. La página web llena una lista desplegable con archivos de música, que se encuentran en la carpeta pública / audio del servidor. Al seleccionar una opción en la lista, se reproduce el archivo de música en la página web utilizando el elemento de audio HTML 5. Mientras se reproduce el archivo de música, la página web utiliza la interfaz AudioContext para analizar la música, que luego se envía al servidor a través de una conexión websocket segura.

El servidor que se ejecuta en una Raspberry Pi utiliza la biblioteca Node RPI WS281x Native (que envuelve la biblioteca WS281X de Jeremy Garff) para cambiar los colores de los LED en una tira de LED WS2811, según los datos enviados a través del websocket.

El código de ejemplo se puede encontrar aquí: disco-pi

Paso 1: Equipo

  1. Raspberry Pi: utilicé una Raspberry Pi 2B que tenía por ahí, pero puede obtener un kit de inicio de Raspberry Pi 3 por alrededor de CAD 100
  2. Tira de LED WS2811 - Estaba jugando con ALITOVE 16.4ft 150 Pixels WS2811. Viene con un controlador y una fuente de alimentación por aproximadamente CAD 45-50
  3. Conector de barril: compré uno en mi tienda de electrónica local, algo como esto. Solo asegúrese de que se ajuste a su fuente de alimentación
  4. Conectores de puente / cable: tenía algunos cables de conector hembra a macho y un cable de conexión sólido de calibre 22 por ahí

Paso 2: Configurar la Raspberry Pi

Sistema operativo

Normalmente uso la última versión de Raspbian. Descarga la imagen y escríbela en la tarjeta SD. Si está usando una computadora con Windows, puede usar Win32 Disk Imager para escribir la imagen en la tarjeta SD.

Node.js

Instale la última versión de Node.js. En el momento de escribir este artículo, estoy usando 8.9.1

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

sudo apt-get install nodejs

Instalar git

sudo apt-get install git

Paso 3: Configuración del código de ejemplo

Clonar el código de ejemplo

1. Configure una carpeta base para instalar en

cd / opt

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

2. Clonar el repositorio de git de ejemplo

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

o

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

3. Instale las dependencias

cd disco-pi

npm install

Esto puede tardar entre 2 y 3 minutos.

Paso 4: cree un certificado SSL autofirmado

1. Cree un archivo de clave privada

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

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

2. Cree una CSR (solicitud de firma de certificado)

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

En este punto, se le pedirá información para la solicitud de certificado. Como se trata de un certificado autofirmado, depende de usted la precisión con la que complete los detalles. Aquí hay un ejemplo

Nombre del país (código de 2 letras) [AU]: CA

Nombre del estado o provincia (nombre completo) [Algún estado]: Nombre de la localidad de Columbia Británica (por ejemplo, ciudad) : Nombre de la organización de Vancouver (por ejemplo, empresa) [Internet Widgits Pty Ltd]: Nombre de la unidad organizativa de Disco Pi (por ejemplo, sección) : Nombre común (p. Ej. FQDN del servidor o SU nombre) : disco-pi Dirección de correo electrónico : [email protected] Una contraseña de seguridad : Un nombre de empresa opcional :

En este ejemplo, simplemente presione retorno para dejar la contraseña de desafío en blanco

3. Genere el certificado

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

4. Para mayor seguridad, también crearemos un archivo de parámetros Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Esto puede tardar entre 15 y 20 minutos.

Paso 5: Conexión del hardware

Conexión del hardware
Conexión del hardware
Conexión del hardware
Conexión del hardware
Conexión del hardware
Conexión del hardware
Conexión del hardware
Conexión del hardware

Encender la tira de LED

La tira de LED funciona con 12 voltios. La Raspberry Pi solo es capaz de producir 3.3v o 5v y no es capaz de producir en ningún lugar cerca de los amperios necesarios para impulsar tantos LED.

Es importante no conectar la fuente de alimentación de 12 voltios a la Raspberry Pi.

Mi tira también tenía cables de alimentación adicionales conectados a la tira en cada extremo. Le sugiero que las pegue con cinta adhesiva para que no entren en contacto con ninguno de sus otros equipos.

Realice los siguientes pasos bajo su propia responsabilidad. No me hago responsable de nada que pueda salir mal.

Tira llevada

Mi tira de LED tiene tres cables:

ROJO - +12 voltios

NEGRO - Tierra

VERDE - Datos

NOTA: hay un Din y un Dout - Entrada y salida de datos. Asegúrese de estar trabajando con el extremo de la tira de LED que dice Din.

Asegurarse de que el Barrel Jack no esté conectado a la fuente de alimentación

1. Conecte el cable rojo de la tira de LED al lado + del conector de barril.

Usé un cable de conexión blanco de calibre 22.

Coloque el cable en la ranura + del gato de barril y atorníllelo en su lugar.

Empuje el otro extremo del cable en el zócalo del LED. Asegúrese de conectarse con el cable rojo.

2. Conecte el cable negro de la tira de LED al lado - del conector de barril.

Usé un cable de conexión negro de calibre 22.

Coloque el cable en la ranura - del gato de barril. En este punto también coloque el extremo macho de uno de los cables conectores (cable marrón en la foto) en el mismo orificio y atorníllelos en su lugar.

Empuje el otro extremo del cable negro en el zócalo del LED.

Asegúrese de conectarse con el cable negro.

3. Conecte el cable verde de la tira de LED

Tome uno de los cables de conector hembra a macho. En mis fotos, este es el cable verde.

Coloque el extremo macho en el enchufe LED con el cable verde.

Este es el cable de datos.

Frambuesa pi

1. Tome el cable conector verde y conéctelo a la Raspberry Pi GPIO.

Debe conectarlo al PCM_CLK (Pin 12 / GPIO 18)

2. Tome el cable conector negro y conéctelo a la Raspberry Pi GPIO.

Debe conectarlo a uno de los terrenos. Le sugiero que use el pin 14, pero también podría usar el pin 6, 9, 20, 25, 30, 34 o 39.

NOTA: para que esto funcione, la fuente de alimentación LED y la Raspberry Pi deben tener un terreno común. También tenga en cuenta que no debe conectar el 12 Volt + (cable rojo) a la Raspberry Pi.

LED de potencia

No debería poder conectar su fuente de alimentación de 12 voltios al conector de barril

Todos los LED de su tira de LED ahora deberían iluminarse en BLANCO

Paso 6: Código del lado del servidor

Ejecutando el código del lado del servidor

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Esto iniciará el servidor web y comenzará a escuchar solicitudes HTTPS y WSS.

El puerto predeterminado es 443, pero puede anularlo configurando una variable de entorno antes de iniciar el código. Por ejemplo

exportar DISCO_PI_PORT = 1443

Mi tira de LED tiene 150 LED. Estos se controlan en grupos de tres. Esto significa que no puedo controlar cada LED individualmente y necesito enviar suficiente información para controlar 50.

Si su LED tiene más o menos, puede anular el número de LED que está controlando pasando un parámetro al inicio. Por ejemplo, si solo puede controlar 10 LED

sudo npm start 10

El código del servidor principal se puede encontrar en el archivo app.js. Este archivo inicia el servidor web HTTPS y también agrega socket.io para escuchar las solicitudes de websocket en el mismo puerto.

Para acceder al sitio web, debe abrir un navegador web en su computadora principal (solo lo he probado en Chrome) y usar la dirección IP de la Raspberry Pi, p. Ej.

10.0.1.2/

Puede averiguar su dirección IP desde la línea de comando de Raspberry Pi.

ifconfig

El servidor web servirá cualquier contenido en la carpeta pública. De forma predeterminada, muestra la página index.html.

Tiene un punto final de API: / api / audio. Este punto final busca cualquier archivo en la carpeta public / audio y devuelve la lista. Por ejemplo

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "Esto es lo que viniste a buscar (con Rihanna).mp3"]

Para agregar música como una opción, copie los archivos a esta carpeta. Yo personalmente uso Filezilla sobre ssh. La carpeta a la que desea agregar archivos es /opt/com.jonhaydock/disco-pi/public/audio

Paso 7: Código del sitio web

Código del sitio web
Código del sitio web

Cuando acceda al sitio web, debería ver algo como esto.

Si ve una advertencia de seguridad, es porque estamos usando un certificado SSL autofirmado. Puede ignorarlo o agregarlo como una excepción.

Al seleccionar un nombre de archivo, la fuente del elemento de audio HTML 5. se establecerá en ese archivo. Una vez que esté listo, la música comenzará a sonar. Una vez que la canción haya terminado, la música se detendrá.

Si selecciona la opción Ninguno, la música dejará de reproducirse.

Mientras se reproduce el archivo de música, la página web utiliza la interfaz AudioContext para analizar la música, que luego se envía al servidor a través de una conexión websocket segura.

El mensaje es del tipo que el socket.io en el servidor se ha configurado para escuchar "ws2811". Contiene una matriz de 50 elementos, que están entre 0 y 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 utiliza la biblioteca nativa Node RPI WS281x (que envuelve la biblioteca WS281X de Jeremy Garff) para cambiar los colores de los LED en una tira de LED WS2811, según los datos enviados a través del websocket.

Paso 8: finalmente

Image
Image

Debería ver que los LED de la tira cambian de color con la música, según el análisis de la Transformada rápida de Fourier realizado en la página web.

Espero que disfrutes esto. ¡Déjame saber qué haces con él!

NOTA: Si tiene algún problema

Dado que esta biblioteca y el audio integrado de Raspberry Pi usan PWM, no se pueden usar juntos.

Es posible que deba incluir en la lista negra el módulo del kernel de audio de Broadcom creando un archivo /etc/modprobe.d/snd-blacklist.conf con

lista negra snd_bcm2835

Si el dispositivo de audio todavía se está cargando después de la lista negra, es posible que también deba comentarlo en el archivo / etc / modules. En sistemas sin cabeza, es posible que también deba forzar el audio a través de hdmi

Edite config.txt y agregue:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Es necesario reiniciar para que este cambio surta efecto

Recomendado: