Uso del control remoto por infrarrojos con Raspberry Pi sin LIRC
Quería obtener una entrada remota de infrarrojos para Raspberry Pi. Me las arreglé para instalar y probar LIRC. Todo estaba bien, excepto el último paso. Cuando quería pasar el valor de la clave del control remoto por infrarrojos al programa Python, no lo pasaba correctamente. Pasa un valor nulo para cualquier clave. No pude averiguar qué estaba mal. Me di por vencido y luego trato de escribir un código Python para capturar el control remoto IR sin usar LIRC.
Después de leer un poco sobre cómo se comunican los controles remotos por infrarrojos, la información reveló que utiliza la comunicación en serie UART. Usé el kit de bricolaje remoto IR HX1838. El sensor de infrarrojos decodifica las ondas de infrarrojos y pasa los datos en serie. Lo que hice fue leer el valor de los datos que salen del sensor de infrarrojos en serie. Esta es una forma burda pero simple de leer el control remoto por infrarrojos para aplicaciones simples que se pueden usar en Raspberry Pi.
Preparando Raspberry Pi para la comunicación serial UART.
1. Necesito eliminar las entradas ttyAMA0 en cmdline.txt .
- Primero haga una copia de seguridad del archivo que contiene los parámetros del kernel cmdline.txt como cmdline_bp.txt
sudo cp /boot/cmdline.txt /boot/cmdline_bp.txt
- Edite el archivo cmdline.txt eliminando los parámetros que contienen "ttyAMA0". es decir. ‘Console =ttyAMA0,115200 ′ y‘ kgdboc =ttyAMA0,115200 ′.
sudo nano /boot/cmdline.txt
El archivo restante se ve así,
dwc_otg.lpm_enable =0 consola =tty1 root =/ dev / mmcblk0p6 rootfstype =ext4 ascensor =fecha límite rootwait
Luego guarde y cierre el editor. Guarde el archivo, Ctrl + O. Cierre el editor, Ctrl + X
2. Actualiza inittab archivo para enmascarar el ttyAMA0
sudo nano / etc / inittab
Comenta la línea
‘X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100 ′
#X:23:respawn:/ sbin / getty -L ttyAMA0 115200 vt100
Luego guarde y cierre el editor. Guarde el archivo, Ctrl + O. Cierre el editor, Ctrl + X
Paso 1:comenzar
Instalación de pySerial
- Para que funcione la comunicación serial (UART), es necesario instalar el módulo serial.
sudo apt-get install python-serial
Una vez que esto esté instalado, el código Python puede usarlo haciendo importar serie .
- A continuación, debe cablear GPIO 14 (TX) y GPIO 15 (RX). Como mi objetivo es recibir las señales de infrarrojos, conecté solo GPIO 15 (RX).
- El sensor de infrarrojos requiere una conexión de 5 V y GND. Luego, la señal de salida del sensor IR conectado a GPIO 15.
El código Python para leer la señal de infrarrojos resultó ser muy, muy simple. Como sigue.
import serialser =serial.Serial ("/dev/ttyAMA0")ser.baudrate =2400 para i en el rango (0,15):# generalmente la señal IR para una clave es de aproximadamente 12-16 bytes data =ser.read ( 1) # leer 1 byte a la vez imprimir ord (datos) # los datos leídos en carácter, ord se convertirá a valor ASCII
Ahora, este código leerá la señal de infrarrojos 1 byte a la vez e imprimirá el valor.
Probé las velocidades en baudios por ensayo y error y me establecí en 2400 BPS. Aunque la comunicación en serie admite hasta 115KBPS, es interesante por qué IR usa una velocidad más baja. Supongo que sería más confiable usar una velocidad más baja, ya que hay menos posibilidades de que la señal de infrarrojos pierda 1 o 2 bits en el aire.
Decodificar teclas de control remoto por infrarrojos
Ahora el siguiente paso es decodificar los valores clave. Usé un control remoto IR estándar de TV Samsung para este esfuerzo.
El primer punto importante es averiguar cuántos bytes de datos para cada clave. Puede variar de 12 a 16 bytes. (los que probé). Por lo general, la longitud de bytes es la misma para todas las claves. Esos bytes tienen bytes de encabezado, bytes de datos (para identificar la clave) y bytes de cola. Los bytes del encabezado tendrán una firma para el modelo del control remoto por infrarrojos. Usé una hoja de Excel para recopilar los valores de datos clave después de la página de Antzy Carmasaic
http://www.instructables.com/id/How-To-Useemulate-…
Profundizando en los valores de clave capturados, muestra que el byte 0-5 consiste en un encabezado, repetido para todas las claves. Los valores de datos de los bytes 6 a 11 representan el valor de la clave. Podría haber algunos valores finales. El byte 12 es la cola del control remoto de Samsung.
Mapeo de claves
La forma exacta de este control remoto es almacenar los bytes 6-11 en una matriz y compararlo con una nueva clave entrante. En cambio, hice un algoritmo simple de la siguiente manera.
keyidentity =byte [6] + 2 * byte [7] + 3 * byte [8] + 4 * byte [9] + 5 * byte [10] + 6 * byte [11]
Da un valor casi único para cada clave. Puede encontrar un algoritmo mejor que este.
Extendí el código Python para capturar información de la clave remota de Samsung. Una vez que calculé el valor de la clave asignada, lo guardé en el programa Python.
Se adjunta archivo. nombre - ir_serial3samsung.py. El control remoto de Samsung envía 2 conjuntos de datos. Así que capturo 24 bytes para vaciar el búfer de captura de datos en serie de Raspberry Pi. Pero solo uso el primer conjunto para decodificar.
Cuando ejecuta este código, identifica correctamente las teclas presionadas. Puede decodificar el resto de las claves en el control remoto mirando el valor "keyidentity" que imprime el programa. Luego, agregue el programa para incluirlos.
Conclusión
Esta es una forma muy simple y efectiva de usar un control remoto con Raspberry Pi con Python. Necesita calcular cuántos bytes totales para una clave, cuánto tiempo son los bytes de encabezado, bytes de datos y bytes de cola. Como sabría de la A a la Z de este proceso, puede modificarlo fácilmente para adaptarlo a su aplicación. Dado que estos son pequeños códigos de Python, es muy fácil de depurar si encuentra algún problema.
Para obtener más detalles:Uso del control remoto IR con Raspberry Pi sin LIRC
Proceso de manufactura
- Perfil de temperatura de Raspberry Pi usando LabVIEW
- Leer temperatura con DS18B20 | Raspberry Pi 2
- Medición de temperatura con RASPBERRY PI
- Sensor de temperatura Python y Raspberry Pi
- Supervisión de la temperatura con Raspberry Pi
- Monitoreo remoto del clima usando Raspberry Pi
- SensorTag a Blynk usando Node-RED
- Detectar rayos con una Raspberry Pi
- Sensores analógicos sin entradas analógicas en la Raspberry Pi
- Mando a distancia universal Raspberry Pi
- Sensor de movimiento con Raspberry Pi