Введение в GPIO Raspberry Pi

Введение в GPIO Raspberry Pi

Что особенного в Raspberry Pi?

Это вопрос, который мне часто задают, и ответ обычно один и тот же. Конечно же, GPIO-контакты! Те самые маленькие штырьковые выводы вдоль верхней части Pi, которые позволяют подключать кнопки, зуммеры, датчики и HAT-платы.

Raspberry Pi с GPIO-контактами

На первых двух моделях Raspberry Pi было всего 26 контактов, но быстро стало очевидно, что больше — значит лучше, и поэтому начиная с модели B+ в июле 2014 года на всех моделях Raspberry Pi серии A и B имеется 40 GPIO-контактов. На Raspberry Pi Zero по-прежнему 40 контактов, которые вы можете использовать, но они «безгребенковые» (headerless), что означает, что вы можете либо припаять провода непосредственно к плате вместо штырьков, либо припаять собственную гребенку (что не так сложно, как кажется, и может быть весьма увлекательным занятием).

Что именно делает эти контакты такими особенными?

GPIO расшифровывается как General Purpose Input-Output (ввод-вывод общего назначения). Простыми словами это означает, что контакты могут использоваться либо как входы, которые принимают данные, либо как выходы, которые реагируют на данные. Входом может быть кнопка или датчик, выходом — светодиод или зуммер. Это значит, что мы можем создавать увлекательные проекты физических вычислений, которые реагируют на реальный мир и взаимодействуют с ним, вместо того чтобы просто учиться программировать текст на экране!

Не все контакты являются программируемыми и управляемыми — на самом деле только 26 из них можно использовать таким образом, но остальные контакты тоже выполняют важные функции.

Взгляните на эту схему контактов, созданную Raspberry Pi Foundation, которая, во-первых, показывает, какие контакты являются программируемыми GPIO-контактами (обозначены жёлтым цветом), а также содержит информацию о других контактах. На этой схеме предполагается, что контакт 21 — это контакт, ближайший к USB-портам.

Схема распиновки GPIO Raspberry Pi

(изображение предоставлено: Raspberry Pi Foundation)

Первые два контакта в верхнем левом углу обозначены как 5V, что означает: если вы используете компонент, которому нужно питание, вы можете подключить его к контакту 5V. Аналогично, если вашему компоненту нужно меньше мощности, вы можете подключить его к одному из двух контактов 3,3V — это может быть хорошим способом проверить светодиод: подключив его напрямую к контакту 3,3V и контакту заземления (через резистор, разумеется), вы можете проверить, работает ли он. При напряжении 3,3V ваш светодиод должен быть «постоянно включён»; если он не загорается при таком подключении, возможно, ваш светодиод вышел из строя.

Имеется восемь контактов, обозначенных как контакты заземления (Ground). Если вспомнить школьный курс физики, можно вспомнить, что для замыкания любой цепи она должна быть подключена к отрицательному контакту, или к «земле». По сути, в любой создаваемой вами цепи одна сторона должна быть подключена к контакту заземления. Однако компоненты могут использовать общую «землю» — например, если вы используете макетную плату, вы можете сделать целый ряд или столбец «землёй» и подключать к нему компоненты, вместо того чтобы подключать каждый элемент к отдельному контакту заземления.

Наконец, на схеме обозначены два контакта ID EEPROM — не переживайте, вам не нужно знать об этих двух контактах, так как они связаны с HAT-платами и дополнительными модулями. Главное, что нужно запомнить, — не подключайте к ним ничего!

HAT-платы

Одна из замечательных особенностей Raspberry Pi заключается в том, что множество компаний разрабатывают и создают интересные продукты, которые легко подключаются к нему! Одна из причин, по которой теперь имеется 40 GPIO-контактов, — это упрощение производства HAT-плат. Те самые два контакта EEPROM позволяют HAT-платам легко подключаться и интегрироваться с аппаратным обеспечением Raspberry Pi!

Raspberry Pi Sense HAT

HAT расшифровывается как Hardware Attached on Top (аппаратное обеспечение, подключаемое сверху) и впервые появились в 2014 году. Существует ряд правил, которым плата должна соответствовать, чтобы официально называться HAT (в противном случае это просто дополнительный модуль). HAT-платы могут добавлять поддержку множества интересных функций — от домашней автоматизации до домашних аркадных автоматов, даже пианино. Существует множество интересных HAT-плат на рынке, добавляющих невероятные возможности, и одна из самых примечательных — официальный продукт Raspberry Pi, Sense Hat.

