Consumer IR: различия между версиями
(Отметить эту версию для перевода) |
Lexszero (обсуждение | вклад) |
||
(не показано 11 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
В этой статье описывается прием и передача сигналов пультов управления бытовой техникой, работающих в инфракрасном диапазоне (то есть большинство пультов от телевизоров, кондиционеров, и т. д.). | В этой статье описывается прием и передача сигналов пультов управления бытовой техникой, работающих в инфракрасном диапазоне (то есть большинство пультов от телевизоров, кондиционеров, и т. д.). | ||
== Аппаратная часть == | == Аппаратная часть == | ||
На [[Wiren Board 5]] необходимые сигналы выведены на разъем mini-jack 3.5mm с со следующей распиновкой: | |||
На [[Wiren Board 5]] | |||
* Tip (левый аудиоканал) - питание 5В/передача IR. | * Tip (левый аудиоканал) - питание 5В/передача IR. | ||
* Ring (правый аудиоканал) - прием IR | * Ring (правый аудиоканал) - прием IR | ||
* Sleeve (земля) - земля | * Sleeve (земля) - земля | ||
Для приема ИК-сигналов необходимо подключить приемник (например, типа TSOP1738, AX-1838HS или аналогичного) согласно распиновке. Номинальная частота несущей приемника должна примерно соответствовать частоте несущей используемого пульта, в противном случае возможно ухудшение или полная невозможность приема сигнала от пульта. | |||
Для приема ИК-сигналов необходимо подключить приемник ( | |||
Для передачи ИК-сигналов используется любой ИК-светодиод (с соответствующим токоограничивающим резистором), подключенный между землей и питанием. При передаче напряжение питания будет промодулировано передаваемым сигналом и несущей. | |||
Для передачи ИК-сигналов | |||
Возможно одновременное подключение приемника и передатчика. | |||
''TODO: нарисовать картинку'' | |||
== Программная часть == | == Программная часть == | ||
На уровне ядра за работу с ИК на [[Wiren Board 5]] отвечает драйвер '''lirc-pwm'''. Он предоставляет устройство /dev/lirc0. | |||
На уровне ядра за работу с ИК на [[Wiren Board 5]] отвечает драйвер '''lirc-pwm'''. Он предоставляет устройство /dev/ | |||
С этим устройством взаимодействует демон '''lircd''' из состава пакета [http://www.lirc.org/ LIRC], осуществляющий декодирование последовательностей импульсов в события нажатых на пульте кнопок согласно файлам конфигурации пультов. Также этот демон способен осуществлять обратное преобразование для передачи сигналов нажатия кнопок управляемым устройствам. | |||
С этим устройством взаимодействует демон '''lircd''' из состава пакета [http://www.lirc.org/ LIRC], осуществляющий декодирование последовательностей импульсов в события нажатых на пульте кнопок согласно файлам конфигурации пультов. Также этот демон способен осуществлять обратное преобразование для передачи сигналов нажатия кнопок управляемым устройствам. | |||
Наконец, трансляцию событий от '''lircd''' в сообщения [[MQTT]] и обратно осуществляет демон '''wb-mqtt-lirc''' | Наконец, трансляцию событий от '''lircd''' в сообщения [[MQTT]] и обратно осуществляет демон '''wb-mqtt-lirc''' | ||
=== Установка и настройка === < | === Установка и настройка === | ||
* Установка пакетов | |||
<pre> | |||
root@wirenboard:~# apt-get udpate | |||
root@wirenboard:~# apt-get install wb-mqtt-lirc lirc-scripts | |||
</pre> | |||
* Отредактировать файл '''/etc/lirc/hardware.conf''' и установить следующие значения: | |||
*: DRIVER=default | |||
*: DEVICE=/dev/lirc0 | |||
*: Все остальное оставить по-умолчанию. | |||
* Скачать или сгенерировать файл конфигурации пульта и положить его в '''/etc/lirc/lircd.conf.d/'''. | * Скачать или сгенерировать файл конфигурации пульта и положить его в '''/etc/lirc/lircd.conf.d/'''. | ||
==== Скачивание существующего конфига пульта ==== | ==== Скачивание существующего конфига пульта ==== | ||
<pre> | <pre> | ||
root@wirenboard:~# irdb-get update | root@wirenboard:~# irdb-get update | ||
Строка 58: | Строка 47: | ||
</pre> | </pre> | ||
==== Создание нового конфига пульта ==== | ==== Создание нового конфига пульта ==== | ||
''TODO: описать как пользоваться irrecord'' | ''TODO: описать как пользоваться irrecord'' | ||
После завершения конфигурации, следует перезапустить службы '''lirc''' и '''wb-mqtt-lirc''' | После завершения конфигурации, следует перезапустить службы '''lirc''' и '''wb-mqtt-lirc''' | ||
<pre> | <pre> | ||
Строка 67: | Строка 55: | ||
</pre> | </pre> | ||
=== MQTT-интерфейс === | === MQTT-интерфейс === | ||
'''wb-mqtt-lirc''' создает устройство ''/devices/wb-lirc/'', принятые нажатия публикуются в топике ''/devices/wb-lirc/controls/Key'' в формате '''<название_пульта>:<название_кнопки>:<повтор>'''. После отпускания кнопки в этом топике публикуется сообщение с пустым телом. | '''wb-mqtt-lirc''' создает устройство ''/devices/wb-lirc/'', принятые нажатия публикуются в топике ''/devices/wb-lirc/controls/Key'' в формате '''<название_пульта>:<название_кнопки>:<повтор>'''. После отпускания кнопки в этом топике публикуется сообщение с пустым телом. | ||
Пример: | Пример: | ||
<pre> | <pre> | ||
Строка 86: | Строка 72: | ||
</pre> | </pre> | ||
Для отправки нажатия кнопки следует опубликовать сообщение в формате '''<название_пульта>:<название_кнопки>''' в топике ''/devices/wb-lirc/controls/Key/on'' | Для отправки нажатия кнопки следует опубликовать сообщение в формате '''<название_пульта>:<название_кнопки>''' в топике ''/devices/wb-lirc/controls/Key/on'' | ||
== Устранение неисправностей == | == Устранение неисправностей == | ||
=== Не работает прием === | === Не работает прием === | ||
* Убедиться что драйвер "видит" импульсы от приемника. | * Убедиться что драйвер "видит" импульсы от приемника. | ||
** Остановить сервис '''lirc''' (командой ''service lirc stop'') | ** Остановить сервис '''lirc''' (командой ''service lirc stop'') | ||
** <pre>root@wirenboard:~# mode2 -d /dev/ | ** <pre>root@wirenboard:~# mode2 -d /dev/lirc0</pre> | ||
**: Должны бежать цифры при нажатии кнопок на пульте, если нет - проблема в "железе" или в несоответствии несущей пульта и приемника. Следует попробовать использовать другой приемник. | **: Должны бежать цифры при нажатии кнопок на пульте, если нет - проблема в "железе" или в несоответствии несущей пульта и приемника. Следует попробовать использовать другой приемник. | ||
* Убедиться что '''lirc''' может декодировать последовательности импульсов согласно конфигу пульта: | * Убедиться что '''lirc''' может декодировать последовательности импульсов согласно конфигу пульта: | ||
Строка 100: | Строка 85: | ||
**: Должные бежать строчки при нажатии кнопок на пульте. Если '''mode2''' работает, а '''irw''' - нет, то проблема с конфигом пульта. Стоит попробовать использовать другой конфиг, либо создать новый. | **: Должные бежать строчки при нажатии кнопок на пульте. Если '''mode2''' работает, а '''irw''' - нет, то проблема с конфигом пульта. Стоит попробовать использовать другой конфиг, либо создать новый. | ||
=== Не работает передача === | === Не работает передача === | ||
* Попробовать передавать обращаясь к LIRC напрямую: | * Попробовать передавать обращаясь к LIRC напрямую: | ||
<pre> | <pre> | ||
Строка 109: | Строка 94: | ||
(названия пульта и кнопки должны соответствовать используемому конфигу). | (названия пульта и кнопки должны соответствовать используемому конфигу). | ||
* Убедиться что аппаратная часть работает - например, можно посмотреть на ИК-светодиод через камеру смартфона (светодиод должен мигать при передаче) | * Убедиться что аппаратная часть работает - например, можно посмотреть на ИК-светодиод через камеру смартфона (светодиод должен мигать при передаче) | ||
Версия 01:05, 24 ноября 2015
В этой статье описывается прием и передача сигналов пультов управления бытовой техникой, работающих в инфракрасном диапазоне (то есть большинство пультов от телевизоров, кондиционеров, и т. д.).
Аппаратная часть
На Wiren Board 5 необходимые сигналы выведены на разъем mini-jack 3.5mm с со следующей распиновкой:
- Tip (левый аудиоканал) - питание 5В/передача IR.
- Ring (правый аудиоканал) - прием IR
- Sleeve (земля) - земля
Для приема ИК-сигналов необходимо подключить приемник (например, типа TSOP1738, AX-1838HS или аналогичного) согласно распиновке. Номинальная частота несущей приемника должна примерно соответствовать частоте несущей используемого пульта, в противном случае возможно ухудшение или полная невозможность приема сигнала от пульта.
Для передачи ИК-сигналов используется любой ИК-светодиод (с соответствующим токоограничивающим резистором), подключенный между землей и питанием. При передаче напряжение питания будет промодулировано передаваемым сигналом и несущей.
Возможно одновременное подключение приемника и передатчика.
TODO: нарисовать картинку
Программная часть
На уровне ядра за работу с ИК на Wiren Board 5 отвечает драйвер lirc-pwm. Он предоставляет устройство /dev/lirc0.
С этим устройством взаимодействует демон lircd из состава пакета LIRC, осуществляющий декодирование последовательностей импульсов в события нажатых на пульте кнопок согласно файлам конфигурации пультов. Также этот демон способен осуществлять обратное преобразование для передачи сигналов нажатия кнопок управляемым устройствам.
Наконец, трансляцию событий от lircd в сообщения MQTT и обратно осуществляет демон wb-mqtt-lirc
Установка и настройка
- Установка пакетов
root@wirenboard:~# apt-get udpate root@wirenboard:~# apt-get install wb-mqtt-lirc lirc-scripts
- Отредактировать файл /etc/lirc/hardware.conf и установить следующие значения:
- DRIVER=default
- DEVICE=/dev/lirc0
- Все остальное оставить по-умолчанию.
- Скачать или сгенерировать файл конфигурации пульта и положить его в /etc/lirc/lircd.conf.d/.
Скачивание существующего конфига пульта
root@wirenboard:~# irdb-get update root@wirenboard:~# irdb-get find 687C sony/RM-687C.lircd.conf root@wirenboard:~# irdb-get download sony/RM-687C.lircd.conf Downloaded https://sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/sony/RM-687C.lircd.conf as RM-687C.lircd.conf root@wirenboard:~# mv RM-687C.lircd.conf /etc/lirc/lircd.conf.d/
Создание нового конфига пульта
TODO: описать как пользоваться irrecord
После завершения конфигурации, следует перезапустить службы lirc и wb-mqtt-lirc
root@wirenboard:~# service lirc restart && service wb-mqtt-lirc restart
MQTT-интерфейс
wb-mqtt-lirc создает устройство /devices/wb-lirc/, принятые нажатия публикуются в топике /devices/wb-lirc/controls/Key в формате <название_пульта>:<название_кнопки>:<повтор>. После отпускания кнопки в этом топике публикуется сообщение с пустым телом.
Пример:
root@wirenboard:~# mosquitto_sub -v -t '/devices/wb-lirc/#' /devices/wb-lirc/meta/name IR Remote Control /devices/wb-lirc/controls/Key/meta/order 1 /devices/wb-lirc/controls/Key/meta/type text /devices/wb-lirc/controls/Key Sony_RM-687C:KEY_7:0 /devices/wb-lirc/controls/Key Sony_RM-687C:KEY_7:1 /devices/wb-lirc/controls/Key Sony_RM-687C:KEY_7:2 /devices/wb-lirc/controls/Key Sony_RM-687C:KEY_7:3 /devices/wb-lirc/controls/Key (null)
Для отправки нажатия кнопки следует опубликовать сообщение в формате <название_пульта>:<название_кнопки> в топике /devices/wb-lirc/controls/Key/on
Устранение неисправностей
Не работает прием
- Убедиться что драйвер "видит" импульсы от приемника.
- Остановить сервис lirc (командой service lirc stop)
root@wirenboard:~# mode2 -d /dev/lirc0
- Должны бежать цифры при нажатии кнопок на пульте, если нет - проблема в "железе" или в несоответствии несущей пульта и приемника. Следует попробовать использовать другой приемник.
- Убедиться что lirc может декодировать последовательности импульсов согласно конфигу пульта:
- Запустить обратно lirc (service lirc start)
root@wirenboard:~# irw
- Должные бежать строчки при нажатии кнопок на пульте. Если mode2 работает, а irw - нет, то проблема с конфигом пульта. Стоит попробовать использовать другой конфиг, либо создать новый.
Не работает передача
- Попробовать передавать обращаясь к LIRC напрямую:
root@wirenboard:~# irsend SEND_START Sony_RM-687C KEY_3 ... root@wirenboard:~# irsend SEND_STOP Sony_RM-687C KEY_3
(названия пульта и кнопки должны соответствовать используемому конфигу).
- Убедиться что аппаратная часть работает - например, можно посмотреть на ИК-светодиод через камеру смартфона (светодиод должен мигать при передаче)