сайт для палких паяльників

ИК-дистанционное управление. Использование LIRC в Python
(на русском языке)

Інфрачервоне дистанційне керування давно стало звичайним явищем і присутні у багатьох побутових приладах. До мікрокомп’ютера 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
Успіхів.

Дивись також:
Translate
Архіви

© 2011-2019 Андрій Корягін, Кременчук - Київ, Україна