Перейти к основному содержимому

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

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-мост или моторный контроллер, отдельная силовая цепь

Преобразователь уровней

Согласование сигналов 3,3 В и 5 В через level shifter

Преобразователь уровней соединяет две логические системы: например, SBC с GPIO 3,3 В и внешний модуль с логикой 5 В. Для обычного неразвязанного преобразователя нужна общая земля.

Преобразователь выбирают не только по напряжению. Нужно проверить направление сигнала, скорость, тип выхода, количество каналов и поведение при выключении одной стороны. Для I²C требуется решение, совместимое с open-drain и подтяжками; для быстрого SPI нужен более подходящий буфер.

Нагрузки нельзя питать от GPIO

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

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

GPIO в Linux

Современный Linux представляет GPIO через character device API и устройства вида /dev/gpiochipN. Старый sysfs-интерфейс /sys/class/gpio считается устаревшим и не должен быть основой нового учебного проекта.

Практический порядок такой:

  1. Найти контакт на официальном pinout.
  2. Сверить имя сигнала и альтернативные функции.
  3. Проверить, не занята ли линия драйвером ядра.
  4. Определить gpiochip и offset в работающей системе.
  5. Только после этого выполнять короткий безопасный тест.

Если для устройства уже есть штатный драйвер ядра, лучше использовать его. Не нужно вручную «дёргать» GPIO для I²C-датчика, SPI-устройства или PWM, если платформа поддерживает соответствующий subsystem.

Что проверить перед подключением

ПроверкаЗачем она нужна
Точная модель платы и ревизияPinout и доступность линий зависят от платы.
Ориентация разъёмаОшибка на один ряд может подать питание на сигнал.
Логический уровеньНе подать 5 В на вход 3,3 В.
Общая земляБез общего уровня отсчёта сигнал может читаться неверно.
Ток нагрузкиGPIO не питает реле, мотор или мощную лампу.
Состояние при загрузкеВывод может быть входом, подтянутым или занятым системой.
Способ отключенияРобот должен оставаться безопасным при перезагрузке Linux.

Практика

Найдите официальный pinout точной модели своей платы и выберите контакты для кнопки, светодиода через резистор и I2C-датчика. В таблице запишите физический номер контакта, имя GPIO, функцию и допустимый логический уровень. Схему сначала нарисуйте без подачи питания.

Проверка завершена, если контакты питания не названы GPIO, входы не получают 5 В, для кнопки указана подтяжка, а нагрузка светодиода ограничена резистором. Мотор и реле в такую схему напрямую не добавляются.

Проверьте себя

  1. Чем физический номер контакта отличается от номера GPIO?
  2. Почему вывод 5 В нельзя превратить в GPIO программой?
  3. Зачем кнопке нужна подтяжка?
  4. Почему светодиод подключают через резистор?
  5. Почему мотор нельзя подключить к GPIO напрямую?
  6. Когда нужен преобразователь уровней?
  7. Почему pinout нужно брать для точной модели платы?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

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

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Физический контакт — место на разъёме, определяемое номером и ориентацией колодки.
  • GPIO — программируемая линия цифрового ввода-вывода.
  • Подтяжка — резистор, задающий известное состояние входа без активного сигнала.
  • Преобразователь уровней — схема для безопасного согласования разных логических напряжений.

Связанные темы

Источники