Usando remoto infravermelho com Raspberry Pi sem LIRC
Eu queria uma entrada remota IR para Raspberry Pi. Eu consegui instalar e testar o LIRC. Tudo estava bem, exceto a última etapa. Quando eu queria passar o valor da chave remota IR para o programa Python, ele não passou corretamente. Ele passa um valor nulo para qualquer chave. Eu não consegui descobrir o que está errado. Desisti e tentei escrever um código python para capturar IR remoto sem usar LIRC.
Depois de ler um pouco sobre como o controle remoto IR se comunica, as informações revelaram que ele usa a comunicação serial UART. Usei o kit DIY remoto IR HX1838. O sensor IR decodifica as ondas IR e passa os dados em série. O que fiz foi ler o valor dos dados que saem do sensor IR em série. Esta é uma maneira simples, mas simples de ler o controle remoto infravermelho para aplicativos simples que podem ser usados no Raspberry Pi.
Preparando Raspberry Pi para comunicação serial UART.
1. É necessário remover entradas ttyAMA0 em cmdline.txt .
- Primeiro faça um backup do arquivo que contém os parâmetros do kernel cmdline.txt como cmdline_bp.txt
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
- Edite o arquivo cmdline.txt removendo os parâmetros que contêm ‘ttyAMA0’. ou seja, ‘Console =ttyAMA0,115200 ′ e‘ kgdboc =ttyAMA0,115200 ′.
sudo nano /boot/cmdline.txt
O arquivo restante parece,
dwc_otg.lpm_enable =0 console =tty1 root =/ dev / mmcblk0p6 rootfstype =ext4 elevator =deadline rootwait
Em seguida, salve e feche o editor. Salve o arquivo, Ctrl + O. Feche o editor, Ctrl + X
2. Atualize o inittab arquivo para mascarar o ttyAMA0
sudo nano / etc / inittab
Comente a linha
‘X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100 ′
#X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100
Em seguida, salve e feche o editor. Salve o arquivo, Ctrl + O. Feche o editor, Ctrl + X
Etapa 1:primeiros passos
Instalando o pySerial
- Para fazer a comunicação serial (UART) funcionar, é necessário instalar o módulo Serial.
sudo apt-get install python-serial
Assim que estiver instalado, o código Python pode usá-lo executando import serial .
- Em seguida, precisa conectar GPIO 14 (TX) e GPIO 15 (RX). Como meu objetivo é receber sinais de infravermelho, conectei apenas GPIO 15 (RX).
- O sensor IR requer conexão 5V e GND. Em seguida, o sinal de saída do sensor IR conectado ao GPIO 15.
O código Python para ler o sinal de infravermelho é muito simples. Do seguinte modo.
import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400for i no intervalo (0,15):# geralmente o sinal IR para uma chave é de cerca de 12-16 bytes data =ser.read ( 1) # ler 1 byte de cada vez imprimir ord (dados) # os dados lidos em caractere, ord será convertido para o valor ASCII
Agora, esse código lerá o sinal de infravermelho 1 byte por vez e imprimirá o valor.
Tentei as taxas de transmissão por tentativa e erro e me estabeleci para 2.400 BPS. Embora a comunicação serial suporte até 115KBPS, é interessante porque o IR está usando uma velocidade mais baixa. Meu palpite é que seria mais confiável usar velocidade mais baixa, já que há menos possibilidade de o sinal IR perder 1 ou 2 bits no ar.
Decodificar chaves remotas IR
Agora, a próxima etapa é decodificar os valores-chave. Usei um controle remoto infravermelho de TV Samsung padrão para esse esforço.
O primeiro ponto importante é descobrir quantos bytes de dados para cada chave. Pode variar de 12 a 16 bytes. (os que eu tentei). Normalmente, o comprimento do byte é o mesmo para todas as chaves. Esses bytes têm bytes de cabeçalho, bytes de dados (para identificar a chave) e bytes de cauda. Os bytes do cabeçalho terão uma assinatura para o modelo do remoto IR. Usei uma planilha do Excel para coletar os valores-chave dos dados seguindo a página da Antzy Carmasaic
http://www.instructables.com/id/How-To-Useemulate-…
Mergulhando profundamente nos valores-chave capturados, ele mostra que o byte 0-5 consiste no cabeçalho, repetido para todas as chaves. Os valores de dados do byte 6 a 11 representam o valor da chave. Pode haver alguns valores finais. O byte 12 é a cauda do controle remoto Samsung.
Chaves de mapeamento
A maneira exata desse controle remoto é armazenar os bytes 6-11 em um array e compará-lo com uma nova chave de entrada. Em vez disso, fiz um algoritmo simples da seguinte maneira.
identidade da chave =byte [6] + 2 * byte [7] + 3 * byte [8] + 4 * byte [9] + 5 * byte [10] + 6 * byte [11]
Ele fornece quase um valor exclusivo para cada chave. Você pode descobrir um algoritmo melhor do que este.
Eu estendi o código Python para capturar informações de chave remota Samsung. Depois de calcular o valor da chave mapeada, armazenei-o no próprio programa Python.
O arquivo está anexado. nome - ir_serial3samsung.py. O controle remoto Samsung envia 2 conjuntos de dados. Então, eu capturei 24 bytes para liberar o buffer de captura de dados seriais do Raspberry Pi. Mas eu uso apenas o primeiro conjunto para decodificar.
Quando você executa este código, ele identifica corretamente as teclas pressionadas. Você pode decodificar o resto das chaves no controle remoto observando o valor “keyidentity” que o programa imprime. Em seguida, anexe o programa para incluí-los.
Conclusão
Esta é uma maneira muito simples e eficaz de usar um controle remoto com Raspberry Pi com Python. Você precisa descobrir quantos bytes totais para uma chave, quanto tempo os bytes de cabeçalho, bytes de dados e bytes finais. Como você conhece de A a Z desse processo, pode modificá-lo facilmente para se adequar à sua aplicação. Como esses são pequenos códigos python, é muito fácil depurar se você encontrar algum problema.
Para obter mais detalhes:Usando o controle remoto infravermelho com Raspberry Pi sem LIRC
Processo de manufatura
- Perfil de temperatura Raspberry Pi usando LabVIEW
- Ler a temperatura com DS18B20 | Raspberry Pi 2
- Medindo a temperatura com RASPBERRY PI
- Sensor de temperatura Python e Raspberry Pi
- Monitorando a temperatura com Raspberry Pi
- Monitoramento remoto do clima usando Raspberry Pi
- SensorTag para Blynk usando Node-RED
- Detecção de relâmpagos com um Raspberry Pi
- Sensores analógicos sem entradas analógicas no Raspberry Pi
- Controle remoto universal Raspberry Pi