Raspberry Pi. Работа с портами ввода-вывода GPIO.
В сегодняшней статье мы рассмотрим основные нюансы и механизмы управления портами ввода-вывода GPIO платы Raspberri Pi. И, конечно же, как обычно, все проверим на практическом примере.
Все версии Raspberry Pi оснащены штыревым разъемом, на который выведены порты GPIO. Начиная с 2014-го года разъем стал 40-пиновым (ранее было 26). На версиях Pi Zero и Pi Zero W присутствует посадочное место для разъема, но физически он не распаян:
В любом случае, как и с любой другой платой, расположение сигналов на этом разъеме для конкретной модификации лучше всего проверить по официальному даташиту. Хотя на разных версиях плат 40-пиновые разъемы для совместимости идентичны. Распиновка и сам разъем выглядят следующим образом:
Порты можно разделить на несколько категорий:
Разберем по очереди… Пины 3.3V и 5V могут использоваться для питания внешних устройств, подключенных к плате. При этом ограничение по току выглядит так:
I_{5V} = I_{вх} \medspace - \medspace I_{п}
где I_{вх} – это входной ток источника, который мы используем для питания платы. А I_{п} – это ток, потребляемый самой платой, а также внешними устройствами, подключенными по USB. То есть мы подаем входной ток, часть его потребляют узлы платы, а то, что остается мы можем использовать для дополнительных устройств, подключенных к пину 5V.
- Для выводов 3.3V все проще – максимальный ток составляет 50 мА и на этом точка.
В итоге за вычетом выводов 3.3V, 5V и Ground остаются 28 пинов GPIO, помеченных на схеме зеленым. GPIO0 и GPIO1 можно считать зарезервированными (их назначение обязательно обсудим в отдельной статье). Таким образом, остается 26 выводов, которые можно использовать по-своему усмотрению. Каждый из них может быть сконфигурирован на работу в том или ином режиме. Вот, к примеру, возможные функции портов для платы Raspberry Pi 4:
То есть любой из портов ввода-вывода может выполнять до 6-ти различных функций, в зависимости от конфигурации. В частности, GPIO2 может быть использован как сигнал SDA для I2C1 (SDA1), либо, к примеру, как сигнал MOSI для интерфейса SPI3 (SPI3_MOSI).
Об I2C и SPI поговорим в ближайших статьях, а сегодня нас интересует использование GPIO в качестве “обычных” входов и выходов. В режиме выхода на пин может быть выведен высокий (3.3 В) или низкий (0 В) уровень напряжения. А, соответственно, в режиме входа мы можем проанализировать, какой уровень подан на пин – высокий или низкий – 3.3 В или 0 В. Тут важно обратить внимание, что порты не являются толерантными к 5 В, то есть подавать на вход 5 В категорически нельзя.
В режиме входа для любого из GPIO можно активировать внутреннюю подтяжку к питанию или земле (
Исключением являются пины GPIO2 и GPIO3. Они имеют фиксированную подтяжку вверх, без вариантов.
В режиме выхода мы снова возвращаемся к ключевому параметру, а именно к ограничению по току. Максимальный ток для одного вывода составляет 16 мА. При этом, если используются несколько выходов, то суммарный ток не должен превышать 50 мА. Превышение допустимых значений с большой вероятностью приведет к выгоранию порта.
Собственно, давайте рассмотрим практический пример. Задействуем два вывода GPIO – один в качестве входа
, второй в качестве выхода. На вход подключим кнопку, а на выход – светодиод. И реализуем программу, которая будет опрашивать сигнал на входе и по нажатию кнопки зажигать светодиод.Выберем GPIO3 для светодиода и GPIO4 для кнопки. Схема подключения будет такой:
Давайте в двух словах разберем, что, как и зачем подключено. Начнем с кнопки. Программно активируем для GPIO4 подтяжку вверх, поэтому если кнопка не нажата мы получим на входе высокий уровень (логическую единицу). Соответственно, для того, чтобы определить нажатие кнопки, подключим ее к земле. В итоге при нажатой кнопке на входе будет низкий уровень (логический ноль). Поскольку используем внутреннюю подтяжку, в этом примере ставить дополнительный внешний резистор подтяжки не будем.
Резистор R_{1} – токоограничительный. Как вытекает из названия он нужен для ограничения тока ) Рассмотрим, что произойдет, если вывод GPIO4 будет ошибочно настроен не как вход, а как выход и на нем будет 3.3 В. При нажатии кнопки произойдет короткое замыкание 3.3 В на землю, что приведет к безвозвратному повреждению порта платы. Это в случае отсутствия резистора.
А при наличии резистора ток будет ограничен величиной:
I = \frac{3.3 \medspace В}{1000 \medspace Ом} = 3.3 \medspace мА
В данном случае получаем 3.3 мА, что вполне допустимо, и позволит сохранить порту жизнь в случае возникновения замыкания.
Итак, переходим к диоду, который подключен через резистор R_{2}. Каждому диоду соответствует своя собственная вольт-амперная характеристика (ВАХ), определяющая возможные значения прямого напряжения и тока. Рассмотрим первый попавшийся под руку светодиод, например такой – ссылка:
Открываем даташит на него и находим зависимость тока от напряжения при прямом включении:
Максимальный ток для GPIO в режиме выхода, как мы уже выяснили, составляет 16 мА.
Чтобы не превысить это значение подадим на светодиод, например, 10 мА. Этому току, исходя из графика, соответствует напряжение 2 В. Теперь по закону Ома нам остается только определить величину резистора. На выходе GPIO у нас 3.3 В, на диоде должно падать 2 В, значит на резисторе остается:U_{рез} = 3.3 \medspace В \medspace - \medspace 2 \medspace В = 1.3 \medspace В
При этом ток в цепи должен быть равен 10 мА, тогда сопротивление резистора:
R_{2} = \frac{1.3 \medspace В}{10 \medspace мА} = 130 \medspace Ом
Если точной величины под рукой нет, можно взять резистор номиналом чуть больше. В общем, суть тут одна – обеспечить режим работы, при котором ток через выход не превышает допустимые 16 мА. Для большинства светодиодов в документации просто приводятся конкретные типовые значения напряжения и тока, например 2.5 В и 15 мА. Расчет будет выглядеть точно так же, как и рассмотренный, просто значения другие.
В общем, с подключением разобрались, время переходить к программной реализации. Существует огромное многообразие возможных способов для управления GPIO, мы же сегодня остановимся на использовании python.
И для работы с портами ввода-вывода используем библиотеку/модуль RPi.GPIO. В Raspberry Pi OS он включен по умолчанию, но в случае отсутствия команда для установки такая:
sudo apt-get install python-rpi.gpio
Создаем файл gpio_test.py и добавляем в него следующий код:
import RPi.GPIO as GPIO import time GPIO_LED = 3 GPIO_BUTTON = 4 DELAY_TIME = 0.5 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_LED, GPIO.OUT) GPIO.output(GPIO_LED, GPIO. LOW) GPIO.setup(GPIO_BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: time.sleep(DELAY_TIME) if GPIO.input(GPIO_BUTTON) == 0: GPIO.output(GPIO_LED, GPIO.HIGH) print('led on') else: GPIO.output(GPIO_LED, GPIO.LOW) print('led off') except KeyboardInterrupt: GPIO.cleanup() print('exiting')
Пройдемся подробнее, прямо по всем строкам последовательно. Делаем import модулей для работы с GPIO и для использования временной задержки:
import RPi.GPIO as GPIO import time
Добавим переменные для хранения номеров портов и величины задержки. У нас светодиод на GPIO3, а кнопка на GPIO4. Так и определим:
GPIO_LED = 3 GPIO_BUTTON = 4 DELAY_TIME = 0. 5
Далее настроим режим нумерации портов, чтобы номера соответствовали названию сигнала (например, GPIO3), а не порядковому номеру на разъеме:
GPIO.setmode(GPIO.BCM)
Настраиваем GPIO3 на работу в режиме выхода и гасим светодиод, подав низкий уровень:
GPIO.setup(GPIO_LED, GPIO.OUT) GPIO.output(GPIO_LED, GPIO.LOW)
GPIO4 – в режиме входа с подтяжкой вверх:
GPIO.setup(GPIO_BUTTON, GPIO. IN, pull_up_down=GPIO.PUD_UP)
Далее организуем вечный цикл while True, в котором и будем проверять состояние кнопки и мигать светодиодом. Только обернем его в блок
try: while True: time.sleep(DELAY_TIME) if GPIO.input(GPIO_BUTTON) == 0: GPIO.output(GPIO_LED, GPIO.HIGH) print('led on') else: GPIO.output(GPIO_LED, GPIO.LOW) print('led off') except KeyboardInterrupt: GPIO.cleanup() print('exiting')
Ну и, конечно, здесь же у нас вся полезная работа. Если кнопка нажата (а в нашей схеме этому соответствует низкий уровень/логический ноль на GPIO4), то зажигаем светодиод и выводим сообщение “led on“. При отпускании кнопки – обратный процесс. Проверять кнопку будем каждые 0.5 с (DELAY_TIME).
Запускаем программу командой:
python gpio_test.py
И теперь, нажимая кнопку, можем наблюдать включение и выключение светодиода, как мы и планировали 👍
Использование GPIO из Python на Raspberry Pi / Хабр
Делюсь своим опытом, полученным при изучении задачи вынесенной в заголовок. В статье рассматриваются два варианта работы, которые можно использовать в Python-программах, обращающихся к портами GPIO Raspberry Pi.
Порты GPIO Raspberry Pi выглядят следующим образом:
Одним из вариантов работы с GPIO является интерфейс Sysfs. Подробнее о Sysfs интерфейсе GPIO здесь. В этом случае для обращения к портам GPIO используются операции чтения и записи файлов. Для использования конкретного вывода его нужно зарезервировать и установить направление на вход или на выход. После окончания работы с портом его нужно освободить, чтобы другие процессы могли его использовать.
Резервирование порта (XX — номер нужного порта):
$ echo XX > /sys/class/gpio/export
При успешном резервировании появляется новая папка по адресу /sys/class/gpio/gpioXX/
. Установка направления выполняется так:
$ echo "out" > /sys/class/gpio/gpioXX/direction
Или так:
$ echo "in" > /sys/class/gpio/gpioXX/direction
Установка высокого и низкого уровней для порта, настроенного на выход выполняется так:
$ echo 1 > /sys/class/gpio/gpioXX/value $ echo 0 > /sys/class/gpio/gpioXX/value
Определение состояние порта, настроенного на вход делается так:
$ cat /sys/class/gpio/gpioXX/value
Освобождение порта после окончания его использования:
$ echo XX > /sys/class/gpio/unexport
Для упрощения работы с GPIO через интерфейс Sysfs мне встретились две утилиты. Одна из них WiringPi GPIO utility, другая quick2wire-gpio-admin.
Основная задача, решаемая этими утилитами — это предоставление возможности работы с GPIO от имени непривилегированного пользователя. При этом WiringPi GPIO utility более функциональна.
Я для работы с GPIO остановился на пакете RPIO (на момент написания последней была версия 0.10.0). Этот пакет работает с портами GPIO напрямую, обращаясь к регистрам BCM2708 через специальное устройство /dev/mem
. Что такое RPIO:
Advanced GPIO for the Raspberry Pi. Extends RPi.GPIO with PWM, GPIO interrups, TCP socket interrupts, command line tools and more
RPIO позиционируется как улучшенный и расширенный вариант другого модуля, RPi.GPIO. В документации непосредственно на RPIO подробно рассмотрены только возможности, отсутствующие в RPi.GPIO, по этому за описанием общих для этих модулей функций нужно обращаться к документации RPi.GPIO, доступной здесь.
Устанавливается пакет следующей командой:
$ sudo pip install RPIO
Кроме python-модулей устанавливаюся две программы: rpio-curses и rpio. С их помощью можно, например, получить текущий режим и состояние GPIO и, при желании, изменить их. Так выглядит работа с rpio-curses:
Так можно получить информацию о системе:
$ rpio --sysinfo 000f: Model B, Revision 2.0, RAM: 512 MB, Maker: Qisda
Пример python-программы, использующей RPIO:
import RPIO import time NRF_CE = 24 # set up output channel with an initial state RPIO.setup(NRF_CE, RPIO.OUT, initial=RPIO.LOW) for i in range(10): RPIO.output(NRF_CE, 1) time.sleep(1) RPIO.output(NRF_CE, 0) time.sleep(1) # reset every channel that has been set up by this program, # and unexport interrupt gpio interfaces RPIO.cleanup()Корпус
GPi, 2 Вт — Retroflag Корпус
GPi, 2 Вт — Retroflag Safe Shutdown
Аудиопорт 3,5 мм
Светодиодный индикатор питания
Экран 3.0 IPS
Чехол Raspberry Pi в стиле Game Boy
Совместимость с Raspberry Pi ZERO, ZERO W, ZERO 2W
Руководство по эксплуатацииКУПИТЬ (США)КУПИТЬ (Калифорния)
В честь 8-битной портативной игровой консоли Game Boy, а не
только он выглядит так же, он также включает дополнительные функции, такие как кнопки X / Y
, скрытые плечевые кнопки L / R, а также POWER.
КОРПУС GPi | ЧЕХОЛ GPi, 2 Вт | |
---|---|---|
Размер экрана/разрешение | 2,8-дюймовый TFT ЖК-дисплей / 320*240 | 3,0″ IPS/640*480 |
Функциональная кнопка | / | Турбо, замена кнопок / домой |
Шнур питания | Кабель питания USB-DC 2,5 x 0,7 мм | Кабель питания USB-DC 2,5 x 0,7 мм |
Емкость аккумулятора | Батарейка типа АА *3 | Литий-ионный аккумулятор 2800 мАч |
Совместимость | Raspberry Pi ZERO Raspberry Pi ZERO W | Raspberry Pi ZERO Raspberry Pi ZERO W Raspberry Pi ZERO 2W |
Рекомендуется система Recalbox.
Нет необходимости устанавливать какие-либо патчи для дисплея и сценарии безопасного завершения работы.
Скачать: https://www.recalbox.com
Необходимы Retropie система, исправление дисплея и сценарии безопасного завершения работы.
Шаг 1: отображение исправления
Зачем нам нужно устанавливать патч display GPi CASE 2W для Retropie?
Поскольку выходом дисплея системы Retropie по умолчанию является HDMI. GPi CASE 2W должен передавать вывод дисплея на GPIO, чтобы он работал правильно.
Шаг 2: Безопасное завершение работы
GPi CASE 2W может иметь функции БЕЗОПАСНОГО ВЫКЛЮЧЕНИЯ. (Скрипты нужны).
* Скрипты безопасного завершения работы:
https://github.com/RetroFlag/GPiCase2-Script
Установка без пайки и усилий.
Raspberry Pi Zero
Порт Micro SD
Плата преобразования ввода-вывода
Задняя часть картриджа
Raspberry Pi ZERO / ZERO W / ZERO 2W
- 1. Выключатель ПИТАНИЯ
- 2. Вход питания постоянного тока
- 3. Яркость
- 4. Турбо 1
- 5. Разъем для наушников 3,5 мм
- 6. Динамик
- 7. Дом 2
- 8. Том
- 9,3-дюймовый IPS-экран
- 10. Порт USB для обновления прошивки
- 11. Правая плечевая пуговица
- 12. Карман для батареи
- 13. L-образная плечевая пуговица
Размеры корпуса
Вес
Совместимость
Размер экрана
Аккумулятор
Включает
*1. Turbo: нажмите и удерживайте кнопку TURBO, затем нажмите кнопку A / B / X / Y / L / R.
Auto-Turbo: нажмите и удерживайте кнопку TURBO, затем дважды нажмите кнопку A/B/X/Y/L/R; Пауза / перезапуск функции Auto-Turbo нажатием кнопки Ты устанавливаешь.
*2. Функция Home/горячая клавиша, установленная в системе
Чехол RetroFlag GPi 2 Deluxe для Raspberry Pi CM4 и комплектов
Описание
ПРИМЕЧАНИЕ: На этой странице предлагается несколько вариантов для корпуса GPI 2 Deluxe Case и Kits с:
Case 2 Deluxe + Cm44W4L + PSU | GPI 27778 | GPI. |
Примечание: Официальный блок питания (PSU) будет либо черного , либо белого цвета в зависимости от наличия.
Retrogame стал хитом для компьютера Raspberry Pi. Есть много готовых образов (игр), которые вы можете скачать и играть с основной платой Raspberry Pi. Теперь с вычислительным модулем 4 вы можете получить столько вариантов, сколько захотите. Существует 32 варианта вычислительного модуля Raspberry Pi 4. Он компактный, тонкий и сверхмощный.
Корпус GPi 2 совместим со всеми вариантами Raspberry Pi CM4 (беспроводными и обычными). Однако мы рекомендуем CM4 с беспроводным подключением и Lite 9.версии 0200. Причины:
- НЕТ Ethernet на GPi Case 2, поэтому единственный метод удаленного доступа к RetroPie, RecalBox или другой ОС — через беспроводной SSH. Если вы используете не беспроводной CM4, это будет очень хлопотная работа. Поэтому приобретите CM4 со встроенным модулем беспроводной связи
- CM4 со встроенным модулем eMMC НЕ МОЖЕТ расширить объем памяти с помощью карты microSD . Если вы получаете CM4 с eMMC, вам нужно будет придерживаться размера eMMC для ОС и ПЗУ (игр). Несмотря на то, что в GPi Case 2 есть слот для карт памяти microSD, он предназначен для CM4 Lite. Поэтому приобретите версию CM4 Lite, в которой можно выбрать размер карты microSD. Если у вас есть только CM4 с eMMC, выберите большую емкость eMMC и поймите, что это НЕ МОЖЕТ быть расширен .
Идеальная портативная игровая консоль Retrogame для вычислительного модуля 4 и размер оперативной памяти от 8 ГБ до 1 ГБ. С его помощью вы можете собрать свою любимую портативную игровую консоль в стиле ретро. Корпус GPi 2 оснащен 3-дюймовым ЖК-экраном IPS с разрешением 640×480, которого более чем достаточно для большинства 8-битных ретро-игр. Он также портативный с
Литий-ионная аккумуляторная батарея 4000 мАч в комплекте. С огромной емкостью аккумулятора вы сможете играть в любимую игру как минимум несколько часов! Его можно заряжать через порт USB-C в нижней части корпуса или через порт USB-C на док-станции.
Посмотрите распаковку, установку CM4 и обзоры Таки Удона (включая док-станцию):
Дизайн
Как дань уважения 8-битной портативной игровой консоли, Game Boy он только выглядит так же, но также включает в себя дополнительные функции, такие как кнопки X / Y, скрытые плечевые кнопки L / R и POWER.
Помимо порта USB-C для зарядки аккумулятора, чехол GPi 2 также оснащен разъемом для наушников 3,5 мм в нижней части корпуса. Для геймеров кейс поставляется с дополнительной кнопкой Turbo , горячей клавишей и функцией экономии энергии с кнопкой экономии энергии .
Еще один отличный обзор от ETA Prime:
Обзор и демонтаж корпуса GPi 2 от wermy:
Поддержка всех вариантов CM4
Корпус GPI 2 поддерживает все варианты модуля Raspberry Pi 4.
Layout
. Примечание: Это Deluxe Edition со специальной док-станцией. В комплект поставки док-станции входят: Все порты расположены на задней панели док-станции. Помимо образа RetroPie или Recalbox, вы установите исправление. Это связано с тем, что в Retropie и Recalbox по умолчанию для отображения/мультимедиа используется HDMI, в то время как в случае GPi 2 используется GPIO для вывода изображения на 3,0-дюймовый экран. Итак, патч. Скачать патч можно здесь. Для использования безопасного завершения работы необходим сценарий. Вы можете получить его здесь: https://github.com/RetroFlag/GPiCase2-Script Вычислительный модуль 4 официально запущен 19 октября 2020 года с такими же или лучшими характеристиками, и на выбор предлагается 32 варианта модуля. Этот комплект включает вычислительный модуль 4, который входит в комплект поставки 9. 0199 С беспроводной связью . кнопку, затем нажмите кнопку A / B / X / Y / L / R.
Technical Specifications
The Deluxe Edition
GPi Case 2 Dock
Загрузка образа ОС, исправления и сценария на карту microSD
следующее руководство.
Особенности
- Полный комплект GPI Case 2 с CM4 и Power Adapter включен
- Retroflag Case 2: 907
- 9019 oprgleged Gpi. Вычислительный модуль Raspberry Pi 4
- Совместимость и поддержка всех вариантов CM4
- Слот для карты MicroSD (шарнирного типа) для CM4 Lite
- Гнездо USB micro B (под заглушкой) для обновления прошивки контроллера GPi Case 2
- Поставляется с кнопкой безопасного выключения (необходимо установить скрипты)
- Добавлены кнопки Turbo и Home
- Добавлены Кнопка режима энергосбережения
- Встроенная перезаряжаемая литий-полимерная батарея емкостью 4000 мАч
- Разъем USB-C для зарядки литий-полимерной батареи
- Поставляется с 3-дюймовым TFT-экраном с разрешением 640 x 480
- Чехол в стиле Game Boy
- Разъем для наушников 3,5 мм с поддержкой стереозвука
- Встроенный монофонический динамик
- Регулятор громкости сбоку
- Версия Deluxe поставляется с корпусом GPi Case 2 Dock
- Корпус GPi 2 Док-станция поддерживает выход HDMI на телевизор или ЖК-монитор HDMI, 2 порта USB 2. 0 и порт зарядки USB-C.
Упаковочный лист
- Raspberry Pi CM4 Wireless 4G RAM Lite (без eMMC) с Комплект GPi Case 2 Deluxe :
- 1 x Вычислительный модуль Raspberry Pi 4, беспроводной, встроенный 4 ГБ ОЗУ и без eMMC (Lite)
- 1 x RetroFlag GPi Case 2 Deluxe комплект
- 1 x Официальный RPi 15 Вт (5 В/3 А) ) Блок питания USB C UK Plug — черный или белый ( в зависимости от наличия )
- 1 карта памяти MakerDisk microSD емкостью 64 ГБ с предустановленной ОС Raspberry Pi OS
- БЕСПЛАТНО:
- Устройство чтения/записи карт MicroSD USB 2.0
- Чехол RetroFlag GPi 2 (Deluxe) для вычислительного модуля Raspberry Pi 4:
- 1 простое руководство по эксплуатации
- 1 кабель USB-A/USB-C
- 1 чехол GPi 2 8 Case 2 Dock
Ресурсы
- Учебное пособие: Retroflag GPi Case 2 с Raspberry Pi CM4. Часть 1: Руководство по начальной настройке, видеоруководство TeamRetrogue
- Установка RetroPie на CM4 eMMC4 eMMC4 учебник Cytron Technologies
- Беспроводное добавление игр в RetroPie, руководство от Cytron Technologies
- RetroFlag GPi Case 2 Инструкция по эксплуатации
- Патч дисплея, заархивированный файл, извлеките и просмотрите файл readme.txt
- Скрипт для безопасного завершения работы, ссылка на Github 2 Review and Teardown, by sudomod
- Страница загрузки изображения RetroPie
- rpiboot, загрузка для компьютера для обнаружения eMMC CM4
- Compute Module 4 Product Brief, pdf
- Compute Module 4 datasheet, pdf
- Вычислительный модуль 4, STEP-файл, заархивированный файл
- Вычислительный модуль 4 Lite (без eMMC), STEP-файл, заархивированный файл
- BCM2711 (процессор SoC) Периферийные устройства
- Начало работы с Raspberry Pi от raspberrypi.org
- Raspberry Projects and tutorials
Вложения
Отзывы (7)
- Средняя оценка:
4.