There are no translations available.
Зазвичай віддалене керування використовується для управління ТВ-картою або XMBC, однак воно також забезпечує хороший інтерфейс для управління GPIO на Raspberry Pi.
Adafruit має Mini Remote і ІЧ-датчик, які ідеально підходять для цього:
В нашому прикладі використаємо пульт дистанційного керування для управління кількома світлодіодами, підключеними до деяких виводів GPIO на Raspberry Pi.
Підключення ІЧ-датчика до Raspberry Pi
Підключити ІЧ-датчик до Raspberry Pi дуже просто, оскільки на датчику є тільки 3 контакти: GND (земля), 3В і Output (вихід). Вихід підключимо до GPIO 18. Ви можете вибрати інший вивід, просто прийміть це до відома, коли буде потрібно вказати вивід при установці LIRC.
Ми приєднаємо три світлодіоди до GPIO 23, 24 і 25, а через опори 270 Ом катоди кожного світлодіода приєднаємо до земляного виводу GND GPIO, як показано на схемі:
Встановлення LIRC
LIRC - пакет, який дозволяє декодувати інфрачервоні сигнали багатьох (але не всіх) найчастіше використовуваних пультів дистанційного керування. LIRC запускається як демон (служба), який буде декодувати ІК-сигнали, отримані від драйверів пристроїв і надавати інформацію на роз’ємі. Далі ми написали програму для користувача, щоб він контролював вхідні події на цьому роз'ємі за допомогою клієнтської бібліотеки LIRC.
1. Нам потрібно встановити LIRC і клієнтські бібліотеки:
pi@raspberrypi ~ $ sudo apt-get install lirc liblircclient-dev
2. Тепер треба додати два рядки нижче до /etc/modules. Це дозволить запуск модулів при завантаженні. Вказаний нижче вивід 18 буде використовуватися, щоб прийняти вихідний сигнал ІЧ-датчика.
lirc_dev
lirc_rpi gpio_in_pin=18
3. Редагуємо /etc/lirc/hardware.conf, щоб він виглядав точно так, як показано нижче:
# /etc/lirc/hardware.conf
#
# Аргументи, які будуть використовуватися при запуску lircd
LIRCD_ARGS="--uinput"
# Не запускайте lircmd навіть якщо здається, що конфігураційний файл хороший
# START_LIRCMD=false
# Не запускайте irexec, навіть якщо хороший конфігураційний файл, здається, існує
# START_IREXEC=false
# Спробуйте завантажити відповідні модулі ядра
LOAD_MODULES=true
# Запуск "lircd --driver=help", щоб отримати список підтримуваних драйверів
DRIVER="default"
# Зазвичай /dev/lirc0 є коректною установкою для систем з використанням udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Конфігураційні файли для замовчуванням для будь-якого Вашого обладнання
LIRCD_CONF=""
LIRCMD_CONF=""
# /etc/lirc/hardware.conf
4. Перезавантажуємося.
Швидкий тест
Щоб виконати швидкий тест і побачити, чи працює LIRC, ми повинні зупинити демона LIRC і запустити mode2. mode2 показує довжину імпульсів/проміжків інфрачервоних сигналів.
pi@raspberrypi ~ $ sudo /etc/init.d/lirc stop
pi@raspberrypi ~ $ mode2 -d /dev/lirc0
При натисканні кнопок на пульті дистанційного керування mode2 виведе щось схоже на те, що показано нижче:
pulse 627
space 514
pulse 624
space 513
pulse 599
space 521
pulse 618
space 1668
pulse 589
space 532
Запис ІЧ-кодів від пульта
irrecord допоможе нам виявити ІЧ-коди, які використовує пульт дистанційного керування і надати допомогу в створенні файлу conf, який буде використовуватися з LIRC:
pi@raspberrypi ~ $ irrecord -d /dev/lirc0 ~/lircd.conf
Після запуску irrecord покаже докладні інструкції про те, як налаштувати Ваш пульт. Проте, ось підказки:
1. При запиті, натискайте всі кнопки на пульті дистанційного керування, поки не попросять зупинити.
2. Назначте заздалегідь певне ім'я для кожної кнопки: при запуску irrecord --list-namespace відобразиться список доступних імен.
Файл конфігурації для Adafruit MinRemote виглядає так:
# Please make this file available to others
# by sending it to <
Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра.
>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Tue Oct 8 07:05:38 2013
#
# contributed by
#
# brand: /home/pi/lircd.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
name /home/pi/lircd.conf
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9006 4447
one 594 1648
zero 594 526
ptrail 587
repeat 9006 2210
pre_data_bits 16
pre_data 0xFD
gap 107633
toggle_bit_mask 0x0
begin codes
KEY_1 0x08F7
KEY_2 0x8877
KEY_3 0x48B7
KEY_4 0x28D7
KEY_5 0xA857
KEY_6 0x6897
KEY_7 0x18E7
KEY_8 0x9867
KEY_9 0x58A7
KEY_0 0x30CF
KEY_DOWN 0xB04F
KEY_LEFT 0x10EF
KEY_UP 0xA05F
KEY_RIGHT 0x50AF
KEY_BACK 0x708F
KEY_ENTER 0x906F
KEY_SETUP 0x20DF
KEY_PAUSE 0x609F
KEY_PAUSE 0x807F
KEY_STOP 0x609F
KEY_VOLUMEUP 0x40BF
KEY_VOLUMEDOWN 0x00FF
end codes
end remote
Тепер замініть існуючий файл conf (який, швидше за все, порожній) новим, який Ви щойно створили:
pi@raspberrypi ~ $ sudo cp lircd.conf /etc/lirc/lircd.conf
Перезавантажте LIRC:
pi@raspberrypi ~ $ sudo /etc/init.d/lirc restart
Тест нового файлу конфігурації для віддаленого доступу
Ви можете використати irw, щоб протестувати нову конфігурацію. irw передає дані з роз’єма Unix на стандартний вихід stdout.
Ви повинні отримати на виході щось схоже на показане нижче .... Це було при натисканні клавіш 1, 2 і 3 на пульті дистанційного керування.
pi@raspberrypi ~ $ irw
0000000000fd08f7 00 KEY_1
0000000000fd08f7 01 KEY_1
0000000000fd08f7 02 KEY_1
0000000000fd8877 00 KEY_2
0000000000fd8877 01 KEY_2
0000000000fd8877 02 KEY_2
0000000000fd48b7 00 KEY_3
Створення програми для управління GPIO
Використаємо мову C, щоб написати просту програму для управління трьома світлодіодами, підключеними до GPIO.
Нам також буде потрібний WiringPi для контролю виводів, а також скористаємося клієнтською бібліотекою LIRC для отримання даних з ІЧ-датчика.
По-перше, встановимо WiringPi:
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ git clone git://git.drogon.net/wiringPi
pi@raspberrypi ~ $ cd wiringPi
pi@raspberrypi ~ $ git pull origin
pi@raspberrypi ~ $ ./build
Код
Наведений нижче код дозволить Вам контролювати три світлодіоди, підключені до GPIO на Raspberry Pi. Ми будемо використовувати кнопки 1,2 і 3 на числовій клавіатури від Mini Remote Adafruit, щоб вмикати і вимикати ці світлодіоди.
Код включає в себе багато коментарів, які допоможуть Вам зрозуміти, як він працює.
#include <wiringPi.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <lirc/lirc_client.h>
#include <time.h>
void flipLED (int led);
//Номери виводів WiringPi, які використовуються нашими світлодіодами
#define LED1 4
#define LED2 5
#define LED3 6
#define ON 1
#define OFF 0
int main(int argc, char *argv[])
{
struct lirc_config *config;
//Таймер для наших кнопок
int buttonTimer = millis();
char *code;
char *c;
//Ініціалізація WiringPi і встановлення виводів WiringPi 4,5 і 6 (GPIO 23, 24 і 25) для виводу. До цих виводів підключені світлодіоди.
if (wiringPiSetup () == -1)
exit (1) ;
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
//Ініціалізація LIRC. Вихід при збої
if(lirc_init("lirc",1)==-1)
exit(EXIT_FAILURE);
//Читання конфігурації LIRC за замовчуванням в /etc/lirc/lircd.conf. Це конфігурація для пульта дистанційного керування.
if(lirc_readconfig(NULL,&config,NULL)==0)
{
//Виконуємо поки роз’єм LIRC відкритий: 0=відкритий -1=закритий. Поки (lirc_nextcode(&code)==0)
{
//Якщо код = NULL, то це означає, що ніщо не повернулося з роз’єму LIRC,
//тоді пропустіть рядки нижче і почніть цикл знову.
if(code==NULL) continue;{
//Переконайтеся, що існує пауза 400 мс до перевірки натискання кнопок.
if (millis() - buttonTimer > 400){
//Перевіряємо, чи з'являється рядок "KEY_1" в будь-якому місці рядка 'code'.
if(strstr (code,"KEY_1")){
printf("MATCH on KEY_1\n");
flipLED(LED1);
buttonTimer = millis();
}
else if(strstr (code,"KEY_2")){
printf("MATCH on KEY_2\n");
flipLED(LED2);
buttonTimer = millis();
}
else if(strstr (code,"KEY_3")){
printf("MATCH on KEY_3\n");
flipLED(LED3);
buttonTimer = millis();
}
}
}
//Необхідно звільнити код до наступного циклу
free(code);
}
//Звільняємо структури даних, пов'язані з config
lirc_freeconfig(config);
}
//lirc_deinit()закриває з'єднання з lircd і робить деякі внутрішні очищення.
lirc_deinit();
exit(EXIT_SUCCESS);
}
void flipLED (int led)
{
//Якщо діод горить, то вимкнути його. В іншому випадку він вимкнений і тому ми повинні включити його.
if(digitalRead(led)==ON)
digitalWrite(led, OFF);
else
digitalWrite(led, ON);
}
Компілюємо наведений вище код за допомогою:
pi@raspberrypi ~ $ gcc -o example example.c -lwiringPi -llirc_client
Створюємо порожній файл lircrc, інакше lirc буде скаржитися:
pi@raspberrypi ~ $ touch /etc/lirc/lircrc
Запускаємо з:
pi@raspberrypi ~ $ sudo ./example
От і все. Залишилось понатискувати клавіші 1, 2 і 3 на пульті керування
|