ИК-дистанционное управление. Использование 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
Она не распознает записанные кнопки - при нажатии на них ничего не происходит. При этом файл конфета есть и выглядит нормальным:
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
Додати коментар
Недавні записи
- 🇺🇦 FOC Board STM32F103RB 🧩
- STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
- Flask✙Gunicorn✙Nginx➭😎
- STM32 Motor control SDK - програмне керування обертам мотора
- STM32 Motor control SDK - як створити перший проект
- Vue SVG. Приклад побудови живого параметричного креслення
- Вимірювання моменту мотора
- Vue SVG - компонент. Приклад 📑
- Flask + Vue 🏁 Финальный пример 🏁
- Flask, CORS, JSON-файл. Пример#6
Tags
bldc brushless stm32 motor web html css flask atmega foc git java-script pmsm raspberry-pi python websocket mongodb esp8266 nodemcu st-link tim timer docker ngnix programmator ssd1331 ssd1306 wifi uart meteo bme280 bmp280 i2c gps mpu-6050 mpu-9250 sensors 3d-printer options usb barometer remap watchdog flash eeprom rtc bkp encoder pwm servo capture examples dma adc nvic usart gpio books battery dc-dc sms max1674 avr lcd dht11 piezo rs-232 rfid solar exti bluetooth eb-500 displays ethernet led smd soldering mpx4115a hih-4000
Архіви