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

  • Автор
Данная статья рассчитана на пользователей, имеющих представления об основах 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) и выполняется одновременно с основной программой. Также она имеет полный доступ к глобальным переменным и т.д

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

Raspberry Pi! http://master.qt.io/archive/qt/5.9/5.9.1/single/qt-everywhere-opensource-src-5.9.1.tar.xz

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

Для написания комментариев необходимо зарегистрироваться