Работа с GPIO пинами Raspberry Pi.

В этом видео:
– Что такое GPIO на Raspberry Pi?
– Какие функции выполняют пины GPIO?
– Что можно делать с GPIO?
– Пример python скрипта для управления светодиодами.

Аббревиатура GPIO – расшифровывается как General Purpose Input/Output pins on the Raspberry Pi. Выглядят эти пины следующим образом:
v41 raspberry pi gpio
Используя данные пины можно контролировать различные внешние устройства или расширять возможности raspberry pi подключая дополнительные микросхемы. Эти пины не имеют какого-либо привычного интерфейса вроде usb как вы сами можете видеть. Но используя различные провода, переходники или платы можно подключать ваш raspberry pi к нужному оборудованинию.
Сам по себе rasbperry pi был создан и позиционируется как устройство для обучения компьютерной технике и программированию- как высокопроизводительное устройство оно никогда не задумывалось. Стоит дёшево и установлено простое по современным меркам железо. Скорее всего в вашем смартфоне стоит что-то более производительное. Полноценной рабочей станцией raspberry pi я бы тоже не назвал – всю переферию нужно подключать самостоятельно. Если у вас всё есть (sd карточка, монитор, клавиатура, мышка, опционально wifi адаптер), то можно попробовать поработать с Rasbian-ом. Хотя особой причины этого делать я не вижу. Кто-то может захотеть использовать raspberry pi как устройство для ознакомления с Linux. У вас наверняка есть какой-либо компьютер или ноутбук – запустите виртуалку и попробуйте. Так намного проще и удобнее. Просто так держать пучёк проводов где-то на столе или у телека смысла нет. Ну это как по мне.
Другое дело если вы будете что-то делать со своим raspberry pi связанное с серверными функциями – бекапы, мониторинг, файловый сервер, какие-то специфические тесты. Я пользуюсь одним из своих pi как мониторинг и бекап сервером. Тут ничего необычного нет. Можно заменить pi на какой-либо другой мини-компьютер или просто старый компьютер.
Но у raspberry pi есть те самые GPIO. С ними можно делать разные интересные вещи, те что обычно вы не сможете делать с обычным комьютером или даже каким-либо мини-компьютером – просто нет подходящих интерфейсов. Обычно есть только usb. Например, для подключения самодельного домашнего освещения, датчиков движения, робототехники и многое другое. Возможет вы сможете повторить, сделать всё тоже самое, но это будет скорее всего сильно дороже или не такое компактное решение.
_В общем случае_ GPIO пины способны считывать сигналы приходящие на этот самый пин, могут посылать сигнал на пин. Например, можно включать светодиоды. Можно запускать какие-либо электродвигатели. В общем можно что-то включать-выключать. Можно посылать какие-либо сигналы. Если пин работает на вход, то можно получать сигналы и написанная программа будет как-то реагировать. Например, можно просто подключить кнопку, если вы её нажали, то поступит определённый сигнал или сигнал пропадёт. Написанная программа среагирует на сигнал и что-то сделает. Часто можно найти на ютубе видео где из raspberry pi делают gameboy и кнопки управления работают через GPIO.

Среди пинов есть ещё пины которые выдают постоянное напряжение в 3.3, 5 Вольт. Есть пины работающие как Масса или Ноль. Сразу скажу, что работать с пинами нужно очень аккуратно – некоторые пины подключены напрямую к центральному процессору и вообще сам raspberry pi работает с очень маленькими токами. Работайте аккуратно! Напрямую ничего напрямую не подключайте, всё через резисторы. Если никогда не занимались подсчётом необходимых сопротивлений, не пользовались законом Ома, то попробуйте скопировать уже имеющиеся решения в Интернете. Как поймёте что к чему – можно будет попробовать что-то своё.

То что вы можете видеть в ролике на youtube, то что происходит со светодиодами – работает с использованием простых python скриптов. Я уже рассматривал работу используемых циклов в моих предыдущих видео.
Пример скрипта из видео:
pi@raspberrypi:~ $ cat ampel02-with-button.py
import RPi.GPIO as GPIO # !!!!!!!!!!!!!!!!!!!
import time # !!!!!!!!!!!!!!!!!!!

GPIO.setmode(GPIO.BCM)

red = 1; yellow = 2; green = 3; blue = 0; button = 4
light=[4,18,23,24,25]
GPIO.setup(light[red], GPIO.OUT, initial=False)
GPIO.setup(light[yellow], GPIO.OUT, initial=False)
GPIO.setup(light[green], GPIO.OUT, initial=True)
GPIO.setup(light[blue], GPIO.OUT, initial=False)
GPIO.setup(light[button], GPIO.IN)

print ("Press button to turn on pedestrian light, Ctrl+C exits the program")
try:
while True:
if GPIO.input(light[button])==True:
GPIO.output(light[green],False)
GPIO.output(light[yellow],True)
time.sleep(0.6)
GPIO.output(light[yellow],False)
GPIO.output(light[red],True)
time.sleep(0.6)
for i in range(30):
GPIO.output(light[blue],True); time.sleep(0.05)
GPIO.output(light[blue],False); time.sleep(0.05)
time.sleep(0.6)
GPIO.output(light[yellow],True)
time.sleep(0.6)
GPIO.output(light[red],False)
GPIO.output(light[yellow],False)
GPIO.output(light[green],True)
time.sleep(2)

except KeyboardInterrupt:
GPIO.cleanup() # !!!!!!!!!!!!!!!!!!!

Наиболее интересные моменты следующие:
Нужно определить используемые модули – собственно указать скрипту что нужно использовать модуль GPIO для работы с пинами. Если вы используете в скрипте функции связанные с временем – подключаете модуль времени. Или если нужна генерация случайных чисел, то нужно подключить модуль генерации случайных чисел.
В конце скрипта нужно освободить пины, если этого не сделать, то установленный режим работы пина сохраниться и возможны проблемы, если будут запускаться другие скрипты или у вас работатет какое-либо подключённое устройство.

Надеюсь, что после просмотра этого видео у вас появится интерес собрать что-то своё. Raspberry pi и GPIO дают возможность сделать какое-либо устройство, игрушку или автоматизировать какие-либо вещи у вас дома. У вас есть возможно соединить навыки программирования и схемотехники – получить работающее так как вам самим хочется устройство в реальном мире, прямо у вас дома, не просто на экране компьютера.

На этом всё.
Удачи!

Links:
GPIO overview.
GPIO: RASPBERRY PI MODELS A AND B
The comprehensive Raspberry Pi GPIO Pinout guide
Использование GPIO из Python на Raspberry Pi