Sense Hat был создан с учётом интересов молодёжи. В настоящее время два Sense Hat находятся на Международной космической станции, выполняя код, написанный детьми в рамках конкурса Astro Pi. Если вы каким-либо образом связаны со школами или молодёжными клубами, стоит принять участие в конкурсе Astro Pi, который ежегодно проводится Европейским космическим агентством и Raspberry Pi Foundation осенью.

Что делает Sense Hat особенным — это наличие нескольких встроенных датчиков, включая гироскоп, акселерометр и компас, а также датчики температуры, давления и влажности, что даёт детям, рассматривающим возможность участия в конкурсе, возможность задуматься о научном значении показаний данных, полученных из космоса! Он также имеет матрицу 8x8 из NeoPixel светодиодов и джойстик, которые можно использовать для любого количества интересных проектов. Однако, на мой взгляд, это отличный инструмент, если вы хотите запрограммировать быструю игру «Змейка» на своём дисплее.

А как насчёт нумерации контактов?

Вы, возможно, заметили, что номера контактов, похоже, не расположены в логическом порядке. Иногда они идут по порядку, но чаще всего нумерация контактов может быть довольно запутанной!

Здесь стоит отметить, что иногда контакты обозначаются иначе, чем на приведённой выше схеме, но наиболее распространённая система нумерации — та, которую мы рассмотрели, известная как нумерация контактов BCM (Broadcom pin numbering). Иногда встречается упоминание «платной» (board) или «физической» (physical) нумерации, которая подразумевает простой подсчёт контактов и присвоение им номеров, но BCM гораздо более распространена и именно этот номер вам понадобится, если вы захотите использовать Scratch или библиотеки GPIO Zero или RPi.GPIO в Python. На мастер-классах я обычно ношу с собой распечатки с номерами контактов, но если у вас нет такой возможности, обратите внимание на плату PortsPlus, которая просто устанавливается поверх GPIO-контактов и чётко их маркирует (также доступна в виде линейки с удобными подсказками по Python). Идея PortsPlus заключается в том, что она может располагаться под вашими проектами и просто оставаться на контактах для быстрого справочника.

Как это работает на практике?

Давайте рассмотрим простую схему со светодиодом на макетной плате. Обратите внимание, что синий провод подключён к тому, что на схеме распиновки GPIO является нижним правым контактом. Это означает, что я подключил весь столбец макетной платы к контакту заземления, так что всё, что я подключу ниже синего провода, будет заземлено.

Схема подключения светодиода на макетной плате

Красный провод идёт от ряда, подключённого к положительной ноге светодиода, к верхнему правому контакту, обозначенному как контакт 21.

Теперь мы можем написать программу, которая заставит наш светодиод мигать. Давайте посмотрим на программу для Scratch и Python:

Программа Scratch для мигания светодиодом на GPIO 21

В этом скрипте мы использовали фиолетовые блоки «set GPIO», которые можно найти в меню «more blocks» в Scratch 2.0 на Raspberry Pi. Вы увидите число 21 в метке GPIO, а затем устанавливаете значение либо «output high», либо «output low», чтобы включать и выключать светодиод. Из построенной схемы мы знаем, что 21 — это номер контакта, к которому мы подключили положительную сторону светодиода!

Программа Python для мигания светодиодом на GPIO 21

Чтобы заставить светодиод мигать в Python, нужно присвоить переменную соответствующему номеру контакта. В данном случае в строке 4 переменная light объявлена как LED на контакте 21, так что когда мы вызываем light.on() в строке 7, программа знает, что нужно включить светодиод на контакте 21. Если бы вы подключили свой светодиод к другому пронумерованному GPIO-контакту или добавили больше светодиодов на другие контакты, вам нужно было бы изменить число в скобках на правильный номер контакта BCM.

Надеемся, что это помогло вам лучше понять GPIO-контакты на Raspberry Pi. Если вы хотите узнать, что делать дальше, почему бы не приобрести CamJam Edukit, который предоставляет всё необходимое оборудование для начала работы, а также восемь рабочих листов, чтобы вы могли выполнить несколько простых проектов физических вычислений с вашим Raspberry Pi.

Для получения дополнительной информации о контактах посетите Pinout.xyz, который является исчерпывающим кратким справочным руководством.