Media player do armário


Autor: Nikolai Khabarov Em

uma boa noite de sexta-feira, decidi assistir a um filme em casa: liguei o laptop, liguei o cabo HDMI através do adaptador DisplayPort, peguei o controle remoto, liguei a TV e comecei a jogar no laptop. E percebi que o volume da TV não era suficiente - tive que procurar pelo controle remoto novamente para aumentá-lo ... Então pensei: “Esse processo pode ser simplificado de alguma forma?”

A manhã de sábado foi extremamente proveitosa. Eu decidi fazer meu próprio player de multimídia de rede, da maneira que eu imagino. Quase todos os detalhes foram retirados da despensa, o coração do jogador é o Raspberry Pi. Para mais detalhes, o que há dentro e como montar um dispositivo semelhante, veja abaixo.



Como você pode ver na descrição, meus requisitos para o player são extremamente simples: capacidade de reproduzir conteúdo da rede, armazenamento de várias centenas de gigabytes, capacidade de controlar o mesmo controle remoto da TV; uma porta USB é desejável, mas não necessária. Os players comprados do Android desapareceram imediatamente, porque esses dispositivos são principalmente China pura, no pior sentido da palavra, e eu não tinha vontade de lutar com insetos dentro deles. Além disso, não está claro como implementar o controle desse dispositivo a partir de um controle remoto de televisão. Além disso, a interface gráfica do Android claramente não se destina ao controle remoto em princípio. Portanto, começou a busca por lixo a partir do qual se pode fazer uma coisa.

Selecionamos os detalhes


Antes de mais, gostaria de tentar entender a viabilidade de fabricar o dispositivo final. Portanto, para começar, teremos um mínimo de detalhes e experimentaremos um potencial media player em operação. Vamos à despensa e literalmente desenterramos os detalhes que precisamos:
1. Um computador com uma saída HDMI. O antigo Raspberry Pi 1 é bastante adequado para nossos propósitos, você também pode usar o Raspberry Pi 2.
2. Fonte de alimentação para a placa - o carregamento microUSB de um telefone antigo é adequado. Você pode usar qualquer "tentar", mas é aconselhável usar uma fonte que forneça uma corrente de saída de 1A (um ampere para os olhos é suficiente para Pi 2, consulte os requisitos );
3. cartão microSD com 4 GB ou mais.
4. Mouse e / ou teclado USB (pode ser usado o sistema sem fio) e, opcionalmente, o receptor de sinal infravermelho TSOP4836 ou similar.
5. Adaptador USB Wi-Fi ou a capacidade de conectar um cabo Ethernet à Internet na placa.

Colocamos OpenElec, tentamos


Nesse ponto, executaremos o OpenElec da menor maneira possível. Assim que pensei no software do meu reprodutor multimídia, lembrei-me do XBMC, mais tarde renomeado Kodi . Mas não havia desejo de instalar nenhum sistema operacional e, em seguida, configurar o Kodi. Então, decidi pesquisar no google e encontrei esse conjunto do sistema operacional GNU / Linux, sobre o qual o Kodi já está instalado. Esse assembly é chamado OpenElec, é um projeto de código aberto. Seu site oficial é openelec.tv
, então baixamos a imagem de instalação do site oficial . Selecionamos a versão desejada e a plataforma na qual a rodaremos (no meu caso, a versão estável do Rasberry Pi) e baixamos o 'Diskimage' (arquivo com a extensão .img.gz).
Desembale a imagem: e escreva no cartão de memória:
$ gunzip -d < >.img.gz


$ sudo dd if= < >.img of=/dev/mmblck0 bs=4M

Correto / dev / mmblck0 - se houver mais de um cartão de memória no seu sistema.

Atenção! O conteúdo do cartão de memória será completamente apagado.

Os usuários do Windows podem usar o utilitário gratuito Win32 Disk Imager . O utilitário possui uma interface gráfica - selecione o arquivo, o cartão de memória e pressione 'Write'.
Agora verifique se tudo está escrito no cartão com o comando
$ sync

Ou simplesmente remova o cartão através da remoção segura do dispositivo na interface gráfica do sistema operacional. Nós o obtemos fisicamente e o colocamos no Raspberry Pi. Em seguida, conecte o cabo Ethernet à Internet ou insira o adaptador Wi-Fi USB, conecte o mouse e o cabo HDMI à TV. Se você quiser usar um controle remoto infravermelho, precisará conectar o receptor de infravermelho ao GPIO18 e a potência do processador (3,3V). O diagrama final da conexão é o seguinte:

Se você decidir usar um receptor infravermelho, tenha cuidado com ele
- verifique se o layout dos pinos do seu receptor está correto.
Tudo, agora você pode olhar para o próprio ambiente. Nós alimentamos a placa a partir da fonte de energia. Após o carregamento, o assistente de configuração inicial aparece na tela:


Durante a instalação, recomendo ativar imediatamente o acesso SSH. Todas as outras perguntas são triviais.

Agora você pode jogar com o ambiente do futuro jogador usando o mouse e / ou o teclado. Você pode tentar reproduzir o vídeo em vários formatos (você pode conectar uma unidade flash USB para liberar portas) e geralmente entender o que é o quê. Existem vários casos para a própria placa Raspberry Pi; talvez alguém fique satisfeito com tudo de uma maneira tão minimalista; por exemplo, você pode conectar um mouse USB sem fio e usar o dispositivo. Continuaremos a melhorá-lo.

Conecte o controle remoto IR


Se você decidir não conectar um receptor de infravermelho, pode simplesmente pular esta seção.

Para usar o controle remoto, precisamos configurar o LIRC . Primeiro, vamos ligar o módulo, que funciona diretamente com o receptor através da porta GPIO. Para fazer isso, adicione uma linha ao arquivo de configuração do DeviceTree. Efetuamos login via SSH no seu dispositivo (você ativou o SSH durante a configuração inicial? Caso contrário, você pode fazer isso na interface gráfica do próprio sistema). A senha padrão é openelec. Adicione a linha que precisamos ao arquivo: no final, adicionamos a linha e recarregamos: Agora precisamos garantir que tudo funcione e o LIRC possa receber comandos do controle remoto, para isso paramos o LIRC e tentamos obter dados do controle remoto:
$ ssh root@ip_address


# mount -o remount,rw /flash
# nano /flash/config.txt


dtoverlay=lirc-rpi


# killall lircd
# mode2 -d /dev/lirc0

Clicamos em qualquer botão do controle remoto e iluminamos o receptor - um texto descrevendo os pulsos recebidos deve ser executado no console. Agora estamos convencidos de que tudo funciona e podemos treinar o LIRC para usar seu controle remoto. Observe que o lircd deve ser interrompido durante o processo de configuração; fizemos isso anteriormente usando o comando kill. Há um registro de utilidade especial para treinamento, executamos os seguintes comandos para iniciá-lo: Em seguida, siga as instruções na tela. No início, o utilitário solicitará que você pressione os vários botões do controle remoto até que os pontos na tela sejam preenchidos para aprender o padrão do seu controle remoto. Então você precisará indicar com o texto qual botão você deseja ensinar o LIRC a usar e brilhar no receptor. Eu recomendo que você ensine pelo menos os seguintes botões: KEY_UP KEY_DOWN
# cd /storage/.config
# irrecord -d /dev/lirc0 lircd.conf





KEY_LEFT
KEY_RIGHT
KEY_OK
KEY_PLAY
KEY_EXIT
KEY_STOP
KEY_INFO
KEY_EPG

A lista inteira de botões disponíveis no sistema pode ser obtida pelo comando: No controle remoto, você pode escolher qualquer botão que seja conveniente. Na maioria das TVs no modo HDMI, a maioria dos botões não faz nada, o que, é claro, está à mão. Como resultado, devemos obter o arquivo lircd.conf com os parâmetros do seu controle remoto - reinicializamos a placa e tentamos usá-lo. Você também pode ligar / desligar o aparelho. Para fazer isso, conecte o receptor ao segundo pino do Raspberry PI GPIO1 para Raspberry PI 1 ou GPIO3 para Raspberry PI 2 - em ambas as placas, esses pinos estão localizados no mesmo local no conector da placa:
# irrecord -list namespace






Ao conectar este pino ao terra, você pode ativar a placa no estado desligado. Com esta conexão, você pode programar o botão KEY_POWER, e o player será desligado quando você clicar nele, e será ativado por qualquer sinal de qualquer controle remoto.

Coletamos o dispositivo mais a sério
Eu queria criar um dispositivo mais completo com a aparência do dispositivo de fábrica e adicionar um disco rígido a ele. Olhei para a despensa e encontrei um velho receptor de satélite. No interior, já existe uma fonte de alimentação suficiente para todos os componentes de energia, existe um receptor de sinal de IR, um interruptor de desligamento na parede traseira. Há também a oportunidade de fazer um relógio no painel frontal devido ao indicador de sete segmentos já instalado. E, claro, o caso em si é ótimo para nossos propósitos. O receptor de satélite pode ser substituído por um DVD ou VHS antigo, mesmo quando não está funcionando.
, — , . / — , 220 .

