GPIO и внешние устройства

GPIO соединяет программу Linux с электрическим сигналом на разъёме. Через GPIO можно прочитать кнопку, включить индикатор или передать команду другому модулю. Но GPIO не является источником питания и не рассчитан на моторы, реле или пятивольтовые сигналы без согласования.
Для большинства одноплатных компьютеров безопасное базовое правило такое: считать GPIO линиями 3,3 В, не подключать к ним нагрузку напрямую и всегда сверять pinout точной платы. Сначала проверяют схему и уровни, только потом пишут программу.
Что такое GPIO
GPIO — цифровая линия общего назначения. Она может быть входом, выходом или линией аппаратного интерфейса: UART, I²C, SPI, PWM и других функций. На одном физическом контакте часто доступно несколько функций, но в проекте используется только одна выбранная конфигурация.
Рядом с GPIO на 40-pin разъёме находятся контакты питания 5 В, 3,3 В и GND. Они похожи на такие же штырьки, но не являются программируемыми выводами.
Четыре обозначения одного контакта
| Обозначение | Пример | Где используется |
|---|---|---|
| Физический номер | контакт 7 на разъёме | при подключении провода |
| Имя сигнала | GPIO4, GPIO1_D6, UART_TX | в документации платы и SoC |
| Номер библиотеки | BCM, wiringOP, board numbering | в учебных библиотеках |
| Linux chip + offset | /dev/gpiochipN и offset | в современных интерфейсах Linux |
Нельзя переносить число из одной системы в другую. Фраза «подключите к пину 7» неполна, пока не сказано, о какой нумерации идёт речь.
Логические уровни и питание
GPIO обычно работает с логикой 3,3 В. Это означает, что высокий уровень находится около 3,3 В, а подача 5 В на вход может вывести плату из строя. Контакты питания 5 В на разъёме нужны для питания совместимых модулей, но они не становятся GPIO.
| Внешний узел | Безопасный путь |
|---|---|
| Кнопка | GPIO-вход, подтяжка к известному уровню, общий GND |
| Светодиод | GPIO → резистор → LED → GND |
| Датчик 3,3 В | прямое подключение только после проверки pinout и уровней |
| Датчик 5 В | преобразователь уровней или согласующий модуль |
| Реле | транзисторный или интегральный драйвер, отдельное питание, защитный диод |
| DC-мотор | H-мост или моторный контроллер, отдельная силовая цепь |
Преобразователь уровней

Преобразователь уровней соединяет две логические системы: например, SBC с GPIO 3,3 В и внешний модуль с логикой 5 В. Для обычного неразвязанного преобразователя нужна общая земля.
Преобразователь выбирают не только по напряжению. Нужно проверить направление сигнала, скорость, тип выхода, количество каналов и поведение при выключении одной стороны. Для I²C требуется решение, совместимое с open-drain и подтяжками; для быстрого SPI нужен более подходящий буфер.
Нагрузки нельзя питать от GPIO
Светодиод требует резистор, потому что без него ток ограничивается плохо. Реле, соленоид и мотор требуют драйвер, потому что катушка и двигатель потребляют больше тока и создают выбросы напряжения при выключении.
Силовой ток мотора не должен идти через одноплатный компьютер. Компьютер может передать команду микроконтроллеру или драйверу, но питание двигателя идёт по отдельной силовой цепи.
GPIO в Linux
Современный Linux представляет GPIO через character device API и устройства вида /dev/gpiochipN. Старый sysfs-интерфейс /sys/class/gpio считается устаревшим и не должен быть основой нового учебного проекта.
Практический порядок такой:
- Найти контакт на официальном pinout.
- Сверить имя сигнала и альтернативные функции.
- Проверить, не занята ли линия драйвером ядра.
- Определить
gpiochipиoffsetв работающей системе. - Только после этого выполнять короткий безопасный тест.
Если для устройства уже есть штатный драйвер ядра, лучше использовать его. Не нужно вручную «дёргать» GPIO для I²C-датчика, SPI-устройства или PWM, если платформа поддерживает соответствующий subsystem.
Что проверить перед подключением
| Проверка | Зачем она нужна |
|---|---|
| Точная модель платы и ревизия | Pinout и доступность линий зависят от платы. |
| Ориентация разъёма | Ошибка на один ряд может подать питание на сигнал. |
| Логический уровень | Не подать 5 В на вход 3,3 В. |
| Общая земля | Без общего уровня отсчёта сигнал может читаться неверно. |
| Ток нагрузки | GPIO не питает реле, мотор или мощную лампу. |
| Состояние при загрузке | Вывод может быть входом, подтянутым или занятым системой. |
| Способ отключения | Робот должен оставаться безопасным при перезагрузке Linux. |
Практика
Найдите официальный pinout точной модели своей платы и выберите контакты для кнопки, светодиода через резистор и I2C-датчика. В таблице запишите физический номер контакта, имя GPIO, функцию и допустимый логический уровень. Схему сначала нарисуйте без подачи питания.
Проверка завершена, если контакты питания не названы GPIO, входы не получают 5 В, для кнопки указана подтяжка, а нагрузка светодиода ограничена резистором. Мотор и реле в такую схему напрямую не добавляются.
Проверьте себя
- Чем физический номер контакта отличается от номера GPIO?
- Почему вывод 5 В нельзя превратить в GPIO программой?
- Зачем кнопке нужна подтяжка?
- Почему светодиод подключают через резистор?
- Почему мотор нельзя подключить к GPIO напрямую?
- Когда нужен преобразователь уровней?
- Почему pinout нужно брать для точной модели платы?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Физический контакт — место на разъёме, определяемое номером и ориентацией колодки.
- GPIO — программируемая линия цифрового ввода-вывода.
- Подтяжка — резистор, задающий известное состояние входа без активного сигнала.
- Преобразователь уровней — схема для безопасного согласования разных логических напряжений.