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