Abrimos o caso do receptor / videocassete. Para começar, precisamos garantir que a fonte de alimentação tenha uma saída de 5V, que pode fornecer a energia necessária. Para fazer isso, usando um multímetro, verificamos a presença de energia de 5V e rastreamos através de quais componentes esses 5Vs são obtidos. Se a base do elemento do retificador e o diâmetro do enrolamento do transformador da fonte de alimentação puder suportar 2-3 amperes, teremos sorte - existe uma fonte, caso contrário, você terá que mudar a fonte no caso para uma mais potente. Depois, retiramos a placa principal / unidade de fita / unidade óptica e a enviamos de volta à despensa - será útil. Dentro, deixamos apenas a placa PSU e a placa com um painel frontal no qual existe um receptor de infravermelho.

Agora escolha onde instalar o próprio Raspberry Pi. A escolha aqui é bastante simples: o lado da placa com HDMI deve sair do gabinete, o lado com portas USB deve ser montado no interior para conectar componentes internos; além disso, precisamos de pelo menos algum acesso ao cartão microSD, caso o firmware seja alterado. Existem aberturas para conectores RCA no gabinete do receptor, colocaremos a placa para que o conector HDMI fique o mais acessível possível do lado de fora. Do mesmo lado, existem saídas da placa de som e microUSB operando no modo periférico. Não estamos interessados ​​nesses conectores; forneceremos energia do lado de fora através do conector GPIO principal da placa.

Marcamos onde é necessário recortar um pouco para que o conector HDMI seja inserido livremente na placa pela parte externa do gabinete e destacamos quatro orifícios para a instalação da placa. Eu usei os seguintes racks:


As prateleiras da placa-mãe interferiram e eu as removi com a ajuda de um alicate. As manipulações devem ser realizadas com cuidado, com um movimento desajeitado, você pode facilmente dobrar a caixa. Furamos, vimos, prendemos o rack com parafusos adequados e a própria placa a eles.


Agora você precisa encontrar um lugar para o disco rígido. Aqui, o requisito é bastante simples - você precisa deixar alguns centímetros livres dentro do gabinete, na lateral do conector SATA, porque um adaptador será inserido lá. O disco rígido possui roscas na superfície inferior e nas laterais do disco rígido. Winchester precisa ser ligeiramente levantado para que não fique sobre o metal. Resolvi o problema com muita simplicidade - peguei parafusos adequados para a rosca inferior, mas um pouco mais do que o necessário, e estabeleci a distância entre a caixa e o disco rígido com porcas maiores.

Agora precisamos encontrar um conversor USB SATA ou um recipiente antigo para HDD, de onde esse conversor possa ser extraído. Eu tinha um contêiner, mas infelizmente ele ficou inoperante. Eu tive que correr para a loja para o conversor USB SATA. Vamos inserir o conector USB no Raspberry PI, mas para não carregar a placa com correntes bastante sérias que o HDD exige, especialmente ao girar o eixo, você precisa conduzir energia adicional diretamente da PSU. No meu caso, o adaptador tinha um cabo com dois conectores USB; conectei um deles diretamente à fonte de alimentação soldando o conector de resposta USB próximo à PSU.


Mais duas coisas em que pensar imediatamente. A primeira é onde e como a porta USB externa será localizada. O segundo é onde colocar o adaptador Wi-Fi ou, se você planeja implementar apenas uma conexão Ethernet, como colocar o conector Ethernet na parede do gabinete (se você colocar a placa com a borda desse conector no gabinete, não poderá conectar dispositivos USB por dentro). A Ethernet pode ser aumentada colocando uma tomada de parede convencional dentro do gabinete e prendendo um fio curto com um conector.

Agora são vendidos minúsculos dongles Wi-Fi USB, mas você não precisa colocá-los dentro de uma caixa de metal - o sinal pode passar mal. Você pode pegar um pequeno cabo de extensão USB, colocar o conector USB na parte traseira do gabinete e inseri-lo ali. Também existem adaptadores USB com antenas removíveis, você pode estender o conector RMA para a parte traseira do gabinete e parafusar a antena. Eu tinha um adaptador USB Wi-Fi bastante antigo e, como resultado, um grande USB com uma antena envolvente e entrada miniUSB. Eu não tinha onde colocá-lo por causa do seu tamanho e decidi usá-lo nos negócios. Ele removeu o estojo - seu formato não permitia conectar a antena pelo lado de fora. A taxa era bastante alta e eu tive que pensar cuidadosamente sobre sua colocação. Felizmente, ficou muito fino e decidi colocá-lo sobre os conectores USB do Raspberry Pi. O conector RMA está foratorcido em uma porca e dentro do gabinete coloque uma prateleira alta para a placa. O acesso ao USB permaneceu e a antena foi levantada acima do gabinete. Ótimo!


