сайт для палких паяльників

Инфракрасное дистанционное управления давно стало обычным явлением и присутствует во многих бытовых приборах. К микрокомпьютеру Raspberry Pi можно подключить ИК-приемник и управлять им обычным пультом, например, от обычного телевизора.

Я приобрел плату с ИК-приемником и пультом. Но можно использовать в качестве ИК-приемника что-то попроще, например TSOP382. Его можно подключать напрямую, как показано на схеме. А в качестве пульта использовать любой пульт дистанционного управления от бытовых приборов.

raspberry_lirc00

LIRC – Linux Infrared Remote Control

LIRC стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту. LIRC поддерживается Raspbian.

Устанавливаем LIRC


sudo apt-get install lirc

Редактируем файл /etc/modules. Добавляем строки:

lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22

Где:
gpio_in_pin – Pin входа от приемника.
gpio_out_pin – Pin выхода для передатчика. В моем случае не используется из-за отсутствия передатчика.

Редактируем файл /etc/lirc/hardware.conf:

########################################################
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

# 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=""
########################################################

Обращаем внимание на строку:
DRIVER=”default”

Перезапускаем lircd:


sudo /etc/init.d/lirc stop
sudo /etc/init.d/lirc start

Редактируем файл /boot/config.txt. Добавляем строку:

dtoverlay=lirc-rpi,gpio_in_pin=23,gpio_out_pin=22

Где:
gpio_in_pin – Pin входа от приемника.
gpio_out_pin – Pin выхода для передатчика. В моем случае не используется из-за отсутствия передатчика.

Перезагружаем Raspberry Pi:


reboot

Тестируем IR (ИК) приёмник


sudo /etc/init.d/lirc stop
mode2 -d /dev/lirc0

Нажимаем на кнопки пульта и должны увидеть что-то похожее на это:

space 16300
pulse 95
space 28794
pulse 80
space 19395
pulse 83
space 402351
pulse 135
space 7085
pulse 85
space 2903

lircd.conf

Существует очень много различных ИК-пультов с разным форматом передачи данных, количеством кнопок и тому подобное. Для того, чтобы lircd нормально разбирал команды с пульта для каждого пульта нужен отдельный конфиг. Создать новый конфиг рекомендуется используя irrecord.

При использовании irrecord он будет просить вас несколько раз нажимать кнопки различным образом. Выполняйте все, как он просит. В конце надо привязать названия к кнопкам. Не обязательно ко всем, можно только к тем, которые планируете использовать.


irrecord -d /dev/lirc0 ~/lircd.conf

Копируем конфиг в нужное место:


sudo cp ~/lircd.conf /etc/lirc/lircd.conf

Перезапускаем lirc:


sudo /etc/init.d/lirc restart

Или:


service lirc start

Проверяем работу:


irw

При нажатии кнопок на пульте на консоли должна появляться информация, какая кнопка нажата.

irexec

irexec – это программа, которая выполняет команды, в соответствии с полученными ИК сигналами. Команды настраиваются с помощью файла ~/.lircrc

Пример файла:

begin
prog = irexec
button = KEY_1
config = echo "You pressed one"
repeat = 0
end

Запускаем irexec и при нажатии на “1” должны увидеть

You pressed one
You pressed one
You pressed one

python-lirc

python-lirc является расширение Python, которое дает нам возможность через настройки в конфиге ~/.lircrc получать сигналы от ИК пульта в собственном срипте. Сразу нам нужно добавить несколько строк в нашем ~/.lircrc:

begin
prog = irexec
button = KEY_1
config = echo "You pressed one"
repeat = 0
end

begin
prog = myprogram
button = KEY_1
config = one
end

begin
prog = myprogram
button = KEY_2
config = two
end

Теперь можем использовать ИК-пульт в собственном скрипте на Python:


import lirc
sockid = lirc.init("myprogram")
lirc.nextcode()
lirc.deinit()

raspberry_lirc01 raspberry_lirc02
Успехов.

Смотри также:

2 комментария: ИК-дистанционное управление. Использование LIRC в Python

  • Олег говорить:

    Вы не могли бы помочь советом? У меня все идет хорошо до шага когда нужно проверить работу записанных кнопок, по команде “irw”.

    Она не распознает записанные кнопки – при нажатии на них ничего не происходит. При этом файл конфета есть и выглядит нормальным:

    begin remote

    name /home/dog/lircd.conf
    flags RAW_CODES|CONST_LENGTH
    eps 30
    aeps 100

    gap 108169

    begin raw_codes

    name KEY_CHANNEL
    8994 4533 560 600 559 601
    558 602 558 600 567 593
    559 601 559 602 557 601
    559 1682 560 1684 557 1691
    552 1682 560 1681 561 1682
    559 1691 552 1683 558 1685
    557 601 558 1685 558 600
    559 607 553 601 559 1681
    561 599 560 600 559 1683
    559 602 564 1677 559 1682
    560 1683 559 600 559 1683
    566

    end raw_codes

    end remote

    В чем может быть дело? Заранее спасибо!

    • andre говорить:

      Тяжело сказать. Ну у меня конфиг немного по другому выглядит:

      begin remote

      name /root/lircd.conf
      bits 16
      flags SPACE_ENC|CONST_LENGTH
      eps 30
      aeps 100

      header 8919 4420
      one 581 1643
      zero 581 531
      ptrail 577
      repeat 8898 2193
      pre_data_bits 16
      pre_data 0xFF
      gap 106171
      min_repeat 1
      # suppress_repeat 1
      # uncomment to suppress unwanted repeats
      toggle_bit_mask 0xF8F8

      begin codes
      KEY_0 0x6897
      KEY_2 0x18E7
      KEY_1 0x30CF
      KEY_3 0x7A85
      KEY_4 0x10EF
      KEY_5 0x38C7
      KEY_6 0x5AA5
      KEY_7 0x42BD
      KEY_8 0x4AB5
      KEY_9 0x52AD
      KEY_PLAY 0xC23D
      KEY_NEXT 0x02FD
      end codes

      end remote

Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна