Interfaz IR, Frambuesa y LIRC

Mi tarea ahora es aprender cómo enviar comandos a los aires acondicionados y otros dispositivos de la casa. Inicialmente, estos dispositivos solo tienen control remoto IR. Para resolver este problema, tengo un protector de transceptor IR y Raspberry Pi. En el artículo puedes encontrar configuraciones, equipos, consejos y un poco de teoría. Del software será LIRC (Control Remoto Infrarrojo de Linux) y Python.


Encontré LIRC con la ayuda de Google. En el proceso de investigación, descubrí que LIRC funciona con transmisores y receptores de señales IR, puede decodificar la señal recibida y realizar algunas acciones en relación con esto. Ahora no necesito recibir señales, pero en el futuro puede ser útil. Si usted mismo se mete con LIRC, se recomienda leer la Guía de configuración de LIRC .


Configuracion


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 

Registro


Primero debe crear un archivo de configuración con secuencias de datos para todos los comandos necesarios. Sigo llamando a este archivo lircd.conf , pero en cada dispositivo crea su propio archivo my_device_name.lircd.conf en el directorio /etc/lirc/lircd.conf.d .


El formato del archivo se describe aquí . Si tiene un control remoto, puede escribir las señales transmitidas por él en un archivo utilizando la utilidad 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 analiza las secuencias e intenta determinar el protocolo y los parámetros de tiempo. En algunos casos, irrecord falla en el análisis, por lo que es posible guardar la secuencia como fue aceptada en forma cruda, hay un interruptor de --force para esto.


Pero incluso con --force irrecord intenta analizar algo y también puede fallar. Luego puede grabar las secuencias usando mode2 y crear el archivo usted mismo.


mode2 imprime secuencialmente la duración de la presencia y ausencia de una señal, a partir de la cual se componen los datos transmitidos. La duración se mide en microsegundos (1e-6 segundos). En el formato sin procesar, las mismas duraciones se indican en lircd.conf, comenzando con 'pulse' (no se necesita el 'espacio' inicial). En consecuencia, siempre debe haber un número impar de números (comienza y termina con la presencia de una señal: 'pulso').


Para la automatización, hice un script para la grabación que pide el nombre del comando, ejecuta mode2 durante 5 segundos, recuerda y finalmente imprime el resultado en el formato listo para lircd.conf (ver debajo del spoiler).


Guión
 #!/usr/bin/env python3 import io import sys import os r = """begin remote name DEVICE_NAME_CHANGE_ME flags RAW_CODES eps 30 aeps 100 gap 19037 begin raw_codes """ while True: print() print("enter the command name, or just press Enter to finish") a = sys.stdin.readline().rstrip("\n\r") if not a: break first_space = True n = 0 r += " name " + a + "\n" for line in os.popen('timeout 5s mode2 -d /dev/lirc0 2> /dev/null').read().split('\n'): words = line.split() if len(words) < 2: continue if words[0] != 'space' and words[0] != 'pulse': continue if first_space and words[0] == 'space': first_space = False continue if n % 4 == 0: r += "\n " r += words[1] + " " n = n+1 if n > 5: print ("got", n, "values, looks good") else: print ("no signal, something went wrong") r += "\n\n" r += """ end raw_codes end remote """ print() print(r) print() 

irrecord --analyse archivo, puede intentar "reconocerlo" nuevamente utilizando irrecord --analyse . Esto no siempre es exitoso, no se apresure a tirar el viejo archivo. Mis estadísticas son las siguientes: el control remoto del televisor LG era fácil de entender, todos los acondicionadores de aire y una aspiradora requerían creación manual, la aspiradora fue procesada por --analyse .


Solo como ejemplo: así es como se ve el archivo para mi aspiradora .


Nombres de equipo estándar


Para su propósito previsto, el LIRC debe convertir la señal IR recibida y reconocida en un evento de entrada de Linux . Por lo tanto, de manera predeterminada, debemos tener los nombres de comando en lircd.conf de la lista estándar. Puede ver una lista de nombres válidos:


 irrecord --list-namespace 