Agora você precisa, de alguma forma, fixar o cabo de extensão USB no painel frontal, certificando-se de que ele não interfira em nada dentro do gabinete. No meu caso, o receptor tinha uma porta para cartões de acesso e eu decidi colocar um conector atrás dele - para não acumular poeira! Portanto, não a cortei com muito cuidado e a enchi com cola quente na parte de trás.


A situação com a placa do painel frontal é mais interessante - existem muitas opções para o que consiste. Eu tive que implementar a indicação dinâmica de indicadores de sete segmentos usando o DMA (Direct Memory Access, a implementação direta de indicação dinâmica via portas GPIO consumiria muitos recursos da CPU e o brilho dos segmentos seria desigual devido à atividade do sistema operacional). Mas este já é um tópico para um artigo separado e, além disso, esses painéis podem diferir radicalmente; portanto, aqui forneceremos o direito de mostrar nosso potencial criativo ao leitor. Você pode estudar o código fonte da implementação para o meu quadro. No caso mais simples, você pode simplesmente cortar as faixas que vão para o receptor de infravermelho e soldá-lo diretamente com três fios. Notei apenas que usei um cabo IDE para conectar ao conector GPIO da placa, ele se encaixa perfeitamente no conector Raspberry Pi e os fios podem ser soldados facilmente com outros componentes.

No final, eu tenho um dispositivo assim:


Personalizar


Se, ao ligar, você vê um quadrado colorido no canto superior direito da tela, isso significa que a energia do Raspberry Pi não é suficiente - uma fonte de alimentação fraca, fios muito finos ou periféricos USB demoram muito. No primeiro caso, apenas substituir a PSU por uma mais poderosa ajudará. No segundo, o problema pode ser facilmente resolvido substituindo os fios por outros mais grossos ou usando vários núcleos em paralelo; no terceiro, o problema é resolvido alimentando dispositivos USB diretamente da fonte de alimentação ou, por exemplo, instalando um hub USB com a capacidade de conectar uma fonte de energia externa.

Você provavelmente também verá que seu HDD está conectado ao sistema como uma unidade flash externa. Vamos torná-lo o principal armazenamento no sistema operacional. Na primeira inicialização, o OpenElec inicia automaticamente o uso de todo o espaço livre no cartão microSD para a seção de dados, que é montada como / storage. A decisão mais bem-sucedida me parece usar todo o disco rígido como / armazenamento. Para fazer isso, formate o disco rígido e crie uma partição nele com o sistema de arquivos ext3 / 4. Isso pode ser feito diretamente no reprodutor, usando os utilitários parted e mkfs. Os comandos abaixo apagarão todo o conteúdo do disco e criarão uma partição ext4: Para isso, será necessário efetuar login no reprodutor via SSH. Em seguida, monte a nova partição em algum lugar:

# umount /dev/sda1
# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel GPT
mklabel GPT
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
yes
(parted) mkpart primary 2048s 100%
mkpart primary 2048s 100%
(parted) q
q
Information: You may need to update /etc/fstab.
# mkfs.ext4 /dev/sda1



# mkdir /tmp/hdd
# mount /dev/sda1 /tmp/hdd


Copie todo o conteúdo de / storage para uma nova partição para manter o estado atual: Desmonte a partição e, se desejar, exclua a pasta: Agora você precisa especificar qual unidade precisamos montar no momento da inicialização. Você pode fazer isso ajustando a linha de comando dos parâmetros do kernel, mas primeiro descobrimos o UUID da partição do disco rígido: Copie o UUID da partição para a área de transferência. Agora remonte o sistema de arquivos com a configuração do kernel para gravar e corrija-o: No arquivo, substitua o parâmetro disk pelo UUID do nosso disco. O conteúdo do arquivo deve se parecer com o seguinte: Após a reinicialização, o player usará o disco rígido como / storage e a seção no cartão de memória poderá ser excluída para que não seja montada automaticamente ao inicializar:
# cp -rf /storage/. /tmp/hdd



# umount /dev/sda1
# rmdir /tmp/hdd



# blkid /dev/sda1



# mount -o rw,remount /flash
# nano /flash/cmdline.txt



boot=/dev/mmcblk0p1 disk=UUID=95013338-89b1-43af-8471-9b30efc85d98 quiet



# parted -s /dev/mmcblk0 rm 2


Aqui está um fim de semana tão divertido que eu tive. Não esqueça que o sistema operacional GNU / Linux está presente neste media player e você pode modificá-lo / complementá-lo como quiser. Você também pode resolver algumas tarefas de automação residencial, usando o mesmo dispositivo.

E, finalmente, um vídeo do discurso do autor de um artigo falando sobre o dispositivo.

Tenha uma boa visualização!

Source: https://habr.com/ru/post/pt396967/


All Articles