11 KiB
Работа с ИК-датчиками на Raspberry Pi 3
Подключение ИК-приемника
Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND – земля, V/VCC – питание 5В, S/OUT – сигнал.
Hint Сигнальный порт не обязательно должен подключаться к порту GPIO 17, данный пин можно изменить во время настройки портов in/out.
Настройка ИК-приемника и работа с модулем LIRC
LIRC (Linux Infrared Remote Control) – стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту. LIRC поддерживается Raspbian.
Для установки модуля LIRC нужно подключить вашу Raspberry Pi к интернету и выполнить консольные команды:
sudo apt-get update
sudo apt-get install lirc
Hint Для корректного редактирования системных файлов требуется иметь права доступа администратора, используйте
sudoпри вызове редактора текста.
После установки модуля нужно отредактировать файл /etc/modules и добавить в него строки:
lirc_dev
lirc_rpi gpio_in_pin=18 gpio_out_pin=17
Где:
gpio_in_pin– пин входа от приемникаgpio_out_pin– пин выхода для передатчика
Обновите следующую строку в файле /boot/config.txt:
dtoverlay=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"
Обновите следующие строки в файле /etc/lirc/lirc_options.conf
driver = default
device = /dev/lirc0
Все требуемые настройки сделаны, теперь нужно перезагрузить соответствующий демон. Для этого выполните:
sudo service lircd resart
После перезагрузки проверьте его статус, вызвав команду:
sudo /etc/init.d/lircd status
Если вы все сделали правильно, то статус работы должен быть active.
Перед проведением тестирования лучше будет перезагрузить Raspberry Pi командой sudo reboot.
Чтобы проверить, что установленный модуль LIRC работает, выключите демон lircd и вызовите соответствующую команду:
sudo /etc/init.d/lircd stop
mode2 -d /dev/lirc0
Теперь, направив ИК-передатчик на ваше устройство и нажав несколько кнопок, вы должны увидеть что-то похожее на это:
space 402351
pulse 135
space 7085
pulse 85
space 2903
pulse 560
space 1706
pulse 535
Hint В ситуации, если вы используете ИК-передатчик (TV-пульт, пульт от кондиционеров, и т. д.) и во время проверки вы не получаете сигнал, возможно ваш пульт использует другую частоту передачи сигнала. При использовании приемников типа TSOP 22XX рабочая частота приема сигнала будет в диапазоне от 30 до 50 кГц.
Запись своей конфигурации ИК-пульта
В случае, если вы хотите использовать свой ИК-передатчик, вам нужно записать его характерные настройки с помощью прилагающегося модуля irrecord. Для этого вам нужно выключить демон lircd и вызвать соответствующую команду. Во время клабирбровки пульта точно выполняйте все написанные интсрукции.
Hint Обратите внимание, что на последнем шаге калибровки вам нужно будет задать наименования кнопок, которые вы захотите расшифровать программно. Для того чтобы посмотреть список доступных имен, вызовите команду
irrecord --list-namespace.
irrecord -d /dev/lirc0 ~/lircd.conf
Если у вас успешно получилось записать конфигурацию вашего пульта, в папке /home/pi/ должен был появиться файл введенное-имя.lircd.conf. Теперь вам нужно перенести записанный конфигурационный файл в рабочую папку lirc и перезагрузить демон:
sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc restart
Для того чтобы проверить, распознается ли записаная вами конфигурация, вывзовите соответствующий модуль. Теперь при нажатии на кнопки, которые вы записали в ранее созданной конфигурации, в терминал будет выводиться отладочная информация о том, какая кнопка была нажата.
irw
Если вы все сделали правильно, то вы увидите выход похожий на:
TODO Добавить реальные строчки раскодированных сигналов пульта
000000007689718e 01 KEY_OK
Это значит, что ваша конфигурация корректно распознается программой и теперь вы можете запрограммировать нужные вам действия в случае нажатия определенной клавиши.
Работа с ИК-датчками в Python
Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, требуется установить пакет python-lirc, для этого используйте команду:
sudo apt-get install python-lirc
Для корректного получения информации в собственном скрипте нужно создать файл lircrc, в котором будут храниться настройки ваших кнопок и программный ответ в случае их вызова.
Данный файл создается в той же папке, из которой будет вызван ваш скрипт, по умолчанию это /home/pi/.
Для того чтобы создать требуемый файл используйте любой текстовый редактор:
sudo nano .lircrc
Формат данного файла должен быть примерно таким:
begin
prog = myprogram
button = KEY_1
config = one
end
begin
prog = myprogram
button = KEY_2
config = two
end
Где:
prog– имя программы, которое вы будете вызывать в своем скриптеbutton– наименование клавиши, которое вы вводили во время настройки пультаconfig– информация, которая будет передана вашей программе в случае нажатия указаной клавиши
Все настройки выполнены и теперь можно переходить непосредственно к программированию ИК-сигналов.
Для этого нужно создать Python скрипт, который будет принимать значения нажатых клавиш и выполнять в соответствии с ними требуемые действия. Пример такого скрипта:
import lirc
import fly_module
# ...
sockid = lirc.init('myprogram')
inf = lirc.nextcode()
if inf[0] == 1:
print('You pressed key 1')
elif inf[0] == 2:
print('You pressed key 2')
lirc.deinit()
Работа с ИК-передатчиком
Для того, что бы работать с ИК-передатчиком, подключите его к тем портам, которые указывали при настройке.
Hint В случае, если вы используете готовую плату ИК-передатчика, подключите ее к нужным пинам Raspberry в соответсвии с маркировкой пинов, точно так же как и с приемником.
Если все правильно подключено, то можно отправлять сигналы заданные на моменте настройки пульта, используя команду:
irsend SEND_ONCE deviceName keyName
Где:
- SEND_ONCE - параметр отвечающий за то, посылаете вы один сигнал или он передается как от зажатой кнопки
- deviceName - имя пульта, которое вы давали во время его настройки
- keyName - имя одной из кнопок, которые были вами заданы во время настройки пульта
Для того чтобы работать с irsend внутри вашего скрипта требуется установить модуль python-irsend, для этого используйте команду:
pip install py-irsend
Чтобы использовать irsend импортируйте библиотеку и вызовите соответствующую команду:
from py_irsend import irsend
irsend.send_once('YourRemote', ['YourKey'])
Где:
- YourRemote - название вашего пульта указанное при настройке
- YourKey - имя одной из заданных при настройке кнопок