Minha tarefa agora é aprender a enviar comandos para aparelhos de ar condicionado e outros dispositivos da casa. Inicialmente, esses dispositivos possuem apenas controle remoto IR. Para resolver esse problema, tenho um escudo de transceptor Raspberry Pi e IR. No artigo, você pode encontrar configurações, equipes, dicas e um pouco de teoria. A partir do software serão LIRC (Linux Infrared Remote Control) e Python.
Encontrei o LIRC com a ajuda do Google. No decorrer do estudo, descobri que o LIRC trabalha com transmissores e receptores de sinais IR, pode decodificar o sinal recebido e executar algumas ações em conexão com isso. Agora não preciso receber sinais, mas no futuro poderá ser útil. Se você mexer com o LIRC, é altamente recomendável ler o Guia de Configuração do LIRC .
Configuração
apt-get update apt-get install lirc
# /etc/modules ( ) lirc_dev lirc_rpi gpio_in_pin=18 gpio_out_pin=17
# /etc/lirc/hardware.conf ( , ) LIRCD_ARGS="--uinput --listen" LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi"
# /boot/config.txt ( lirc, ) dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
# /etc/lirc/lirc_options.conf ( ) driver = default device = /dev/lirc0
reboot sudo /etc/init.d/lircd status
Record
Primeiro, você precisa criar um arquivo de configuração com sequências de dados para todos os comandos necessários. Continuo chamando esse arquivo de lircd.conf
, mas em cada dispositivo ele cria seu próprio arquivo /etc/lirc/lircd.conf.d
diretório /etc/lirc/lircd.conf.d
.
O formato do arquivo é descrito aqui . Se você tiver um controle remoto, poderá gravar os sinais transmitidos por ele em um arquivo usando o utilitário irrecord .
/etc/init.d/lircd stop irrecord -d /dev/lirc0 ~/my_device.lircd.conf mv ~/my_device.lircd.conf /etc/lirc/lircd.conf.d/
irrecord
analisa as seqüências e tenta determinar os parâmetros de protocolo e tempo. Em alguns casos, o irrecord
falha na análise; portanto, é possível salvar a sequência como ela foi aceita na forma bruta; existe uma opção --force
para isso.
Mas mesmo com o --force
irrecord
tenta analisar algo e também pode falhar. Em seguida, você pode gravar as seqüências usando o mode2
e criar o arquivo você mesmo.
mode2
imprime sequencialmente a duração da presença e ausência de um sinal, a partir da qual os dados transmitidos são compostos. A duração é medida em microssegundos (1e-6 segundos). No formato bruto, as mesmas durações são indicadas no lircd.conf, começando com 'pulse' (o 'espaço' principal não é necessário). Portanto, sempre deve haver um número ímpar de números (ele inicia e termina com a presença de um sinal - 'pulso').
Para automação, mode2
um script para gravação que solicita o nome do comando, executa o mode2
por 5 segundos, lembra e finalmente imprime o resultado no formato pronto para lircd.conf (veja abaixo o spoiler).
irrecord --analyse
arquivo, você pode tentar "reconhecê-lo" novamente usando irrecord --analyse
. Isso nem sempre é bem-sucedido, não se apresse em jogar fora o arquivo antigo. Minhas estatísticas são: o controle remoto da TV LG era fácil de entender, todos os condicionadores de ar e um aspirador de pó exigiam criação manual, o aspirador de pó foi processado pela --analyse
.
Apenas como exemplo: é assim que o arquivo se parece com o meu aspirador de pó .
Nomes de equipe padrão
Para a finalidade pretendida, o LIRC deve transformar o sinal de IR recebido e reconhecido em um evento de entrada do Linux . Portanto, por padrão, somos obrigados a ter os nomes de comando no lircd.conf da lista padrão. Você pode ver uma lista de nomes válidos:
irrecord --list-namespace
Os aparelhos de ar condicionado não se enquadram nesse padrão. O requisito de nome pode ser desativado adicionando um parâmetro ao escrever:
irrecord --disable-namespace ....
Depuração
Verifique se o receptor ajuda o utilitário mode2
, que imprime todos os sinais visíveis.
/etc/init.d/lircd stop mode2 -d /dev/lirc0
É mais fácil verificar a transmissão se houver outro receptor e mode2
em execução nela. Em casos particularmente sem esperança, você pode alterar o valor na saída do GPIO e verificar com um testador ou osciloscópio para onde o sinal vai. A equipe gpio
faz parte do pacote de fiaçãopi .
while sleep 1; do gpio -g toggle 17 done
Você pode ver os logs usando o journalctl
, em particular, isso permite que você veja erros no arquivo de configuração:
journalctl -b 0 /usr/sbin/lircd
Enviando comandos
Existe um utilitário irsend
para transmitir comandos gravados. Ela também pode mostrar uma lista de dispositivos conhecidos e uma lista de comandos conhecidos para cada dispositivo. Preste atenção aos "argumentos vazios" no exemplo abaixo, eles são necessários lá.
irsend
é um cliente para lircd
; portanto, se algo der errado, procure nos logs (veja acima).
Teoricamente, há outra possibilidade - enviar comandos para circular através de seu soquete. Eu não entendi
Chamada de Python
Quase todas as bibliotecas são apenas um kit sobre irsend
. A única biblioteca que encontrei que compila o cliente para a API por meio do soquete não funciona no Raspberry (é necessária outra versão do lircd). Portanto, há pouco sentido neles; eu mesmo posso chamar o comando:
import subprocess subprocess.call(["irsend", "send_once", "BEDROOM_AC", "OFF"])
Hardware

Eu uso uma placa pronta, existem muitas na Amazon e no AliExpress . Você pode pesquisar no Google como "Framboesa infravermelha". Ele usa o GPIO 17 para saída e o GPIO 18 para entrada, como pode ser visto nas configurações acima.
Há um local na placa para o segundo LED (adicional) D2, que não é instalado por padrão. Ao usar dois LEDs, eles são conectados em série . Portanto, na ausência do LED D2, você deve fechar o jumper SJ1. Fiquei surpreso ao descobrir que em todas as minhas pranchas o jumper estava inicialmente aberto. Eu tive que modificar o ferro de soldar.
Foto maior para quem deseja dar uma olhada Sumário
Funciona: o sinal é transmitido, os dispositivos o veem e reagem corretamente a ele.
Depende muito da posição do emissor de diodo, ele deve ser direcionado com precisão ao receptor. Um transmissor fixo não pode controlar todos os dispositivos na sala. A clonagem de uma solução baseada em Raspberry Pi para cada dispositivo é cara. Você precisa modificar o emissor para "cobrir uma área maior" ou encontrar uma plataforma mais barata.
O LIRC foi criado originalmente para converter sinais de IR em eventos padrão do Linux de dispositivos de entrada. Portanto, é natural para ele que um botão seja um código. Para alguns dispositivos (a maioria dos aparelhos de ar condicionado), não é assim: quando você clica em qualquer botão, o controle remoto transmite um pacote de dados contendo o status completo do dispositivo (ativado, modo de operação, temperatura, modos de operação do ventilador, hora, timer, etc.). Não há como criar um pacote com vários componentes com base em vários parâmetros no LIRC; portanto, ele ajuda como uma ferramenta rápida, mas você precisará procurar outra coisa. Embora na maioria dos casos, os dados gravados com as configurações usuais do ventilador e sem modos exóticos sejam suficientes.