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

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

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

На плате 40 пинов в два ряда. Среди них есть пины питания 3.3В и , несколько пинов 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?
A
B3.3В
C12В
DЛюбое