IR-дистанційне керування. Використання LIRC у Python.
Інфрачервоне дистанційне керування давно стало звичайним явищем і присутні у багатьох побутових приладах. До мікрокомп’ютера Raspberry Pi також можна підключити IK-приймач і керувати ним зі звичайного пульту, наприклад, від звичайного телевізора.
Я придбав плату з IK-приймачем та пультом. Але можна використовувати у якості IK-приймача щось простіше, наприклад 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 - Пін входу від приймача.
gpio_out_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 - Пін входу від приймача.
gpio_out_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 — PWM і Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR мікроконтролерів за допомогою Raspberry Pi
- Raspberry Pi — LCD display 1602
- Raspberry Pi — WiFi
- 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 без клавіатури та монітору
- IR-дистанційне керування. Використання LIRC у Python
- Raspberry Pi. Raspbian. Відправлення пошти через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гіроскоп – акселерометр
- HMC5883L Магнітометр
- PWM контролер з інтерфейсом I2С на базі мікросхеми PCA9685
- Метеостанція на Raspberry Pi своїми руками
- Raspberry Pi. Live-stream video
Недавні записи
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
Tags
battery soldering java-script ngnix adc rs-232 flask esp8266 watchdog web exti solar mongodb rtc sms pwm usart books ethernet smd git websocket meteo css python dc-dc displays led ssd1306 eeprom gpio barometer max1674 mpx4115a brushless motor mpu-6050 timer sensors remap servo bldc atmega pmsm 3d-printer flash encoder examples dma raspberry-pi tim ssd1331 piezo mpu-9250 rfid eb-500 foc bme280 gps nvic dht11 bluetooth hih-4000 stm32 st-link docker uart avr html wifi bmp280 bkp nodemcu options usb lcd programmator i2c capture
Архіви