Распиновка GPIO: как читать 40 пинов

Сорок пинов выглядят как хаос, но за ними строгий порядок: питание, земля и программируемые выводы на своих местах.

Перепутать пин питания с программируемым — самый дорогой способ научиться электронике. Поэтому распиновку учим до того, как берём в руки провода.

На плате 40 пинов в два ряда. Среди них есть пины питания 3.3В и 5В, несколько пинов GND (земля) и около 26 программируемых пинов GPIO, которыми мы будем управлять.

Думай о пинах как о разъёмах на задней панели компьютера. Там тоже всё выглядит как стена одинаковых дырочек, но каждая имеет своё назначение: сюда — наушники, сюда — питание, а вот это вообще USB. Воткнёшь провод не туда — в лучшем случае ничего не случится, в худшем что-то сгорит. С GPIO та же история: ряд из 40 одинаковых на вид штырьков, но за каждым закреплена конкретная роль. Хорошая новость — этот порядок никогда не меняется от платы к плате, так что выучив его один раз, ты будешь знать распиновку всех современных Raspberry Pi.

Как работает под капотом

Есть два способа нумеровать пины. Физический — просто по порядку 1-40. BCM — по номерам выводов чипа (GPIO17, GPIO27 и т.д.). Библиотека gpiozero использует только BCM, и это важно запомнить: когда в коде пишут LED(17), имеется в виду GPIO17 по BCM, а не физический пин 17.

   Физ.  Назначение        Назначение  Физ.
    1   [ 3.3V  ]          [  5V   ]   2
    3   [ GPIO2 ]          [  5V   ]   4
    5   [ GPIO3 ]          [ GND   ]   6
    7   [ GPIO4 ]          [ GPIO14]   8
    9   [ GND   ]          [ GPIO15]  10
   11   [ GPIO17]          [ GPIO18]  12
   13   [ GPIO27]          [ GND   ]  14
       ... всего 40 пинов ...

Логический сигнал на GPIO работает на уровне 3.3В: "высокий" уровень (1) — это 3.3В, "низкий" (0) — это 0В. Подавать на вход 5В нельзя — сожжёшь пин. Максимальный ток с одного пина — около 16 мА, поэтому мощные устройства подключают через транзисторы, а не напрямую.

Почему вообще существуют две нумерации и зачем такая путаница? Дело в истории. Физическая нумерация — это про железо: первый пин в углу, дальше по порядку, как клетки на шахматной доске. Она удобна, когда ты с паяльником в руках смотришь на плату. А BCM-нумерация — это про чип Broadcom внутри Pi: каждый программируемый вывод имеет "имя" на кристалле процессора, и именно это имя видит код. Библиотеки выбрали BCM, потому что оно стабильно: физический пин 7 — это всегда GPIO4, и в программе ты обращаешься именно к "четвёрке".

   как видит ЧЕЛОВЕК           как видит КОД
   (физический номер)         (BCM-имя)
   +----------------+         +----------------+
   | пин 7 в углу   |  -->    |   GPIO4        |
   | пин 11         |  -->    |   GPIO17       |
   | пин 13         |  -->    |   GPIO27       |
   +----------------+         +----------------+
   считаем по плате           пишем в LED(4), Button(17)...

Ещё одна вещь, которую полезно понимать заранее: пины GPIO умеют работать в обе стороны. В режиме выхода пин сам выдаёт напряжение — так мы зажигаем светодиод. В режиме входа пин, наоборот, слушает, что на нём происходит — так мы читаем кнопку или датчик. Один и тот же физический штырёк может быть и тем, и другим в зависимости от того, как его настроит программа. Библиотека делает это за тебя автоматически: LED(17) переводит пин в выход, а Button(4) — во вход.

Чтобы потренировать перевод между нумерациями без всякого железа, запусти эту мини-таблицу соответствий прямо в браузере:

# Таблица: физический пин -> BCM-имя
mapping = {
    7: "GPIO4",
    11: "GPIO17",
    13: "GPIO27",
    12: "GPIO18",
    15: "GPIO22",
}

def to_bcm(phys):
    name = mapping.get(phys)
    if name:
        print(f"Физический {phys} -> {name}")
    else:
        print(f"Физический {phys}: это не GPIO (питание/земля?)")

for p in [7, 11, 2, 13, 6]:
    to_bcm(p)

Частые ошибки

  • Путают физическую и BCM-нумерацию. LED(17) в gpiozero — это GPIO17, а он находится на физическом пине 11, а не 17.
  • Подают 5В на вход GPIO. Пины терпят только 3.3В — иначе повреждение.
  • Подключают мотор напрямую к пину. Ток слишком большой, нужен транзистор и отдельное питание.
  • Считают пины не с того угла. Первый пин — тот, что ближе к краю платы и к разъёму microSD; перевернёшь плату — собьёшься в нумерации.
  • Берут землю не с того пина. Пинов GND несколько, но если случайно воткнуть провод "земли" в пин питания, цепь не заработает или будет коротить.

Best practices

  • Держи под рукой картинку распиновки или команду pinout в терминале.
  • Всегда подключай при выключенном питании Pi.
  • Запомни: gpiozero = BCM. Никаких физических номеров в коде.
  • Для мощной нагрузки используй внешний источник питания, а не пины Pi.
  • Помечай провода цветом: красный — питание, чёрный — земля. Так меньше шансов перепутать.

Итоги. Среди 40 пинов есть питание (3.3В/5В), земля (GND) и программируемые GPIO. gpiozero нумерует их по BCM, а человек считает по физическому порядку — держи это различие в голове. Уровень логики — 3.3В, ток ограничен, а пины умеют быть и входом, и выходом. Дальше зажжём первый светодиод.

Проверьте себя
1. Какую нумерацию пинов использует библиотека gpiozero?
AТолько физическую (1-40)
BТолько BCM (по номерам GPIO чипа)
CЛюбую на выбор
DШестнадцатеричную
2. Какое максимальное напряжение можно подавать на вход GPIO Raspberry Pi?
A5В
B3.3В
C12В
DЛюбое
py
Курс по теме
Пройдите курс «Python с нуля» — по шагам, с проверкой
8 уроков · ~14 ч · теория, упражнения и экзамен с бейджем
Открыть курс →