Присоединяйтесь!
Авторизация
gpio    wiringPi   

Wiring Pi - библиотека работы с GPIO. Часть 1

26 May 2015 - Автор admin

Данная статья рассчитана на пользователей, имеющих представления об основах GPIO Raspberry Pi.

Если эта тема для вас новая, то перед прочтением статьи рекомендую ознакомится с другими статьями для начинающих на тему GPIO - их можно найти в разделе"Документация"

В настоящее время самой популярной библиотекой для работы с GPIO на Raspberry Pi сталаwiringPi

Установка wiringPi

1. Если у вас нет утилиты git для работы с github-репозиториями, то устанавливаем:

sudo apt-get install git-core

2. Скачиваем исходники библиотеки из репозитория -

git clone git://git.drogon.net/wiringPi

3. Устанавливаем:

cd wiringPi
./build

Использование

После того, как библиотека wiring Pi установлена, вы можете использовать её в своих проектах. Пример:


#include  //подключаем заголовочный файл библиотеки
int main (void)
{
  wiringPiSetup () ; //инициализируем библиотеку
  pinMode (0, OUTPUT) ;
  for (;;)
  {
    digitalWrite (0, HIGH) ; delay (500) ;
    digitalWrite (0,  LOW) ; delay (500) ;
  }
  return 0 ;
}

Компилируем исходник:

gcc -Wall -o example example.c -lwiringPi

Запускаем:

sudo ./example

Библиотека должна быть обязательно инициализирована вызовом функции wiringPiSetup() После этого можно использовать библиотечные функции

Основные библиотечные функции

Если библиотека была инициализирована функцией wiringPiSetup() , то в функции следует передавать "виртуальный" номер пина. Таблицу соответствия "виртуальных" пинов (колонка wPi) реальным можно получить при помощи команды gpio readall (утилита gpio устанавливается автоматически вместе с библиотекой WiringPi)

void pinMode (int pin, int mode) Устанавливает режим работы пина. Доступные значения параметра mode: INPUT, OUTPUT, PWM_OUTPUT, GPIO_CLOCK. Примечание: режим работы PWM_OUTPUT поддерживается только пином BCM_GPIO 18, режим GPIO_CLOCK поддерживается только пином BCM_GPIO 4

void pullUpDnControl (int pin, int pud) Включает внутренние подтягивающие резисторы для пина, работающего в режиме INPUT. Возможные значения PUD_OFF (подтягивающие резисторы отключены), PUD_DOWN (подтяжка к земле), PUD_UP (подтяжка к 3.3v)/Сопротивление подтягивающих резисторов на Raspberry Pi составляет около 50KОм

void digitalWrite (int pin, int value) Устанавливает высокий (value=1)/низкий уровень(value=0) на пине, работающем в режиме OUTPUT

void pwmWrite (int pin, int value) Параметр value задаёт коэффициент заполнения импульса (про ШИМ и что такое заполнение импульса можно прочитать в этой статье -http://raspberrypi.ru/blog/readblog/50.html), value принимает значения от 0 (0% заполнения импульса) до 1024 (100% заполнение импульса). Аппаратная ШИМ поддерживается только пином BCM_GPIO 18

int digitalRead (int pin) Считывание состояния пина. В зависимости от логического уровня функция возвращает 0 или 1

analogRead (int pin) Функция считывает значение АЦП. Поскольку на Raspberry Pi нет встроенного АЦП, то перед вызовом функции в программе необходимо инициализировать внешний АЦП (пример использования можно найти в этой статье -http://raspberrypi.ru/blog/571.html)

analogWrite (int pin, int value) Функция записывает значение в АЦП.

Временные функции

unsigned int millis (void) Возвращает время (в миллисекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается через 49 дней

unsigned int micros (void) Возвращает время (в микросекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается приблизительно через 71 минуту

void delay (unsigned int howLong) Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в миллисекундах)

void delayMicroseconds (unsigned int howLong) Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в микросекундах)

Прерывания

int wiringPiISR (int pin, int edgeType, void (*function)(void)) Регистрирует функцию, которая будет выполнена при наступлении условия прерывания. Условие прерывания (параметр edgeType) может принимать следующие значения:

  • INT_EDGE_FALLING (прерывание при смене уровня на пине с высокого на низкий)
  • INT_EDGE_RISING (прерывание при смене уровня на пине с низкого на высокий)
  • INT_EDGE_BOTH (прерывание при любой смене уровня на пине)
  • INT_EDGE_SETUP

При условии INT_EDGE_SETUP не будет происходить инициализации пина - подразумевается, что он уже был настроен в другом приложении.

В случае если следующее прерывание наступает до окончания обработки предыдущего, то оно также будет обработано. Но если 2 прерывания будут находится в обработке одновременно, то последующие прерывания будут игнорироваться.

Функция-обработчик прерывания выполняется с высоким приоритетом (если программа запущена от пользователя root) и выполняетсяодновременнос основной программой. Также она имеет полный доступ к глобальным переменным и т.д

Продолжение следует...

26 May 2015
admin
автор статьи

Комментариев: 0

Ваш комментарий будет первым

Отправить комментарий

Авторизуйтесь для отправки комментария

Присоединяйтесь
Новые сообщения