Raspberry Pi:Библиотеки/WiringPi/Драйверы DevLib/Драйвер для PiFace
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Черновик |
Драйвер для PiFace[1]
Библиотека WiringPi поддерживает модуль (драйвер) devLib для платы PiFace.
PiFace – это вспомогательная плата для Raspberry Pi, служащая для добавления контактов. Она оснащена 8 выходными контактами с открытым коллектором, 2 реле и 8 входными контактами. Эти 8 входных контактов можно использовать и в качестве выходных контактов, но нужно помнить, что они оснащены 330-омовыми резисторами, и для них, кроме того, нужно использовать расширительный модуль MCP23S17 из библиотеки WiringPi, а не расширительный модуль PiFace, о котором идет речь в этой статье.
Краткий обзор PiFace можно почитать тут.
Подключение
#include <wiringPi.h>
#include <piFace.h>
Инициализация
piFaceSetup (int pinBase) ;
Параметр pinBase – это базовое значение для номеров, через которые выполняется взаимодействие с контактами PiFace. В примере ниже базовым контактом сделан «200». Суммарно используется 32 контакта, но особенности платы таковы, что 8 входных контактов и 8 выходных контактов как бы наслаиваются друг на друга. Таким образом, если мы хотим выполнить запись на первый входной контакт, нам нужен номер, рассчитанный по формуле «номер базового контакта + 0», но та же самая формула нужна, чтобы определить номер для записи на первый выходной контакт.
Чтобы сосчитать состояние с выходного контакта-защелки, вам нужен номер, рассчитанный по формуле «номер базового контакта + 8 + номер выходного контакта». Остальные 16 контактов используются для внутреннего драйвера MCP23S17 (т.е. напрямую они не используются).
Обычная программа типа «Blink» будет выглядеть для PiFace следующим образом:
/*
* blink.c:
* Простой тест «Blink» для интерфейсной платы PiFace. ***********************************************************************
*/
#include <stdio.h>
#include <wiringPi.h>
#include <piFace.h>
// в качестве базового контакта для PiFace указываем «200»
// и выбираем контакт для светодиода, не подключенного к реле
#define PIFACE 200
#define LED (PIFACE+2)
int main (int argc, char *argv [])
{
printf ("Raspberry Pi PiFace Blink\n") ;
printf ("=========================\n") ;
// "Программа Blink для PiFace, подключенной к Raspberry Pi"
// всегда инициализируем WiringPi; если вам не нужно (или если
// вы не хотите) инициализировать ее с правами root-пользователя,
// используйте функцию wiringPiSys():
wiringPiSetupSys () ;
// инициализируем плату PiFace:
piFaceSetup (PIFACE) ;
for (;;)
{
digitalWrite (LED, HIGH) ; // вкл
delay (500) ; // мс
digitalWrite (LED, LOW) ; // выкл
delay (500) ;
}
return 0 ;
}
Примечания
- Плата PiFace использует чип MCP23S17, работающий через шину SPI и служащий для подключения к Pi дополнительных GPIO-контактов. Поэтому перед началом работы загрузите в ядро модули для шины SPI. Для этого впишите в терминал следующее:
gpio load spi
- Если вы хотите использовать входные контакты в качестве выходных, тогда вместо расширительного модуля для PiFace вам нужно использовать расширительный модуль для чипа MCP23S17. В дальнейшем работать с контактами относительно просто: контакты с 0-го по 7-ой – это выходные контакты, а с 8-го по 15-ый – обычные входные контакты, на которых, если потребуется, можно использовать функцию pinMode(), чтобы переключить их в режим вывода данных.
- Команда gpio поддерживает плату PiFace напрямую при помощи флага –p, но в этом случае с контактами придется работать по другому – номером базового контакта будет «200». К примеру, команда
gpio -p write 200 1
запишет первому выходному контакту значение HIGH – это первое реле.