ИК-дистанционное управление. Использование LIRC в Python
Инфракрасное дистанционное управления давно стало обычным явлением и присутствует во многих бытовых приборах. К микрокомпьютеру Raspberry Pi можно подключить ИК-приемник и управлять им обычным пультом, например, от обычного телевизора.
Я приобрел плату с ИК-приемником и пультом. Но можно использовать в качестве ИК-приемника что-то попроще, например TSOP382. Его можно подключать напрямую, как показано на схеме. А в качестве пульта использовать любой пульт дистанционного управления от бытовых приборов.
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 Pi — Что это такое?
- Raspberry Pi — GPIO
- Raspberry Pi — UART
- Raspberry Pi — FT232
- Raspberry Pi — ШИМ и Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR микроконтроллеров с помощью Raspberry Pi
- Raspberry Pi — LCD дисплей 1602
- Raspberry Pi — Wi-Fi
- Raspberry-Pi — I2C (TWI)
- Raspberry Pi - DS18B20
- Raspberry Pi Camera
- nRF24L01+ ATMEGA + Raspberry Pi
- BMP180 + Raspberry Pi + WH1602
- Wi-Fi Метео станция
- Raspbian. Apache + PHP + Python + MySQL
- Устанавливаем Raspbian на Raspberry Pi без клавиатуры и монитора
- ИК-дистанционное управление. Использование LIRC в Python
- Raspberry Pi. Raspbian. Отправка почты через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гироскоп – акселерометр
- HMC5883L Магнитометер
- PWM контролер на базе микросхемы PCA9685
- Метеостанция на Raspberry Pi своими руками
- Raspberry Pi. Live-stream video
Вы не могли бы помочь советом? У меня все идет хорошо до шага когда нужно проверить работу записанных кнопок, по команде "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 В чем может быть дело? Заранее спасибо!
Тяжело сказать. Ну у меня конфиг немного по другому выглядит: 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
Недавні записи
- Своя бібліотека для векторного керування безколекторними моторами
- Not Allowed
- Адаптивний ПІД регулятор
- Конструктор регуляторів моторів. Структура.
- Конструктор регуляторів моторів. Анонс.
- Golang + Vue + PostgreSQL #2
- Golang + Vue + SQLite #1
- FOC Position Control. Векторне управління - Стабілізація положення
- Flask & Vue. Завантаження файлів. Приклад № 2.10
- Рекуперація. FOC і цікаві досліди
Tags
gpio piezo hih-4000 bme280 mpu-6050 options watchdog capture led brushless foc docker wifi dc-dc flask tim gps mpu-9250 sms bldc java-script examples solar smd max1674 rfid ethernet raspberry-pi sensors usart lcd dht11 displays motor websocket timer flash pwm stm32 python bmp280 battery eb-500 web html css mongodb books git ssd1306 i2c dma exti atmega pmsm meteo avr mpx4115a remap eeprom encoder rs-232 soldering bluetooth esp8266 ngnix ssd1331 rtc bkp servo st-link programmator uart 3d-printer usb adc nvic nodemcu barometer
Архіви