Распиновка 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В, ток ограничен, а пины умеют быть и входом, и выходом. Дальше зажжём первый светодиод.