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
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви


