# Работа с ИК-датчиками на Raspberry Pi 3 > **Caution** Данная статья не актуальна для последних версий образа *clover* и работает только на версиях *clover_v0.16-clover_v0.17*. Инфракрасные датчики – удобный инструмент для передачи каких-либо команд на коптер. Они гибки в настройке и взаимодействие с ними возможно из языка Python. ## Подключение ИК-приемника Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND – земля, V/VCC – питание 5В, S/OUT – сигнал. ir reciver connection to raspberry > **Hint** Сигнальный порт не обязательно должен подключаться к порту GPIO 17, данный пин можно изменить во время [настройки портов in/out](#in/out). ## Настройка ИК-приемника и работа с модулем LIRC LIRC (Linux Infrared Remote Control) – стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту. LIRC поддерживается Raspbian. Для установки LIRC и сопутствующих модулей нужно подключить вашу Raspberry Pi к интернету и выполнить консольные команды: ```bash sudo apt-get update sudo apt-get install lirc sudo apt-get install python-lirc pip install py-irsend ``` > **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 ``` Все требуемые настройки сделаны, теперь нужно перезагрузить ваше устройство Raspberry Pi для завершения установки. Для этого выполните: ```bash sudo reboot ``` После перезагрузки проверьте его статус, вызвав команду: ```bash sudo /etc/init.d/lircd status ``` Если вы все сделали правильно, то статус работы должен быть `active`. Чтобы проверить, что установленный модуль LIRC работает, выключите демон `lircd` и вызовите соответствующую команду: ```bash 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`. ```bash irrecord -d /dev/lirc0 ~/lircd.conf ``` Если у вас успешно получилось записать конфигурацию вашего пульта, в папке `/home/pi/` должен был появиться файл `ваше-имя.lircd.conf`. Теперь вам нужно перенести записанный конфигурационный файл в рабочую папку `lirc` и перезагрузить демон: ``` sudo cp ~/ваше-имя.lircd.conf /etc/lirc/lircd.conf sudo /etc/init.d/lircd restart ``` Для того чтобы проверить, распознается ли записанная вами конфигурация, вызовите соответствующий модуль. Теперь при нажатии на кнопки, которые вы записали в ранее созданной конфигурации, в терминал будет выводиться отладочная информация о том, какая кнопка была нажата. ``` irw ``` > **Caution** В случае работы с некоторыми пультами бывают ситуации, когда битовые описания кнопок являются излишними и в таком случае у вас может не работать команда `irw`. Что бы исправить эту ошибку откройте файл `etc/lirc/lircd.conf` и проверьте как выглядит описание ваших клавиш, если оно похоже на `KEY_1 0x00FF6897 0x7EE0CF2C` и во всех строках у вас второе число совпадает, то вам нужно его удалить, что бы строки с назначением кнопок выглядели таким образом `KEY_1 0x00FF6897` и все числа в них были уникальны. После выполнения этих действий закройте файл и перезагрузите демон. Если вы все сделали правильно, то при нажатии кнопки вы увидите выход похожий на: ``` 0000000000ff6897 00 KEY_1 pult 0000000000ff6897 01 KEY_1 pult 0000000000ff9867 00 KEY_2 pult 0000000000ff9867 01 KEY_2 pult ``` Это значит, что ваша конфигурация корректно распознается программой и теперь вы можете запрограммировать нужные вам действия в случае нажатия определенной клавиши. ## Работа с ИК-датчиками в Python Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, вам потребуется пакет `python-lirc`. [Установите его](#install) при необходимости. Для корректного получения информации в собственном скрипте нужно создать файл `lircrc`, в котором будут храниться настройки ваших кнопок и программный ответ в случае их вызова. Данный файл создается в той же папке, из которой будет вызван ваш скрипт, по умолчанию это `/home/pi/`. Для того чтобы создать требуемый файл используйте любой текстовый редактор: ```bash 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 скрипт, который будет принимать значения нажатых клавиш и выполнять в соответствии с ними требуемые действия. Пример такого скрипта: ```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() ``` ## Работа с ИК-передатчиком Для того, что бы работать с ИК-передатчиком, подключите его к тем портам, которые указывали [при настройке](#in/out). IR transmitter connection to raspberry IR transmitter scheme > **Hint** В случае, если вы используете готовую плату ИК-передатчика, подключите ее к нужным пинам Raspberry в соответствии с маркировкой пинов, точно так же как и с приемником. Если все правильно подключено, то можно отправлять сигналы заданные на моменте [настройки пульта](#remote_control), используя команду: ```bash irsend SEND_ONCE deviceName keyName ``` Где: + SEND_ONCE - параметр отвечающий за то, посылаете вы один сигнал или он передается как от зажатой кнопки + deviceName - имя пульта, которое вы давали во время его [настройки](#remote_control) + keyName - имя одной из кнопок, которые были вами заданы во время настройки пульта Для того чтобы работать с `irsend` внутри вашего скрипта, вам потребуется модуль `python-irsend`, при необходимости [установите его](#install). Чтобы использовать `irsend` импортируйте библиотеку и вызовите соответствующую команду: ```python from py_irsend import irsend irsend.send_once('YourRemote', ['YourKey']) ``` Где: + YourRemote - название вашего пульта указанное при настройке + YourKey - имя одной из заданных при настройке кнопок