Índice:

Disco-pi: 8 etapas (com imagens)
Disco-pi: 8 etapas (com imagens)

Vídeo: Disco-pi: 8 etapas (com imagens)

Vídeo: Disco-pi: 8 etapas (com imagens)
Vídeo: COMPRIMENTO DA CIRCUNFERÊNCIA EXERCÍCIOS | \Prof. Gis/ 2024, Novembro
Anonim
Disco-pi
Disco-pi

Este instrutível mostra como usar um Raspberry Pi para controlar uma faixa de LED colorida, com base na música tocada em um navegador da web.

Ele mostra como criar um site básico usando Node.js sobre HTTPS e usar socket.io sobre WSS (Secure Websocket).

O site possui uma página única com um layout bastante básico. A página da web preenche uma lista suspensa com arquivos de música, que estão localizados na pasta pública / áudio no servidor. Selecionar uma opção na lista reproduz o arquivo de música na página da web usando o elemento de áudio HTML 5. Enquanto reproduz o arquivo de música, a página da web usa a interface AudioContext para analisar a música, que é enviada ao servidor por meio de uma conexão segura de websocket.

O servidor em execução em um Raspberry Pi usa a biblioteca Node RPI WS281x Native (envolvendo a biblioteca WS281X de Jeremy Garff) para alterar as cores dos LEDs em uma faixa de LED WS2811, com base nos dados enviados pelo websocket.

O código de exemplo pode ser encontrado aqui: disco-pi

Etapa 1: Equipamento

  1. Raspberry Pi - usei um Raspberry Pi 2B que tinha por perto, mas você pode comprar um Raspberry Pi 3 Starter Kit por cerca de CAD 100
  2. WS2811 LED Strip - Eu estava jogando com ALITOVE 16.4ft 150 Pixels WS2811. Isso vem com um controlador e uma fonte de alimentação para cerca de CAD 45-50
  3. Barrel Jack Connector - comprei um na minha loja de eletrônicos local, algo assim. Apenas certifique-se de que se encaixa na sua fonte de alimentação
  4. Conectores Jumper / Fio - Eu tinha alguns cabos conectores fêmea para macho e alguns fios de ligação sólida de calibre 22 espalhados por aí

Etapa 2: Configurando o Raspberry Pi

Sistema operacional

Eu normalmente uso a versão mais recente do Raspbian. Baixe a imagem e grave-a no cartão SD. Se estiver usando um computador Windows, você pode usar o Win32 Disk Imager para gravar a imagem no cartão SD.

Node.js

Instale a versão mais recente do Node.js. No momento em que estou escrevendo, estou usando 8.9.1

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

sudo apt-get install nodejs

Instale o git

sudo apt-get install git

Etapa 3: Configurando o Código de Exemplo

Clone o código de exemplo

1. Configure uma pasta base para instalar em

cd / opt

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

2. Clone o repositório git de exemplo

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

ou

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

3. Instale as dependências

cd disco-pi

npm install

Isso pode levar de 2 a 3 minutos

Etapa 4: Criar um certificado SSL autoassinado

1. Crie um arquivo de chave privada

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

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

2. Crie um CSR (Solicitação de Assinatura de Certificado)

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

Neste ponto, você será solicitado a fornecer algumas informações para a solicitação do certificado. Como este é um certificado autoassinado, depende de você a precisão do preenchimento dos detalhes. Aqui está um exemplo

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

Nome do estado ou província (nome completo) [algum estado]: Nome da localidade de British Columbia (por exemplo, cidade) : Nome da organização de Vancouver (por exemplo, empresa) [Internet Widgits Pty Ltd]: Nome da unidade organizacional Disco Pi (por exemplo, seção) : Nome comum (por exemplo, FQDN do servidor ou SEU nome) : disco-pi Endereço de e-mail : [email protected] Uma senha de desafio : Um nome de empresa opcional :

Neste exemplo, basta pressionar voltar para deixar a senha de desafio em branco

3. Gere o certificado

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

4. Para segurança extra, também criaremos um arquivo de parâmetros Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Isso pode levar de 15 a 20 minutos

Etapa 5: Conectando o Hardware

Conectando o Hardware
Conectando o Hardware
Conectando o Hardware
Conectando o Hardware
Conectando o Hardware
Conectando o Hardware
Conectando o Hardware
Conectando o Hardware

Alimentação da faixa de LED

A faixa de LED é alimentada por 12 volts. O Raspberry Pi é capaz de produzir apenas 3,3 V ou 5 V e não é capaz de produzir nada perto dos amperes necessários para acionar tantos LEDs.

É importante não conectar a fonte de alimentação de 12 volts ao Raspberry Pi.

Minha tira também tinha fios de alimentação adicionais conectados à tira em cada extremidade. Sugiro que você prenda com fita adesiva para que não entrem em contato com nenhum de seus outros equipamentos.

Execute as próximas etapas por sua própria conta e risco. Não me responsabilizo por nada que possa dar errado.

Tira LED

Minha faixa de LED tem três fios:

VERMELHO - +12 Volts

PRETO - Terreno

VERDE - Dados

NOTA: há um Din e um Dout - Data In e Data Out. Verifique se você está trabalhando com a extremidade da faixa de LED que diz Din.

Garantir que o Barrel Jack não esteja conectado à fonte de alimentação

1. Conecte o fio vermelho da faixa de LED ao lado + do conector do cilindro.

Eu usei um fio branco de calibre 22.

Coloque o fio na ranhura + no conector cilíndrico e aparafuse-o no lugar.