Los acondicionadores de aire no entran en este patrón. El requisito de nombre se puede desactivar agregando un parámetro al escribir:


 irrecord --disable-namespace .... 

Depuración


Compruebe que el receptor ayuda a la utilidad mode2 , que imprime todas las señales visibles.


 /etc/init.d/lircd stop mode2 -d /dev/lirc0 

Es más fácil verificar la transmisión si hay otro receptor y mode2 ejecutándose en él. En casos particularmente desesperados, puede cambiar el valor en la salida del GPIO y verificar con un probador u osciloscopio dónde va la señal. El equipo de gpio es parte del paquete cableado .


 while sleep 1; do gpio -g toggle 17 done 

Puede mirar los registros utilizando journalctl , en particular, esto le permite ver errores en el archivo de configuración:


 journalctl -b 0 /usr/sbin/lircd 

Enviar comandos


Hay una utilidad irsend para transmitir comandos grabados. También puede mostrar una lista de dispositivos conocidos y una lista de comandos conocidos para cada dispositivo. Preste atención a los "argumentos vacíos" en el ejemplo a continuación, se necesitan allí.


irsend es un cliente para lircd , por lo que si algo salió mal, busque en los registros (ver arriba).


 #   irsend LIST "" "" #     LG_TV irsend LIST LG_TV "" #   ON irsend SEND_ONCE LG_TV ON 

Teóricamente, existe otra posibilidad: enviar comandos a lircd a través de su socket. No entendí


Llamar desde Python


Casi todas las bibliotecas son solo un kit de irsend . La única biblioteca que encontré que compila el cliente para la API a través del socket no funciona en Raspberry (se necesita otra versión de lircd). Por lo tanto, tiene poco sentido en ellos; puedo llamar al comando yo mismo:


 import subprocess subprocess.call(["irsend", "send_once", "BEDROOM_AC", "OFF"]) 

Hardware


Sombrero IR

Utilizo un tablero ya hecho, hay muchos en Amazon y AliExpress . Puedes buscarlo en Google como "Frambuesa infrarroja sheild". Utiliza GPIO 17 para la salida y GPIO 18 para la entrada, como se puede ver en las configuraciones anteriores.


Hay un lugar en el tablero para el segundo LED (adicional) D2, que no está instalado de manera predeterminada. Cuando se usan dos LED, están conectados en serie . Por lo tanto, en ausencia del LED D2, debe cerrar el puente SJ1. Me sorprendió descubrir que en todos mis tableros el puente estaba inicialmente abierto. Tuve que modificar el soldador.


Foto más grande para aquellos que deseen echar un vistazo.

Sombrero IRDA


Resumen


Funciona: la señal se transmite, los dispositivos la ven y reaccionan correctamente.


Mucho depende de la posición del emisor de diodo, debe dirigirse con precisión al receptor. Un transmisor fijo no puede controlar todos los dispositivos en la habitación. La clonación de una solución basada en Raspberry Pi para cada dispositivo es costosa, necesita modificar el emisor para "cubrir un área más grande" o encontrar una plataforma más barata.


LIRC fue creado originalmente para convertir señales IR en eventos Linux estándar de dispositivos de entrada. Por lo tanto, es natural para él que un botón sea un código. Para algunos dispositivos (la mayoría de los acondicionadores de aire) esto no es así: cuando hace clic en cualquier botón, el control remoto transmite un paquete de datos que contiene el estado completo del dispositivo (encendido, modo de funcionamiento, temperatura, modos de funcionamiento del ventilador, tiempo, temporizador, etc.). No hay forma de construir un paquete de componentes múltiples basado en varios parámetros en LIRC, por lo tanto, es una herramienta rápida e inmediata, pero luego tendrá que buscar otra cosa. Aunque para la mayoría de los casos, los datos grabados con la configuración habitual del ventilador y sin modos exóticos son suficientes.

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


All Articles