Raspberry Pi:Примеры/Библиотека WiringPi/Gertboard и WiringPi/Мигание светодиодом
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Gertboard и WiringPi: мигание светодиодом[1]
В мире микроконтроллеров программы с миганием светодиодов – это что-то вроде «Hello, World!» То есть программы, демонстрирующие простейший функционал микроконтроллера. Как правило, они не делают ничего более, кроме как мигают одним или двумя светодиодами.
Итак, предположим, что вы подключили Pi к Gertboard, как было описано в предыдущей статье. Если да, мы можем приступить к написанию нашей первой программы для Gertboard при помощи WiringPi.
Небольшое примечание: Нумерация контактов в WiringPi отличается от родной нумерации микроконтроллера Pi. Как правило, мы используем номера, которые являются, по сути, позициями битов во внутренних GPIO-регистрах, и это нормально, однако у Pi эти номера не очень интуитивны, т.к. менялись при переходе из Rev1 в Rev2. Поэтому далее я буду использовать номера библиотеки WiringPi, попутно указывая их «настоящие» номера (т.е. номера типа BCM_GPIO). На номера WiringPi версия платы никак не влияет.
Один светодиод
Эта программа должна идти в комплекте с дистрибутивом WiringPi в папке «examples». Для удобства давайте покажем ее здесь:
#include <stdio.h>
#include <wiringPi.h>
// светодиодный контакт: контакт 0 в WiringPi – это BCM_GPIO 17.
#define LED 0
int main (void)
{
printf ("Raspberry Pi - Gertboard Blink\n") ;
// "Raspberry Pi и Gertboard: Мигание"
wiringPiSetup () ;
pinMode (LED, OUTPUT) ;
for (;;)
{
digitalWrite (LED, 1) ; // включение
delay (500) ; // задержка в миллисекундах
digitalWrite (LED, 0) ; // выключение
delay (500) ;
}
return 0 ;
}
Важная строчка программы – это
#include <wiringPi.h>
Если вы раньше программировали на C или C++, то оставшаяся часть программы должна быть понятна. Чтобы скомпилировать и запустить программу, пишем следующее:
gcc -Wall -o blink blink.c -lwiringPi
sudo ./blink
Здесь нам нужно сделать привязку к библиотеке WiringPi, отсюда и -lwiringPi. Кроме того, чтобы запустить программу, вы должны быть root-пользователем – только он имеет прямой доступ к GPIO-контактам.
В программе используются следующие функции библиотеки WiringPi:
- Функция wiringPiSetup(). Вызывается самой первой. Она «открывает» GPIO-устройства и позволяет нашей программе получить к ним доступ.
- Функция pinMode(). Задает режим контакта. Как правило, выставляет контакт либо на ввод, либо на вывод данных, но допускает и пару других вариантов.
- Функция digitalWrite(). Записывает на указанный контакт значение «0» или «1».
- Функция delay(). Делает задержку на указанное количество миллисекунд.
То есть ничего экстраординарного тут нет. Если вы работали с Arduino, все это должно быть очень знакомым.
Когда программа будет запущена, вы можете нажать Ctrl + C , чтобы остановить ее и вернуться к режиму командной строки.
Больше светодиодов
Теперь давайте подключим еще 7 светодиодов, чтобы в целом у нас получилось 8. Для этого мы соединим проводами-перемычками контакты GP17, GP18, GP21, GP22, GP23, GP24, GP25, GP4 (на гребешке J2) с одной стороны и контакты B1, B2, B3, B4, B5, B6, B7, B8 (на гребешке J3) с другой. Так, как показано в этой таблице:
J2 | Провод-перемычка | J3 |
---|---|---|
GP17 | <–> | B1 |
GP18 | <–> | B2 |
GP21 | <–> | B3 |
GP22 | <–> | B4 |
GP23 | <–> | B5 |
GP24 | <–> | B6 |
GP25 | <–> | B7 |
GP4 | <–> | B8 |
Результат должен выглядеть примерно так:
В данном случае используется кабель с цветовой индикацией. Если вы знаете цветовую маркировку резисторов, то разберетесь, какой провод за что отвечает. Впрочем, в данном случае все просто – первые 8 GPIO-контактов на Pi подключены к первым 8 входным буферным контактам на Gertboard.
Программа-пример для 8 светодиодов
Она называется «blink8.c», ищите ее в папке «examples».
Эта программа отсылает 8 светодиодам простую последовательность действий: сначала она одновременно их зажигает, а затем выключает. Компиляция и запуск выполняются также:
gcc -Wall -o blink8 blink8.c -lwiringPi
sudo ./blink8
Если вы изучите эту программу, то увидите, что там используется нумерация контактов WiringPi. В частности, контакты с 0 по 7 удобно привязаны к первым восьми GPIO-контактам.
Эти светодиодные программы способны продемонстрировать лишь самые простейшие функции Gertboard. Чтобы изучить эту тему более подробно, попробуйте модифицировать их или написать свои собственные.