Empurre a outra extremidade do fio no soquete do LED. Certifique-se de que está conectando com o fio vermelho.

2. Conecte o fio preto da faixa de LED ao lado - do conector do cilindro.

Eu usei um cabo preto de calibre 22.

Coloque o fio na ranhura - do conector cilíndrico. Neste ponto, coloque também a extremidade macho de um dos cabos de conexão (fio marrom na foto) no mesmo orifício e aparafuse os dois no lugar.

Empurre a outra extremidade do fio preto no soquete do LED.

Certifique-se de estar conectando com o fio preto.

3. Conecte o fio verde da faixa de LED

Pegue um dos cabos de conexão feminino para macho. Nas minhas fotos esse é o fio verde.

Coloque a extremidade macho no soquete de LED com o fio verde.

Este é o cabo de dados.

Raspberry Pi

1. Pegue o cabo do conector verde e conecte-o ao Raspberry Pi GPIO.

Você precisa conectá-lo ao PCM_CLK (pino 12 / GPIO 18)

2. Pegue o cabo conector preto e conecte-o ao Raspberry Pi GPIO.

Você precisa conectá-lo a um dos fundamentos. Eu sugiro que você use o pino 14, mas você também pode usar o pino 6, 9, 20, 25, 30, 34 ou 39.

NOTA: para que isso funcione, a fonte de alimentação do LED e o Raspberry Pi devem ter um aterramento comum. Observe também que você não deve conectar o 12 Volt + (fio vermelho) ao Raspberry Pi.

LED Power

Você não deve ser capaz de conectar sua fonte de alimentação de 12 volts ao conector cilíndrico

Todos os LEDs em sua faixa de LED devem agora acender em BRANCO

Etapa 6: Código do lado do servidor

Executando o código do lado do servidor

cd /opt/com.jonhaydock/disco-pi

sudo npm start

Isso iniciará o servidor da web e ouvirá as solicitações HTTPS e WSS.

A porta padrão é 443, mas você pode substituí-la definindo uma variável de ambiente antes de iniciar o código. Por exemplo

export DISCO_PI_PORT = 1443

Minha faixa de LED tem 150 LEDs. Eles são controlados em grupos de três. Isso significa que não posso controlar cada LED individualmente e preciso enviar informações suficientes para controlar 50.

Se o seu LED tiver mais ou menos, você pode substituir o número de LEDs que está controlando, passando um parâmetro para a inicialização. Por exemplo, se você só pode controlar 10 LEDs

sudo npm start 10

O código do servidor principal pode ser encontrado no arquivo app.js. Este arquivo inicia o servidor da web HTTPS e também adiciona o socket.io para escutar as solicitações do websocket na mesma porta.

Para acessar o site, você deve abrir um navegador da web em seu computador principal (eu só testei isso no Chrome) e usar o endereço IP do Raspberry Pi, por exemplo, 10.0.1.2/

Você pode descobrir seu endereço IP na linha de comando do Raspberry Pi.

ifconfig

O servidor web servirá qualquer conteúdo na pasta pública. O padrão é exibir a página index.html.

Ele tem um ponto final de API - / api / audio. Este ponto final procura todos os arquivos na pasta pública / áudio e retorna a lista. Por exemplo

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "Foi isso que você buscou (feat. Rihanna).mp3"]

Para adicionar música como uma opção, copie os arquivos para esta pasta. Eu pessoalmente uso o Filezilla em vez do ssh. A pasta à qual você deseja adicionar arquivos é /opt/com.jonhaydock/disco-pi/public/audio

Etapa 7: Código do site

Código do site
Código do site

Quando você acessar o site, deverá ver algo assim.

Se você vir um aviso de segurança, é porque estamos usando um certificado SSL autoassinado. Você pode ignorá-lo ou adicioná-lo como uma exceção.

Ao selecionar um nome de arquivo, a fonte do elemento de áudio HTML 5. será definido para esse arquivo. Quando estiver pronto, a música começará a tocar. Assim que a música terminar, ela irá parar.

Se você selecionar a opção Nenhum, a música irá parar de tocar.

Enquanto reproduz o arquivo de música, a página da web usa a interface AudioContext para analisar a música, que é enviada ao servidor por meio de uma conexão segura de websocket.

A mensagem é do tipo que o socket.io no servidor foi configurado para escutar "ws2811". Ele contém uma matriz de 50 elementos, que estão entre 0 e 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}

O servidor usa a biblioteca Node RPI WS281x Native (envolvendo a biblioteca WS281X de Jeremy Garff) para alterar as cores dos LEDs em uma faixa de LED WS2811, com base nos dados enviados pelo websocket.

Etapa 8: finalmente

Image
Image

Você deve ver os LEDs na tira mudando de cor com a música, com base na análise da Transformada Rápida de Fourier feita na página da web.

Eu espero que você goste disso. Deixe-me saber o que você faz com isso!

NOTA: Se você tiver algum problema

Uma vez que esta biblioteca e o áudio interno do Raspberry Pi usam o PWM, eles não podem ser usados juntos.

Você pode precisar colocar o módulo do kernel de áudio Broadcom na lista negra criando um arquivo /etc/modprobe.d/snd-blacklist.conf com

lista negra snd_bcm2835

Se o dispositivo de áudio ainda estiver carregando após a lista negra, você também pode precisar comentá-lo no arquivo / etc / modules. Em sistemas sem periféricos, você também pode precisar forçar o áudio através de HDMI

Edite config.txt e adicione:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

É necessário reiniciar para que esta mudança tenha efeito

Recomendado: