- PVSM.RU - https://www.pvsm.ru -
Давно уже собирался подключить ИК-приемник и ИК-передатчик к Raspberry, понять, как они будут работать и что с ними можно сделать. И вот однажды такой день настал.
Изучив проблематику, в том числе и материалы с Хабра [1], понял, что кроме ИК-диода и ИК-приемника нужно ещё и транзистор и несколько резисторов, немного приуныл. С приемником проще — он шел комплектом, а вот для диода не хватало транзистора, но тем не менее решил попробовать, а вдруг получится? И получилось…
В основном, всю необходимую информацию на просторах я нашел, но в каждом материале был упущен какой-то момент, а что-то приходилось додумывать самому. Особо осложняло ситуацию то, что я в программировании чайник, поэтому некоторые моменты легко не давались, поэтому я постараюсь для таких же как я описывать все пошагово и максимально подробно.
Итак, модуль ИК-приёмника подключил к GPIO23, gnd и 3,3V — на нем соответствующие обозначения. Светодиод — через резистор 1 кОм к GPIO22 (анод) и gnd (катод).
Дальше — устанавливаем LIRC [2]:
sudo apt-get install lirc
Редактируем файл /etc/modules:
sudo nano /etc/modules
Добавляем в файл строки:
lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22
Где:
gpio_in_pin=23 — пин, к которому подключен приемник.
gpio_out_pin=22 — пин для передатчика.
Редактируем файл /etc/lirc/hardware.conf:
sudo nano /etc/lirc/hardware.conf
Должно получиться так:
# 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=""
########################################################
Редактируем файл /boot/config.txt:
sudo nano /boot/config.txt
Добавляем в файл строку:
dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22
Где:
gpio_in_pin=23 — пин, к которому подключен приемник.
gpio_out_pin=22 — пин для передатчика.
Перезагружаем малину:
sudo reboot
Останавливаем демон lirc:
sudo /etc/init.d/lirc stop
Проверяем работу приемника командой:
mode2 -d /dev/lirc0
Теперь берем любой пульт и нажимаем кнопки, направляя на приемник. Должны по экрану забегать цифры.
Теперь самое интересное — записать конфигурацию вашего пульта (или нескольких), чтобы программа сопоставила ИК-сигнал с пульта с названием кнопки и в дальнейшем этот сигнал могла использовать.
Для этого используем входящую в состав lirc программу irrecord.
irrecord -d /dev/lirc0 ~/aa59-00741a.conf
Где aa59-00741a — модель моего пульта, можно использовать любое другое название. В данном примере конфигурационный файл сохраняется в папку home.
После запуска нужно следовать подсказкам программы на экране (на английском языке).
При вводе названий кнопок лучше использовать список, зашитый в программу.
Получится конфигурационный файл в нашем случае с названием aa59-00741a.conf, сохранен он будет в папке home. В полученном файле я добавил через # комментарии, чтобы понять, что за кнопка.
begin remote
name Samsung_TV
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 4565 4509
one 570 1677
zero 570 553
ptrail 570
pre_data_bits 16
pre_data 0xE0E0
gap 108301
toggle_bit_mask 0x0
begin codes
KEY_POWER 0x40BF
KEY_CYCLEWINDOWS 0x807F #SOURCE
KEY_1 0x20DF
KEY_2 0xA05F
KEY_3 0x609F
KEY_4 0x10EF
KEY_5 0x906F
KEY_6 0x50AF
KEY_7 0x30CF
KEY_8 0xB04F
KEY_9 0x708F
KEY_PREVIOUS 0xC837 #PRE-CH
KEY_0 0x8877
KEY_TEXT 0x34CB #TTX/MIX
KEY_MUTE 0xF00F
KEY_CHANNELUP 0x48B7
KEY_CHANNELDOWN 0x08F7
KEY_VOLUMEUP 0xE01F
KEY_VOLUMEDOWN 0xD02F
KEY_LIST 0xD629 #CH LIST
KEY_MEDIA 0x31CE #MEDIA.P
KEY_MENU 0x58A7
KEY_EPG 0xF20D #GUIDE
BTN_TL 0xD22D #TOOLS
KEY_UP 0x06F9
BTN_RIGHT 0x46B9
KEY_LEFT 0xA659
KEY_DOWN 0x8679
KEY_OK 0x16E9 #ENTER
BTN_BACK 0x1AE5 #RETURN
KEY_EXIT 0xB44B
KEY_A 0x36C9 #RED
KEY_B 0x28D7 #GREEN
KEY_C 0xA857 #YELLOW
KEY_D 0x6897 #BLUE
BTN_START 0xFC03 #E-MANUAL
KEY_SUBTITLE 0xA45B #AD/SUBT.
KEY_STOP 0x629D
KEY_REWIND 0xA25D
KEY_PLAY 0xE21D
KEY_PAUSE 0x52AD
KEY_FORWARD 0x12ED
KEY_P 0x7C83 #P.SIZE
end codes
end remote
Такое действо нужно проделать для каждого пульта. Конфигурационный файл содержит важное поле — name. Это название устройства, по которому lirc будет определять, из какого файла брать команду (в моем случае — Samsung_TV).
Полученный файл куда-нибудь копируем. Я сложил в папку /etc/lirc/rc и добавил в файл /etc/lirc/lircd.conf строчку:
include "/etc/lirc/rc/aa59-00741a.conf"
Таким образом, конфигурационный файл lirc будет брать информацию о моем пульте из файла aa59-00741a.conf, расположенного в папке /etc/lirc/rc На мой взгляд, это самый простой способ добавить информацию о конфигурации пульта в настройки программы.
Перезапускаем lirc:
sudo /etc/init.d/lirc restart
Теперь lirc может использовать данные пульта для передачи с помощью передатчика, либо для распознавания команд с пульта и запуска в ответ на raspberry каких-нибудь действий.
Для этого располагаем передатчик как можно ближе к прибору (для проверки, потом можно будет опытным путем определить, с какого расстояния будет работать) и пишем в терминале команду например:
irsend SEND_ONCE Samsung_TV KEY_POWER
где irsend – программа для управления передатчиком;
SEND_ONCE – атрибут разовой отправки сигнала;
Samsung_TV – имя устройства из конфигурационного файла (в поле name);
KEY_POWER – название команды из конфигурационного файла, которую нужно отправить.
Таким образом, телевизор может включиться или выключиться. С помощью данной команды я включаю или выключаю телевизор.
В терминале вводим команду:
irw
После этого при нажатии кнопок пульта будут отображаться их названия из конфигурационного файла.
Следующий этап — управление передатчиком через браузер, но это я пока еще не изучил.
Будут рад замечаниям.
Автор: v-milenin
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/112008
Ссылки в тексте:
[1] материалы с Хабра: https://habrahabr.ru/post/193572/
[2] LIRC: https://ru.wikipedia.org/wiki/LIRC
[3] Источник: https://geektimes.ru/post/270910/
Нажмите здесь для печати.