Raspberry Pi:Аппаратные средства/Raspberry Pi/GPIO-контакты: Raspberry Pi A+, B+ и Raspberry Pi 2

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


// в процессе оформления

GPIO-контакты: Raspberry Pi A+, B+ и Raspberry Pi 2[1]

Одна из самых мощных функций Raspberry Pi — это гребенка GPIO-контактов (GPIO означает «general purpose input/output», что можно перевести как «интерфейс ввода/вывода общего назначения») — они расположены вдоль верхнего края платы.

Эти контакты являются, по сути, физическим интерфейсом между Pi и внешним миром. Если говорить проще, это что-то вроде переключателей, с помощью которых можно что-либо включить/выключить внутри самой Pi (т.е. речь о вводе данных) либо вне ее (т.е. речь о выводе данных). Из сорока GPIO-контактов, имеющихся на этих версиях Pi, собственно, GPIO-контактами являются лишь двадцать шесть, а остальные — это контакты для питания и заземления (включая два контакта для ID EEPROM, использовать которые не рекомендуется, пока не вы не изучите соответствующую матчасть).

Кроме того, имейте в виду, что нумерация GPIO-контактов — довольно странная. В приложении 1 (см. ниже) объясняется почему.

Для чего они? Что я могу сделать с их помощью?

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

Как работают GPIO-контакты

Вывод (OUTPUT)

Предупреждение! Если вы внимательно следуете инструкциям, то работа с GPIO-контактами принесет вам много приятных минут, но главное — будет безопасной. Однако если безо всякого разбора подключать к ним провода и источники питания, то можно запросто повредить Raspberry Pi. Кроме того, неприятности могут возникнуть, если подключать к Pi устройства, требующие слишком много энергии. Светодиоды — в самый раз, а вот моторы — это уже перебор. Поэтому если вы сомневаетесь в энергопотреблении девайса, лучше для начала опробовать его на макетной плате (вроде Pibrella), а уже потом использовать на GPIO-контактах Raspberry Pi.

Если абстрагироваться от Pi, то одной из самых простейших цепей, которую вы можете собрать — это батарея, подключенная к источнику света и переключателю (резистор нужен здесь для защиты светодиода):

То есть, когда мы используем GPIO-контакт в качестве выходного (OUTPUT), то Pi на картинке выше заменяет собой и переключатель, и батарею. Любой контакт можно либо включить, либо выключить, то есть, если говорить компьютерными терминами — задать ему либо состояние HIGH, либо состояние LOW. Если контакт находится в состоянии HIGH, то будет выдавать 3,3 вольта (3v3), если LOW – 0 вольт.

А теперь та же самая цепь, только с использованием Raspberry Pi. Светодиод подключен к GPIO-контакту (который может выдавать 3,3 вольт) и заземляющему контакту (который выдает 0 вольт и выступает для батареи в качестве отрицательного полюса).

Следующий шаг — это написать программу, которая будет переключать контакт в HIGH или LOW. Здесь можно почитать о том, как это сделать на Python, а здесь — как это сделать на Scratch.

Ввод (INPUT)

С выводом данных проще — контакт либо включен, либо выключен; либо HIGH, либо LOW; либо 3v3, либо 0. С вводом данных все чуть похитрее, и дело здесь в специфике работы цифровых устройств. Хотя на первый взгляд вариант просто подключить кнопку к входному и заземляющим контактам кажется разумным, но на деле Pi просто не поймет, в каком состоянии находится кнопка — во включенном или выключенном. Она может работать как надо, а может и не работать, раз на раз не приходится. Это можно сравнить с тем, как если бы вы болтались в открытом космосе: точки отсчета нет, поэтому непонятно, куда мы движемся — вниз или вверх... и что вообще значат понятия «вверх» и «вниз»?

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

Захотели поиграться с GPIO-контактами? Можете попробовать, например, собрать игру, проверяющую быстроту реакции — с использованием Python или Scratch.

Добро пожаловать в удивительный мир GPIO!

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

Глоссарий

  • GPIO — интерфейс ввода/вывода общего назначения. В данном случае речь о контактах Raspberry Pi и о том, что с их помощью можно сделать. Они названы так потому, что их можно использовать для самых разнообразных целей. Более того, большинство из них можно использовать и в качестве входных, и в качестве выходных контактов — в зависимости от того, что вы собираетесь сделать.
  • Светодиод — светоизлучающий диод. Маломощный источник света, широко используемый в электронике. Идеален для изучения азов физических вычислений и работы с GPIO-контактами Raspberry Pi.
  • Физические вычисления — вычисления с участием реальных (осязаемых) объектов, подключенных к компьютеру, но не считая стандартные устройстваввода/вывода вроде мыши и клавиатуры. Речь о кнопках, источниках света, роботах, сигнализациях, датчиках, системах домашней автоматизации, плюшевых медведях Babbage, запускаемых в околоземное космическое пространство, и так далее. Кроме того, эта область является, по сути, мощным обучающим инструментом, побуждающим развитие творчества, сотрудничества и способности к решению задач у детей самых разных возрастов.

Приложение 1 (о нумерациях контактов)

Допустим, вы наконец приступили к программированию GPIO-контактам. Но для начала вам нужно знать, что вы можете обращаться к ним двумя способами:

  • GPIO-нумерация. Это GPIO-контакты, каким их видит компьютер. Обычному человеку в этой нумерации логику увидеть сложно — цифры прыгают с места на место, из-за чего запомнить их довольно непросто. Поэтому вам наверняка потребуется либо какая-нибудь шпаргалка, которая все время будет под рукой — либо в виде листа бумаги, либо в виде другой платы, либо в каком-нибудь еще виде, который подсказывает вам ваша фантазия.
  • Физическая нумерация. Самый простой способ — это просто считать контакты один за другим начиная с самого первого (который ближе всего к SD-карте). Выглядит это следующим образом:

Какую из этих систем использовать лучше всего?

Детям и начинающим лучше использовать физическую нумерацию — она проще. По сути, нужно просто считать контакты один за другим. Но потребность в картинке-подсказке (вроде той, что изображена выше) все равно не отпадает, потому что вам по-прежнему нужно знать, какие контакты являются GPIO-контактами, а какие отведены для питания и заземления.

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

Впрочем, все это остается на ваш выбор. Если внутри программы не перескакивать с одной нумерации на другую, а постоянно придерживаться лишь какой-то одной, все должно быть нормально. Но учтите также, что нумерация может зависеть от того, на каком языке вы программируете — к примеру, в Scratch используется физическая нумерация, а в Python вы можете выбрать между той и другой.

Если вас интересует более продвинутое использование GPIO-контактов, то можно обратиться, например, к нашей распиновке Raspberry Pi.

См.также

Внешние ссылки