Уровни на пинах GPIO по умолчанию
После того как Raspberry Pi включена и операционная система Linux загружена, на выводах GPIO установлен низкий уровень (0В), и так будет до тех пор, пока какая-то программа или скрипт не изменит состояние портов GPIO.
Эта информация взята из документации, также она подтверждается прощупыванием состояний пинов при помощи тестера (вольтметра).
После включения малинки и загрузки операционной системы все пины GPIO выставлены в 0 и сконфигурированы в режиме входа (Input). После этого мы программным способом выставляем и переключаем состояния нужных пинов в такие, которые нужны для нашего проекта.
При проектировании подключаемых к GPIO электронных схем и блоков, этот момент желательно предусматривать!
Для защиты портов GPIO, подключение пинов к схеме желательно выполнять через резисторы с сопротивлением 680 Ом — 2К и даже больше. Схема подключений должна быть построена так, чтобы с этими резисторами все работало уверенно и надежно.
Также одним из решений может стать резервирование одного пина GPIO для управления схемой подачи питания (электронный силовой ключ) на подключаемую к малинке электронику и исполнительные устройства.
В таком случае, питание на электронику поступит только после того, как загрузится OC Linux и скрипт вашей программы в нужный момент готовности подаст высокий уровень на пин, отвечающий за подачу питания на остальную схему.
Более детальную информации о том как работает GPIO на платформе Raspberry Pi можно узнать из документации к процессорам Broadcom (смотри ссылки в конце статьи).
GPIO в Raspberry Pi для моделей A и B
Рис. 1. Raspberry Pi model B GPIO разъем и нумерация пинов.
В версиях A и B разъем содержит 26 пинов (P1 header), 8 из которых являются общими портами ввода-вывода GPIO, а также пины для подключения интерфейсов I²C, SPI, UART и линии питания +5В, +3,3В, GND.
В самых ранних версиях малинки также можно встретить небольшой разъемчик с 8-ю пинами (P2 header) — это интерфейс отладки VideoCore JTAG, в последующих версиях он был исключен.
Еще можно заметить несколько не распаянных разъемов — это:
Распиновка разъемов GPIO
Для использования разъема GPIO необходимо знать точное назначение каждого из его пинов (контактов). Ниже приведены распиновки разъемов GPIO для разных моделей и разных версий платформы Raspberry Pi.
Рис. 3. Raspberry Pi model A B — расположение пинов на разъеме GPIO.
Важно заметить что у ревизий печатной платы 1.0 (сентябрь 2012 или раньше) и 2.0 расположение пинов немножко отличается:
Это нужно учесть при проектировании и переделке устройств на платформах с разной ревизией печатных плат.
Рис. 4. Распиновка разъема GPIO в Raspberry Pi A+, B+, 2.
Модуль RPIO
В приведенной выше экспериментальной программе мы использовали модуль GPIO из пакета RPi. Существует еще один интересный модуль, заслуживающий внимания — это RPIO.
RPIO - это модуль с дополнительными возможностями для работы с GPIO Raspberry Pi. Он содержит весь функционал пакета GPIO(RPi) и некоторые дополнительные фишки.
Также, данный модуль содержит две полезные и удобные консольные утилиты:
## GPIO в Raspberry Pi для моделей A+, B+ и B2
Рис. 2\. Интерфейс GPIO в Raspberry Pi 2 и нумерация пинов.
В новых версиях платформы разъем GPIO уже содержит 40 пинов (2 ряда по 20 штук). Первые 26 пинов (по 13 в ряду) - такие же как и в более ранних версиях Raspberry Pi, а остальные 14 штук являются дополнительными:
Больше пинов - больше возможностей по расширению и применению малинки!
## Управление светодиодами активности и питания на плате малинки
Индикаторами активности и питания (зеленый и красный светодиоды на плате), расположенными на плате Raspberry Pi, также можно управлять.
Например, можно использовать красный светодиод индикации питания для индикации какой-то аварийной ситуации (заставив его быстро мигать) и т.п.
Делается это через изменение связанных со светодиодом (как системным устройством) файлов в дереве виртуальной файловой системы SysFS, о которой было сказано в предыдущем разделе.
Ниже приведены пути к директориям со специальными файлами и папками, которые своим содержимым конфигурируют и управляют этими светодиодами.
В зависимости от версии платформы и ОС эти специальные каталоги устройств могут располагаться по разным путям, поэтому приведу несколько вариантов, каждый из которых можно самостоятельно проверить на имеющейся в наличии малинке.
Для , индикатора активности (activity):
Для , индикатора питания (power):
Смотрим наличие и содержимое каталога:
Или в древовидном варианте:
Пример содержимого каталога устройств /sys/class/leds/led0/:
В каждом из таких каталогов устройств есть по два специальных файла:
Например, чтобы полностью взять под свой контроль и погасить светодиод LED1 (индикатор питания) нам нужно:
Давайте посмотрим на текущее содержимое файла trigger для каждого из устройств-индикаторов:
cat /sys/class/leds/led0/trigger cat /sys/class/leds/led1/trigger
В консоль будет выведено примерно следующее:
Это список событий и активностей, к которым можно привязать индикатор. В каждом из случаев, текущая привязка взята в квадратные скобки:
Вот описания еще нескольких интересных событий, к которым можно автоматически привязать данные светодиоды:
Все следующие команды будем выполнять от имени обычного пользователя, тут нам поможет одна хитрость, о которой будет рассказано дальше.
Давайте заставим светодиод питания (LED1) мигать каждую секунду, привяжем его к событию timer:
А теперь ассоциируем LED1 с событием none, чтобы его свечением можно было уверенно управлять через файл brightness:
Чтобы засветить светодиод и потом погасить его, достаточно воспользоваться следующими командами:
Расскажу кратко что это за конструкции из команд и как они работают.
Команда sudo sh -c command вызывает оболочку командного интерпретатора sh с правами суперпользователя (root), переданная далее в кавычках команда или связка из команд будут автоматически выполнены с правами root.
Попробуйте выполнить следующие команды под обычным пользователем:
Вы получите сообщение о запрете доступа:
-bash: /sys/class/leds/led1/trigger: Permission denied
Вот поэтому хитрость с sudo sh -c command нас и выручила.
Все эти команды можно выполнять прямо из-под root и без sudo, как и в предыдущем разделе. Но я не рекомендую применять такую практику постоянно, поскольку из-за невнимательности или ошибки в коде можно повредить важные данные и системные файлы.
А вот как можно заставить светодиод питания быстро мигать, используя скрипт, написанный на Python.
Создадим файл скрипта:
Поместим в него код:
\# Raspberry Pi power-led blinking program. # https://ph0en1x.net/ from time import sleep # Функция для записи данных в указанный файл. def write_to_file(data=, path=): with open(path, w) as f: f.write(data) # Отвязка LED1 от событий в Raspberry Pi. write_to_file(none, /sys/class/leds/led1/trigger) # Вечный цикл, зажигаем и гасим LED1. while True: write_to_file(255, /sys/class/leds/led1/brightness) sleep(0.1) write_to_file(0, /sys/class/leds/led1/brightness) sleep(0.1)
Запускать нужно с правами суперпользователя, например вот так:
sudo python3 power_led_blinking_test.py
Чтобы прервать работу скрипта, нажмите комбинацию клавиш CTRL+C.
Запуская от имени суперпользователя (root) сценарии, написанные на языке Python будьте предельно внимательны и осторожны. Все запускаемые в скрипте операции получат в системе неограниченные права и полный доступ!
## Вопрос-ответ
Raspberry Pi обладает 40 GPIO-портами, которые могут быть использованы для подключения и управления различными электронными компонентами, такими как светодиоды, датчики, кнопки и т.д. Это позволяет создавать различные проекты, использующие внешние устройства.
### Можно ли управлять GPIO на Raspberry Pi из Python?
Да, Raspberry Pi предлагает поддержку Python для управления GPIO. Существуют различные библиотеки для работы с GPIO в Python, например, RPi.GPIO. Они предоставляют удобные функции для управления портами, чтения и записи данных, изменения режимов работы портов и т.д.
### Как подключить светодиод к GPIO на Raspberry Pi?
Для подключения светодиода к GPIO на Raspberry Pi, вам понадобится резистор и несколько проводов. Один конец светодиода подключается к GPIO порту, а другой конец через резистор к земле (GND). Провода от Raspberry Pi к светодиоду подключаются соответствующим образом. Затем вы можете использовать Python-код для управления светодиодом через GPIO.
### Какой пин на Raspberry Pi следует использовать для ввода данных с датчика?
На Raspberry Pi можно использовать любой GPIO-пин для ввода данных с датчика. Вам нужно только правильно подключить датчик к выбранному пину, учитывая его входной и выходной режимы и, возможно, использовать необходимые резисторы или другие компоненты для корректной работы датчика.
## Какой максимальный ток можно потреблять из GPIO на Raspberry Pi?
Максимальный ток, который можно потреблять из GPIO на Raspberry Pi, зависит от модели Raspberry Pi и может быть разным. Обычно максимальный ток для каждого GPIO-порта составляет около 16 мА. Однако, не рекомендуется нагружать все порты сразу на максимальный ток, так как это может привести к перегреву и нестабильной работе компонентов.
## Какие возможности предоставляет управление GPIO на Raspberry Pi?
Управление GPIO на Raspberry Pi позволяет подключать и контролировать различные периферийные устройства, такие как светодиоды, кнопки, сенсоры, моторы и др. С помощью GPIO можно создавать разнообразные проекты, от простых до сложных.
## Можете привести пример использования GPIO на Raspberry Pi?
Конечно! Например, вы можете подключить светодиод к Raspberry Pi через GPIO и использовать его для индикации различных событий. Вы можете написать программу, которая будет включать и выключать светодиод в определенные моменты времени или при определенных условиях. Также вы можете подключить кнопку и использовать ее для управления светодиодом.
## Использование GPIO для управления периферийными устройствами
Представленные на Raspberry Pi GPIO (General Purpose Input/Output) пины предоставляют возможность управления различными периферийными устройствами, такими как светодиоды, кнопки, датчики и другие электронные компоненты.
GPIO пины могут быть настроены как входы или выходы. Входные пины способны считывать состояние электрических сигналов и реагировать на изменения. Выходные пины позволяют управлять подключенными к ним устройствами, устанавливая нужные уровни напряжения. Количество и тип GPIO пинов на Raspberry Pi может различаться в зависимости от модели платы.
Для работы с GPIO на Raspberry Pi используется язык программирования Python и библиотека RPi.GPIO. Вместе они предоставляют удобный способ управления пинами и обработки событий.
Пример использования GPIO для управления светодиодом:
import RPi.GPIO as GPIO
Таким образом, использование GPIO на Raspberry Pi позволяет управлять различными периферийными устройствами и создавать интерактивные электронные проекты.
## Расчет гасящего резистора для светодиода
Как правило, для экспериментов со светодиодами будет достаточно гасящего резистора на 270-600 Ом. При большем сопротивлении светодиод будет светиться немного тусклее (ток через него меньше), а при меньшем сопротивлении - ярче (ток возрастет).
Для более точного расчета сопротивления гасящего резистора (при питании от линии 3.3В) используем формулу:
R = (3.3В - Uд) / Iд
Приведу здесь типовые значения напряжения для светодиодов разного цвета:```
Рабочий ток светодиодов, в зависимости от их типа, может колебаться в пределах 10-25мА. Для более точных расчетов лучше не полениться и узнать параметры конкретного светодиода по справочнику.
В нашем случае, для экспериментов, ток величиной 8-15мА будет достаточен и безопасен.
К примеру возьмем отечественный светодиод АЛ307 красного цвета и рассчитаем для него гасящий резистор при токе 10мА:
R = (3,3В - 2В) / 0.01А = 130 Ом.
При сопротивлении гасящего резистора 130 Ом и питании напряжением 3.3В светодиод будет светить достаточно ярко. Можете поэкспериментировать с сопротивлением резистора, скорее всего даже при значении 300 Ом яркости свечения будет вполне достаточно для экспериментов с GPIO в Raspberry Pi и нам не придется волноваться о перегрузке порта.
## Модуль RPi.GPIO
Для написания программы мы будем использовать модуль "RPi.GPIO", который содержит достаточно много разных возможностей по управлению GPIO в Raspberry Pi.
В операционной системе Raspberry Pi OS (Raspbian) этот модуль установлен по умолчанию. Думаю что не помешает его обновить до последней доступной и актуальной версии, для этого выполним следующие команды в консоли малинки:
sudo apt-get update sudo apt-get install python-rpi.gpio
Подробное описание модуля "RPi.GPIO" с примерами приведено в статье "RPi.GPIO - работа с входами, выходами и прерываниями в Raspberry Pi, простые примеры".
## Примеры использования GPIO на материнской плате Raspberry Pi
Управление GPIO (General Purpose Input/Output) на материнской плате Raspberry Pi позволяет пользователям взаимодействовать с внешними электронными устройствами и сенсорами. GPIO предоставляет пользовательский интерфейс для подключения и управления различными устройствами, такими как светодиоды, кнопки, датчики и т.д.
Ниже приведены некоторые примеры использования GPIO на материнской плате Raspberry Pi:
Это только некоторые из возможностей использования GPIO на материнской плате Raspberry Pi. Благодаря этим функциональным возможностям, Raspberry Pi становится мощным инструментом для создания различных проектов, таких как домашняя автоматизация, робототехника, интернет вещей и многое другое.
## Использование пинов GPIO и меры безопасности
Прежде чем что-то подключать к пинам интерфейса GPIO очень важно разобраться какие напряжения можно подавать на установленные как "вход" (Input) пины и какие токи допустимы через пины, настроенные как "выход" (Output).
Пин GPIO в режиме "вход":
Пин GPIO в режиме "выход":
Также важно помнить что:
### Рекомендации по использованию пинов GPIO
При проектировании устройств с применением большого количества пинов GPIO нужно обязательно делать развязку через дополнительные буферные схемы, преобразователи уровня напряжений, электронные ключи.
Для чего это нужно? - чтобы обезопасить малинку от возможного повреждения (выгорания) электронных коммутаторов (ключей) и буферов внутри чипа.
Давайте посмотрим что получится если мы подключим к трем портам GPIO и общему для них выводу 3.3В три светодиода, через каждый из которых будет протекать ток 20мА (сверхъяркие светодиоды):
20мА \* 3 = 60мА.
Ток 60мА уже является превышением рекомендуемого разработчиками максимально допустимого значения на пине +3.3В, а также небольшой перегрузкой для каждого из пинов GPIO (по 20мА на пин вместо 18мА).
В данном случае для питания таких светодиодов нам нужно подключить к выводам GPIO дополнительные ключи на транзисторах или микросхемах, которые будут управлять светодиодами и не будут перегружать пины интерфейса.
Если к каждому из нескольких пинов GPIO мы подключим по светодиоду, то можно их общую точку подключить к земле (к GND). В таком случае светодиод будет светиться если на пине будет присутствовать высокий уровень (+3.3В).
Для ограничения протекающего через светодиод тока до 10-15мА необходимо будет его подключить через токоограничительный резистор.
Хочу заметить что для отлично видимого свечения сверхъяркого светодиода достаточно всего лишь несколько миллиампер тока.
Уменьшив ток через светодиоды уменьшится и яркость их свечения. Таким образом, стараясь уложиться в рекомендуемый общий для всех вместе взятых пинов GPIO ток 50мА, удастся подключить напрямую к GPIO больше светодиодов.
Пины с напряжением 5В подключены к основной шине питания +5В платы (после стабилизатора напряжения). Чрезмерная "пользовательская" нагрузка на этой линии может повлиять на стабильность работы платформы в целом, а также вывести из строя внутренний стабилизатор напряжения +5В.
Необходимо с осторожностью отнестись к использованию линии питания +5В, допустимый ток не должен превышать 1А (без учета потребления самой платы, примерно 700мА). Получается что для питания разных модулей и периферии доступна нагрузочная способность примерно в 300мА.
Если какой-то модуль потребляет много тока, то лучше запитать его от отдельного источника со стабилизированным напряжением +5В.
В действительности потребляемый малинкой ток во многом зависит от загруженности микропроцессора и видеопроцессора (графическая оболочка требует намного больше ресурсов чем консольный режим).
Также стоит обратить внимание на количество устройств, подключенных к USB портам. Например USB CDMA модем может потреблять в пике примерно 200мА, а веб-камера Logitech - до 300мА.
Значение общего потребляемого малинкой (с подключенными модулями и периферией) тока может варьироваться в пределах от 250мА до 1А. Для старших моделей Raspberry Pi - еще больше.
### Опасность статического электричества
На некоторой чувствительной электронике можно иногда встретить надпись наподобие "CAUTION - Static sensetive devices" (ПРЕДОСТЕРЕЖЕНИЕ - устройства, чувствительные к статическому электричеству).
На плате Raspberry Pi хоть и нет такого предупреждения, но она как и любая другая чувствительная электроника, может быть повреждена статическим электричеством.
Статическое электричество - это общее название процессов возникновения и накопления свободных зарядов на поверхностях диэлектриков (материалах, которые плохо проводят электрический ток).
Думаю вы не раз встречались с таким явлением, когда например при смене одежды возникают слышимые "потрескивания" в воздухе - это и есть разряды статического электричества. Такое явление с одеждой наиболее выражено в зимний период года, когда влажность воздуха в помещении становится низкой.
Простейший эксперимент из курса физики - пройдясь несколько раз по волосам пластиковой расческой (пластик является диэлектриком), она становится заряженной и способной притягивать к себе маленькие и легкие кусочки бумаги.
Ткани тела человека являются достаточно неплохим проводником электричества (в клетках тканей есть вода, соли), поэтому накопленный в теле статический заряд может быть перенесен на другой предмет (металл, электронное устройство), например, через пальцы рук.
Накопление статического заряда в человеческом теле может происходить по разным причинам: ношение одежды (особенно шерстяной), трение одежды о сиденье в автомобиле (материалы тканей и покрытия сделаны из диэлектриков) и т.д.
Перед тем как приступать к работе с чувствительной электроникой (микросхемы, микроконтроллеры, КМОП-компоненты и т.д.) нужно убрать такой паразитный и не несущий пользы заряд. Для этого достаточно коснуться руками какого-то массивного металлического предмета.
Также в продаже есть специальные антистатические браслеты. Для удобства работы они, как правило, надеваются на запястье одной из рук. Такой браслет содержит металлическую пластинку для контакта с телом, а отвод накопившегося в теле паразитного заряда выполняется через подключенный к ней проводник, соединенный с помощью зажима "крокодильчика" с заземлением.
Важно заметить что соединение "человек-заземление" - не прямое! В разрыве соединения "пластина-заземление" должен присутствовать резистор с сопротивлением в несколько мегаОм. Он необходим для уменьшения силы тока уходящего заряда, а также для безопасности при работе с электронными устройствами, питающимися от потребительской сети переменного напряжения.
Перед использованием убедитесь что в браслете действительно присутствует такой резистор! Для этого достаточно измерить значение сопротивления между контактами пластины и заземления с помощью мультиметра или мегаом-метра.
### Пайка контактов
Перед пайкой модулей и плат желательно отключить их от разъема GPIO, будет неплохо если есть возможность выполнять монтаж паяльником на напряжение 36В (или ниже) с использованием понижающего трансформатора 220В - 36В и т.п.
Подведу небольшой итог по мерам безопасности:
## Возможности управления GPIO на Raspberry Pi
С помощью GPIO на Raspberry Pi вы можете:
Существует несколько способов управления GPIO на Raspberry Pi:
Важно учитывать особенности работы с GPIO, такие как назначение пинов (вход или выход), использование подтягивающих резисторов, работа с разными напряжениями и т.д. Перед началом работы с GPIO на Raspberry Pi рекомендуется изучить соответствующую документацию и обратить внимание на ограничения и требования к подключению устройств.
## Светодиод и кнопка - правильное и неправильное подключение
На многих ресурсах в сети можно встретить статьи и обучающие материалы для начинающих по малинке и GPIO, в которых подключают светодиоды и кнопки разными способами.
Иногда встречаются схемы включения, которые даже оказавшись работоспособными могут нести опасность для платформы Raspberry Pi. Дальше я покажу несколько примеров и кратко расскажу почему так.
В примерах, которые будут показаны ниже, используется пин "GPIO4", в реальном проекте вместо него может использоваться любой другой из доступных.
Рис. 5\. Правильное и неправильное подключение светодиода к Raspberry Pi.
Как видно из рисунка, в правильном подключении светодиода присутствует токоограничительный (гасящий) резистор, который ограничивает ток через сам светодиод и используемый им выход порта, соответствующий GPIO4.
При прямом подключении без резистора, на светодиод поступит напряжение +3.3В, что есть больше нормы для светодиодов (2-3В). Прямое напряжение такой величины станет причиной резкого возрастания тока в цепи и может с легкостью достигать 50-100мА и даже больше!
Такая ситуация может повлечь за собой выгорание светодиода и выхода из строя как отдельного буфера GPIO, так и микропроцессора в целом.
Кнопку (с фиксацией или без) или переключатель я рекомендую подключать к GPIO с использованием опорного напряжения и двух токограничительных резисторов.
Такой способ подключения на первый взгляд кажется избыточным (два дополнительных резистора на кнопку), но у него есть свои неоспоримые преимущества.
Рис. 6\. Правильное и неправильное (опасное) подключение кнопки или переключателя к Raspberry Pi.
Дело в том, что после подачи питания на Raspberry Pi и ее процессор, в процессе загрузки ОС, кратковременные состояния напряжений на пинах GPIO могут быть хаотичными: высокий (+3.3V) или низкий уровень (0V). Об этом уже упоминалось выше в статье.
При прямом подключении кнопки к GPIO и GND (как на перечеркнутом рисунке) есть вероятность подпалить используемый выход порта (внутренние микроскопические транзисторы, которые управляют уровнем напряжения на пине).
После подачи питания на процессор (инициализация малинки) или при неверной программной установке режимов порта (сконфигурирован как OUTPUT) на используемый пин может пойти напряжение +3.3V.
В свою очередь, при замыкании кнопки или с замкнутыми контактами переключателя, это вызовет короткое замыкание пина порта на землю GND.
Через цепочку потечет большой, значительно превышающий номинальный для пинов GPIO, ток - порт может выгореть и даже повредить этим событием весь процессор.
При использовании кнопки с фиксаций или переключателя опасность возрастает в разы, так как в процессе перезагрузок ОС малинки используемый в таком случае пин может оказать постоянно подключенным к GND.
В схеме с резисторами мы получаем следующую ситуацию:
Резистор R1 можно установить на сопротивление 10 КОм - 20 КОм, а для резистора R2 на 600 Ом - 2 КОм, все должно уверенно работать.
Плюсы такого включения:
В зарубежных книгах и на зарубежных сайтах я не раз встречал примеры подключения кнопок к малинке как на перечеркнутом рисунке #6.
Например такое можно увидеть в книге "Simon Monk - Raspberry Pi Cookbook (O'Reilly)". В другой книге "Tim Cox - Raspberry Pi Cookbook for Python Programmers (Packt Publishing)" можно видеть аналогичную схему включения кнопки, только уже через резистор (ура)!
Подключение кнопки как на перечеркнутом рисунке #6 - несет опасность, лучше так не делать!
Не стоит жалеть резисторов!
Лучше уж установить последовательно к каждому пину по одному резистору, чем потом, в случае ошибки, поплатиться ценой всей платы Raspberry Pi.
В статье про RPi.GPIO я рассказал как использовать внутренние подтягивающие резисторы (Pull-Up, Pull-Down resistors). Там приведено описание и схема включения кнопки с одним резистором (рис. 2).
Кстати, такой метод подключения может понадобится если надумаете задействовать под кнопки порты GPIO2 и GPIO3\. Схема, показанная на рисунке 6, в этом случае не сработает, поскольку на плате Raspberry Pi уже распаяны резисторы, подтягивающие выводы пинов GPIO2 и GPIO3 к линии +3.3V.
Указанные резисторы предусмотрены для режима, в котором оба порта используются для шины I2C как линии SDA (Data) и SCL (Clock).
Ниже привожу схему подключения кнопки к GPIO3 с учетом внутреннего резистора сопротивлением 1.8К на плате Raspberry Pi. В данной реализации программная активация подтягивающих резисторов уже не понадобится.
Рис. 7\. Схема подключения кнопки к пину GPIO3 в Raspberry Pi.
## Как управлять пинами GPIO на любом языке программирования
Интерфейс GPIO, как и другие устройства в Линукс, представлен в псевдо-файловой системы SysFS, состоящей из директорий и файлов-устройств.
К этим файлам можно обращаться за чтением, а также в них можно выполнять запись необходимых значений, тем самым изменяя конфигурацию и состояние портов с соответствующими им пинами GPIO.
SysFS (System File System) - это виртуальная файловая система, которая отображает состояние и настройки ядра Linux.
Давайте проведем краткий эксперимент: засветим и погасим светодиод, который подключен через гасящий резистор к пину под номером 15 (GPIO 22).
Для упрощения запуска следующих команд понадобятся права суперпользователя, поэтому перейдем в режим "root", выполнив команду:
Итак, укажем драйверу что мы будем работать с пином GPIO22 - зарезервируем порт на время работы (другие приложения не смогут им пользоваться, пока мы его не освободим).
Делается это при помощи команды:
При помощи следующей команды смотрим создался ли файл для нашего GPIO22:
Увидим примерно вот такой список:
export gpio22 gpiochip0 unexport
Наш пин готов к работе - появилась папка с названием gpio22\. Также можем посмотреть какие файлы в папке создало ядро Linux для нашего виртуального пина (к ним можно будет обращаться - писать и считывать информацию для этого порта):
На выходе команды получим:
active\_low device direction edge subsystem uevent value
А теперь установим при помощи следующей команды направление (direction) пина GPIO22 на вывод (OUTPUT) и сразу же посмотрим второй командой все ли установилось как нужно:
В результате на экране должно появиться слово "out", что свидетельствует о том что все установлено верно. Теперь осталось лишь подать высокий уровень на наш пин чтобы засветить светодиод.
Сделаем это выводом числа 1 в файл /sys/class/gpio/gpio22/value, используем вот такую команду:
Светодиод должен зажечься.
Прочитать состояние пина можно при помощи команды:
А теперь погасим светодиод - выполним команду:
Ну и напоследок, после всей проделанной полезной работы выполним освобождение пина GPIO22, заставим драйвер разрегистрировать его:
Чтобы выйти из режима "root" и вернуться к строке обычного пользователя запустим команду:
Важно помнить что после резервирования пина (export) и выполнения работ связанных с ним, его нужно разрезервировать (unexport), иначе он останется занят и другие программы и скрипты не смогут получить к нему доступ!
## Подключение и настройка GPIO на плате Raspberry Pi
Для подключения и настройки GPIO на плате Raspberry Pi, вам потребуются следующие шаги:
После выполнения этих шагов, вы сможете подключать и управлять различными компонентами на плате Raspberry Pi с помощью GPIO. Это открывает широкие возможности для создания различных проектов, таких как умный дом, робототехника, интернет вещей и многое другое.
## Программа для эксперимента со светодиодом и кнопкой
Если все собрано и внимательно проверено, то можем переходить к написанию программы. Программа будет написана на языке Питон (Python).
Python - это удобный, быстрый и богатый возможностями скриптовый язык программирования, код которого компилируется и исполняется, как говорится "на лету".
Таким образом, программа не нуждается в предварительной компиляции (как например в языке Си) - мы просто запускаем скрипт на исполнение и наблюдаем результат его работы.
Одна из простейших задач для Raspberry Pi, которые приходят на ум - заставить светодиод (LED) светиться после нажатия кнопки. Но согласитесь, это как-то не очень интересно.
Поэтому мы реализуем программку, которая при запуске заставит светодиод мерцать с частотой 2 раза в секунду (2 Гц), а при нажатии на кнопку - частота мерцания будет увеличена примерно в 5 раз (10Гц). Думаю что такой пример более интересный чем просто нажать кнопку и засветить LED.
Для выполнения программы файл с ее кодом (скрипт) должен размещаться на файловой системе в Raspberry Pi.
Если малинка подключена к монитору и клавиатуре, то вы скорее всего работаете в графической среде Raspberry Pi OS (Raspbian). Для создания и редактирования файла-скрипта вам понадобится запустить программу "Терминал" (Terminal).
Также, если на малинке запущен SSH-сервер, к ней можно подключиться удаленно (по сети) используя любой из SSH-клиентов (Console, Konsole, Putty) на вашем рабочем ПК.
В нашей программе мы будем использовать модуль GPIO из пакета RPi (RPi.GPIO).
Для создания файла-программы под именем "led\_key\_test.py" в директории "/home/pi" и его последующего открытия для редактирования в редакторе (nano) нужно выполнить простую команду:
Откроется текстовый редактор, куда необходимо скопировать приведенный ниже листинг программы:
Важно: в программе на Python необходимо соблюдать все отступы - каждый по 4 пробела.
Например, после "else" строчка начинается с 3х отступов по 4 пробела (12 пробелов), а перед "while True:" - один отступ (4 пробела). Это необходимо для правильного структурирования и работы программы!
Чтобы сохранить файл и выйти из редактора "nano" нажимаем комбинацию клавиш "CTRL+X", а на вопрос о сохранении файла жмем клавишу "y" и подтверждаем при помощи "ENTER".
Теперь сделаем наш скрипт исполняемым и можем запустить нашу программу, выполним команды:
chmod +x /home/pi/led\_key\_test.py /home/pi/led\_key\_test.py
После запуска на экран будет выведено приветствие, а подключенный к малинке светодиод должен начать мигать с частотой примерно 2 раза в секунду.
Рис. 11\. Raspberry Pi GPIO тестовая программа для светодиода и кнопки, результат работы.
Небольшое видео, демонстрирующее работу программы (18 секунд):
Теперь вы можете поэкспериментировать с программой, например попробовать изменить значения переменных "timeout", задающих время ожидания и служащих для создания паузы при мигании светодиода.
Чтобы прекратить работу программы достаточно нажать комбинацию клавиш "CTRL+C" (Break, прерывание).
## Схема эксперимента со светодиодом и кнопкой
Теперь, когда мы знаем как безопасно использовать GPIO, можно собрать простую тестовую схему, в которой используется кнопка и светодиод.
Рис. 8\. Схема безопасного подключения кнопки и светодиода к Raspberry Pi GPIO.
Данную схему достаточно просто собрать как навесным монтажом, так и используя беспаечную макетную плату.
Рис. 9\. Схема подключения переключателя и светодиода к малинке используя макетницу.
Примечание: обе приведенные выше схемки рисовались в замечательной свободной программе под именем "Fritzing" для операционных систем Linux, Windows, Mac OS X.
Тем, кто использует Debian GNU Linux, Ubuntu, Linux Mint для установки программы достаточно выполнить команду установки из консоли:
sudo apt-get install fritzing
Проект принципиальной схемы и ее разводки на панели для Fritzing: (7,4 КБ).
Ниже показана такая схема в сборе. Светодиод взял какой был под рукой - желтый и большой, а кнопка от какого-то системного блока для ПК. В одной из статей я рассказывал какие полезности и детали можно извлечь из корпусов старых компьютеров.
Рис. 10\. Макет эксперимента со светодиодом, кнопкой и Raspberry Pi GPIO.
Для удобного удаленного программирования и управления к малинке подключен беспроводный Wi-Fi адаптер. О том как подключить raspberry Pi и настроить беспроводную сеть было подробно рассказано в предыдущей статье.
Сама малинка у меня запитана через понижающий стабилизатор напряжения (на микросхеме LM2596S), а в качестве основного источника питания используется аккумулятор на 6В и емкостью 6А\*Ч.
Можно все питать и от сетевого блока питания на +5В с током до 2А, но у меня уже был собран тестовый стенд с питанием от такого аккумулятора, вот я его и применил.
## Отзывы
Статья очень полезная и информативная! Я, как поклонница Raspberry Pi, всегда интересуюсь новыми способами использования GPIO на этой плате. Было очень интересно узнать о том, как управлять вводом и выводом данных с помощью GPIO на Raspberry Pi. Особенно порадовало то, что статья содержит примеры кода, которые я могу использовать для своих проектов. Теперь у меня есть возможность подключить различные устройства и датчики к моей малинке и контролировать их работу. Это действительно удобно и открывает много возможностей для творчества. Большое спасибо автору за такую полезную информацию! Я обязательно буду пробовать все предложенные в статье идеи и разрабатывать свои проекты на базе Raspberry Pi.
Статья очень полезна и интересна для любого владельца Raspberry Pi. Я сам недавно приобрел эту платформу и с удовольствием познакомился с возможностями управления GPIO. Оказывается, Raspberry Pi имеет множество портов, которые можно использовать для подключения различных устройств и датчиков. Благодаря этой статье я научился простым командам управлять светодиодами и реле, а также получил идеи для создания своих проектов. Теперь я смогу автоматизировать свою домашнюю систему и контролировать ее с помощью Raspberry Pi. Большое спасибо за информацию! Очень рекомендую всем ознакомиться с этой статьей.
Очень интересная статья! Я всегда была восхищена возможностями Raspberry Pi, особенно управлением GPIO. Это действительно удивительно, как можно использовать несколько контактов для управления различными устройствами и сенсорами. Я уже пробовала создать небольшой проект с использованием Raspberry Pi и GPIO, и мне очень понравилось. Например, я подключала светодиоды и кнопки, чтобы создать свое собственное устройство управления освещением в комнате. Это было очень увлекательно и позволило мне лучше понять, как работает электроника. Теперь я с нетерпением жду, чтобы попробовать другие интересные проекты с использованием GPIO на Raspberry Pi!
Очень понравилась статья! Я всегда интересовалась возможностями Raspberry Pi и, конечно же, GPIO — это одна из самых захватывающих функций этой платы. Было очень полезно узнать о том, как управлять входами и выходами GPIO с помощью Python. Использование примеров кода в статье помогло мне лучше понять, как это делается. Я уже начала задумываться о проектах, которые можно реализовать, используя GPIO. Например, я думаю, что могу создать автоматическую систему полива для моих комнатных растений. Интересно, правда? Я очень рада, что нашла эту статью, она определенно помогла расширить мои знания о Raspberry Pi и вдохновила меня на новые проекты. С нетерпением жду новых статей на вашем сайте!
Статья очень понравилась! Я недавно приобрела Raspberry Pi и была удивлена всеми возможностями управления GPIO, о которых ты написал. Теперь я могу подключать различные датчики и устройства к своей малинке и контролировать их работу. Благодаря примерам использования, которые ты привел, у меня появилось множество идей, как применить эти возможности в своих проектах. Возможность управлять светодиодом и двигателем — это действительно круто! Теперь я могу создавать интересные световые эффекты и движущиеся механизмы. Спасибо за статью, она дала мне много полезной информации и вдохновила на новые эксперименты с Raspberry Pi и GPIO.




