Як керувати GPIO на Raspberry Pi з інфрачервоного пульта дистанційного керування
Оценка пользователей: / 4
ПлохоОтлично 
There are no translations available.

IR-control-GPIOЗазвичай віддалене керування використовується для управління ТВ-картою або XMBC, однак воно також забезпечує хороший інтерфейс для управління GPIO на Raspberry Pi.
Adafruit має Mini Remote і ІЧ-датчик, які ідеально підходять для цього:
 IR-control  IR-sensor
В нашому прикладі використаємо пульт дистанційного керування для управління кількома світлодіодами, підключеними до деяких виводів GPIO на Raspberry Pi.
Підключення ІЧ-датчика до Raspberry Pi
Підключити ІЧ-датчик до Raspberry Pi дуже просто, оскільки на датчику є тільки 3 контакти: GND (земля), 3В і Output (вихід). Вихід підключимо до GPIO 18. Ви можете вибрати інший вивід, просто прийміть це до відома, коли буде потрібно вказати вивід при установці LIRC.
Ми приєднаємо три світлодіоди до GPIO 23, 24 і 25, а через опори 270 Ом катоди кожного світлодіода приєднаємо до земляного виводу GND GPIO, як показано на схемі:
IR-control-GPIO-1
Встановлення 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 на пульті керування smiley
(Джерело EN: ozzmaker.com)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting