цифровая электроника
вычислительная техника
встраиваемые системы

 



Управление линиями GPIO на Raspberry Pi

Автор: Mike(admin) от 19-11-2014, 08:33

Raspberry Pi представляет собой не просто миникомпьютер, предназначенный для того, чтобы из него сделали медиацентр и проигрывали на нем музыку. Он может применяться и в более серьезных электротехнических проектах. Для этого у него имеются линии ввода/вывода общего назначения (GPIO), которые мы сегодня рассмотрим.


Управление линиями GPIO на Raspberry Pi

GPIO находятся на разъеме 2×13, на котором можно найти интерфейсы SPI, I2C, UART и линии питания 3.3 В и 5 В.


Управление линиями GPIO на Raspberry Pi

Восемь из этих выводов могут быть непосредственно задействованы в качестве цифрового ввода или вывода. Поэтому с помощью них можно управлять светодиодами, драйверами двигателей и прочими подобными устройствами. Естественно, к ним могут быть подсоединены кнопки и переключатели для ввода информации в Raspberry Pi.


Управление линиями GPIO на Raspberry Pi

Итак, как же управлять линиями GPIO на Raspberry Pi?


Для начала нужно установить библиотеку RPi.GPIO Python Library. Возможно, она уже была предустановленна на ваш дистрибутив операционной системы Raspbian OS. Чтобы проверить это, введите:


sudo python


Затем введите в строчке:


import RPi.GPIO as GPIO


Если не появилась ошибка, то все хорошо. Но если же она возникла, то нужно сделать следующие шаги.


Для начала загружаем RPi GPIO Library:


wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.3.1a.tar.gz


Затем извлекаем файлы:


tar zxf RPi.GPIO-0.3.1a.tar.gz


Потом переходим в извлеченный каталог:


cd RPi.GPIO-0.3.1a


И устанавливаем библиотеку:


sudo python setup.py install


Использование библиотеки RPi.GPIO Python Library



# импорт библиотеки
import RPi.GPIO as GPIO
# используем нумерацию разъема Raspberry Pi
GPIO.setmode(GPIO.BOARD) # или GPIO.setmode(GPIO.BCM)
# настраиваем выводы GPIO на вход или выход
GPIO.setup(11, GPIO.IN)
GPIO.setup(13, GPIO.OUT)
# берем входное значение с вывода 11
input_value = GPIO.input(11)
# устанавливаем выходное значение на вывод 13
GPIO.output(13, GPIO.HIGH)
#GPIO.output(13, GPIO.LOW)

Различие между GPIO.setmode(GPIO.BOARD) и GPIO.setmode(GPIO.BCM) заключается в системе нумерации выводов. В первом случае используется нумерация разъема P1 на борту Raspberry Pi, а во втором случае нумерация выводов системы-на-кристалле Broadcom, являющейся ядром Raspberry Pi. Следует знать, что в случае с BCM нумерация выводов между первой и второй ревизиями немного отличается, а при использовании BOARD ревизия не имеет никакого значения, все остается тем же самым.


Теперь подключим к Raspberry Pi светодиоды и кнопки. На разъеме нам доступны восемь GPIO.


Управление линиями GPIO на Raspberry Pi

Соединения:


Управление линиями GPIO на Raspberry Pi

Значения сопротивлений резисторов могут быть вычислены следующим образом. Используемые в данном случае 5-миллиметровые светодиоды потребляют ток 20 мА. Напряжение, подаваемое с Raspberry Pi, составляет 3.3 В. Тогда сопротивление будет равно 3.3 В / 20 мА = 165 Ом. Для кнопок были задействованы резисторы 1 КОм.


Управление линиями GPIO на Raspberry Pi

Код



from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(16, GPIO.IN)
GPIO.setup(18, GPIO.IN)

GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.LOW)

# state - определяет должен ли светодиод быть включенным или выключенным
state = 0

# increment - направление изменения состояний
inc = 1

while True:

# кнопка нажата
if ( GPIO.input(16) == True ):

if (inc == 1):
state = state + 1;
else:
state = state - 1;

# достигнуто максимальное состояние state, возвращаемся назад (декремент)
if (state == 3):
inc = 0
#достигнуто минимальное состояние state, возвращаемся назад (инкремент)
elif (state == 0):
inc = 1

if (state == 1):

GPIO.output(11, GPIO.HIGH)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.LOW)

elif (state == 2):

GPIO.output(11, GPIO.HIGH)
GPIO.output(13, GPIO.HIGH)
GPIO.output(15, GPIO.LOW)
elif (state == 3):

GPIO.output(11, GPIO.HIGH)
GPIO.output(13, GPIO.HIGH)
GPIO.output(15, GPIO.HIGH)

else:

GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.LOW)
print("pressed B1 ", state)

# нажата кнопка сброса
if ( GPIO.input(18) == True ):

state = 0
inc = 1
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.LOW)

 print("pressed B2 ", state)
sleep(0.2);

Итак, как мы видим, использовать GPIO на Raspberry Pi довольно-таки просто. Хотя их не так много, как у Arduino, но в совокупности с вычислительной мощностью системы-на-кристалле этот миникомпьютер будет полезен во многих проектах любительской радиоэлектроники.




Перевод © digitrode.ru


<Via>


Теги: Raspberry Pi




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Оставить комментарий
Цитата
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
Спасибо за статью. Не совсем понятно как использовать GPIO на C++ QT. Было бы здорово увидеть подобную статью для QT, например как подключить 1 диод и включать/выключать его кнопкой программы.