Files
clover/docs/ru/ir_sensors.md
Oleg Kalachev d448928bc7 Fix
2019-02-19 16:11:11 +03:00

11 KiB
Raw Blame History

Работа с ИК-датчиками на Raspberry Pi 3

Подключение ИК-приемника

Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND земля, V/VCC питание 5В, S/OUT сигнал.

ir reciver connection to raspberry

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()

Работа с ИК-передатчиком

Для того, что бы работать с ИК-передатчиком, подключите его к тем портам, которые указывали при настройке.

IR transmitter connection to raspberry IR transmitter scheme

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 - имя одной из заданных при настройке кнопок