IR-дистанційне керування. Використання LIRC у Python.


01.09.2015

Інфрачервоне дистанційне керування давно стало звичайним явищем і присутні у багатьох побутових приладах. До мікрокомп’ютера Raspberry Pi також можна підключити IK-приймач і керувати ним зі звичайного пульту, наприклад, від звичайного телевізора.

Я придбав плату з IK-приймачем та пультом. Але можна використовувати у якості IK-приймача щось простіше, наприклад TSOP382. Його можна підключати напряму, як показано на схемі. А у якості пульта використовувати будь-який пульт дистанційного керування від побутових приладів.

raspberry_lirc00

LIRC - Linux Infrared Remote Control

LIRC є стабільною і перевіреною бібліотекою з відкритим кодом, яка дає можливість відправляти і отримувати команди по інфрачервоному порту. LIRC підтримується Raspbian.

Встановлюємо LIRC



sudo apt-get install lirc

Коригуємо файл /etc/modules. Додаємо рядки:

lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22

Де: gpio_in_pin - Пін входу від приймача.
gpio_out_pin - Пін виходу передавача. В моєму випадку не використовується через відсутність передавача.

Коригуємо файл  /etc/lirc/hardware.conf:

########################################################
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

# Don`t start lircmd even if there seems to be a good config file
# START_LIRCMD=false

# Don`t start irexec, even if a good config file seems to exist.
# START_IREXEC=false

# Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
########################################################

Зверніть увагу на рядок: DRIVER="default"

Перестартовуємо lircd:



sudo /etc/init.d/lirc stop
sudo /etc/init.d/lirc start

Редагуємо файл /boot/config.txt. Додаємо рядок:

dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22

Де:

gpio_in_pin - Пін входу від приймача.
gpio_out_pin - Пін виходу передавача. В моєму випадку не використовується через відсутність передавача.

Перезавантажуємо Raspberry Pi:



reboot

Тестуємо IR (ІЧ) приймач



sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Натискаємо на кнопки ДУ пульту і маємо побачити щось схоже на це:

space 16300
pulse 95
space 28794
pulse 80
space 19395
pulse 83
space 402351
pulse 135
space 7085
pulse 85
space 2903

lircd.conf

Існує дуже багато різних ІК пультів з різним форматом передачі даних, кількістю кнопок, тощо. Для того щоб lircd нормально розбирав команди с пульту для кожного пульту потрібен окремий конфіг. Створити новий конфіг-файл рекомендується використовуючи irrecord.

При використанні irrecord він буде просити вас декілька разів натискати кнопки різним чином. Виконуйте все як він просить. Наприкінці треба прив`язати назви до кнопок. Не обов`язково до всіх, можна тільки до тих, які плануєте використовувати.



irrecord -d /dev/lirc0 ~/lircd.conf

Копіюємо конфіг у потрібне місце:



sudo cp ~/lircd.conf /etc/lirc/lircd.conf

Перестартовуємо lirc:



sudo /etc/init.d/lirc restart

Або:



service lirc start

Перевіряємо роботу:



irw

При натисканні кнопок на пульті інформація має з`являтися на консолі.

irexec

irexec - це програма, яка виконує команди, у відповідності з отриманими ІК сигналами. Команди налаштовуються за допомогою файлу ~/.lircrc.

Приклад файлу:

begin
prog = irexec
button = KEY_1
config = echo "You pressed one"
repeat = 0
end

Запускаэмо irexec і при натисканні "1" маємо побачити
You pressed one
You pressed one
You pressed one

python-lirc

python-lirc є розширення Python, яке дає нам можливість через налаштування у конфігу ~/.lircrc отримувати сигнали від ІК пульту у власному сриптові. По-перше, нам потрібно додати кілька рядків до нашого ~/.lircrc:
begin
prog = irexec
button = KEY_1
config = echo "You pressed one"
repeat = 0
end

begin
prog = myprogram
button = KEY_1
config = one
end

begin
prog = myprogram
button = KEY_2
config = two
end

Тепер можемо використовувати ІК ДУ у власному скрипту на Python:



import lirc
sockid = lirc.init("myprogram")
lirc.nextcode()
lirc.deinit()

raspberry_lirc01 raspberry_lirc02

Успіхів.

Дивись також:

Raspberry Pi
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви