Что такое gpio bcm

Использование портов GPIO в Raspberry Pi. Часть 1

В этой статье рассказано о том, как устроены универсальные порты ввода-вывода (GPIO) и о том, как работать с ними на перле.

Одноплатный компьютер Raspberry Pi примечателен не только своими размером и ценой, но и наличием порта ввода-вывода общего назначения (General Purpose Input-Output, GPIO). Эдакая современная версия параллельного LPT-порта, которая вместе с компьютером занимает меньше места, чем плата PCI с контроллером LPT.

Базовая информация о портах

В базовом комплекте второй версии Raspberry Pi установлен один 26-контактный разьем (он обозначен на плате как P1), в котором доступно 17 портов ввода-вывода (тех самых GPIO). Остальные восемь контактов подключены к земле или к питанию +3,3 В и +5 В. Выводы, отданные под GPIO, могут быть программно переконфигурированы для работы в качестве последовательных портов, вывода с широтно-импульсной модуляцией и еще как-то (вот это все называется альтернативными режимами). Но по умолчанию после включения питания все контакты работают в режиме «один контакт — один бит». Каждый из них может быть либо входом, либо выходом (по умолчанию включен режим ввода).

Кроме упомянутого разъема P1 на плате есть отверстия для установки восьмиконтактного разъема P5, который дает возможность получить еще четыре порта GPIO. Итого в распоряжении программиста оказывается 21 бинарный порт.

Наличие GPIO позволяет относительно легко связывать компьютер с устройствами из реального мира и управлять ими программно. Разумеется, здесь потребуется знание не только программирования, но и хотя бы основ электроники (детям рекоменую книгу В. Т. Полякова «Посвящение в радиоэлектронику», взрослым — книгу П. Хоровица и У. Хилла «Искусство схемотехники»).

При работе с GPIO важно учитывать пару моментов:

Хорошее практическое описание опубликовано на странице elinux.org/RPi_Low-level_peripherals.

Для справки, вот так разведены порты GPIO на контакты разъемов P1 и P5 (контакты традиционно обозначаются в формате PX-NN, где X — номер раъема, а NN — двузначный номер контакта):

Каждый битовый порт способен работать в режиме ввода или вывода. Кроме того, в режиме ввода может быть дополнительно включен подтягивающий резистор, что поможет максимально упростить способ подключения выключателей — их достаточно подключить между соответствующим выводом GPIO и общим проводом (если включен резистор pull up) или между GPIO и источником питания +3,3 В (если выход сконфигурирован в режиме pull down).

За более детальными продробностями о внутреннем устройстве портов GPIO я отсылаю читателя к шестой главе «General Purpose I/O (GPIO)» мануала по процессору BCM2835.

Регистры для работы с GPIO

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

Процессор BCM2835 имеет 41 32-разрядный регистр, которые полностью определяют режим и состояние портов GPIO. В частности, для установки единичного значения на выводе, запрограммированном на работу как выход, необходимо записать единичный бит в соответствующий разряд одного из двух регистров установки битов GPIO Pin Output Set Registers (GPSETn). Чтобы установить выход в ноль, следует выставить единичный бит в регистрах сброса битов GPIO Pin Output Clear Registers (GPCLRn). Такая на первый взгляд странная схема позволяет независимо устанавливать и сбрасывать любой бит GPIO без необходимости чтения текущего состояния выводов.

Аналогично, когда разряды GPIO работают на чтение, то узнать уровень входного сигнала можно, прочитав значение одного из двух портов GPIO Pin Level Registers (GPLEVn), каждый бит которого отображает текущее состояние входного разряда.

Программирование портов ввода-вывода

Регистры, отвечающие за работу с GPIO, расположены по адресам 0x7E200000—0x7E2000B0, которые отображаются на физическую память с адресами, начинающимися с 0x20200000. В принципе, в этом месте уже можно было бы начать управлять портами, программируя чтение и запись нужных битов в эти регистры (на перле это вполне возможно, если воспользоваться мапингом переменных на области памяти, используя модуль Sys::Mmap).

Но более практично еще немного усложнить систему, чтобы программировать стало легче.

Модуль Device::BCM2835

Для управления портами ввода-вывода на перле удобно воспользоваться модулем Device::BCM2835. Он является Perl-оберткой над C-библиотекой того же автора bcm2835 и один в один повторяет все ее функции (поэтому документацию может оказаться полезнее почитать в оригинале).

Установка библиотеки bcm2835 не вызывает сложностей:

Равно как и модуль со CPAN:

Библиотека (и модуль на перле) определяет огромное число констант, позволяющих выбирать нужные выводы разьъемов P1 и P5 и устанавливать режимы их работы, и довольно большое число функций для доступа к отдельным битам GPIO.

Все дальнейшие действия необходимо выполнять от имени суперпользователя.

Перед началом работы следует вызвать функцию init() :

(При инициализации происходит вызов функций mmap и создание переменных, которые отображаются на нужные регистры процессора — ровно то, где прикладному программисту проще воспользоваться готовой библиотекой.)

Вызов теоретически может завершиться неудачой, хотя наиболее вероятная причина отказа — запуск скрипта не от рута:

Примечание ко всем примерам кода из документации. Модуль Device::BCM2835 разрешает экспортировать используемые константы, но при этом не хочет экспортировать имена функций (несмотря на то, что многие из них начинаются с префикса gpio_ ). Поэтому если подключить модуль с экспортом констант, то бесконечные повторы получится значительно, но все же не полностью, сократить и вместо:

Вывод

Чтение данных с портов ввода-вывода также прост, как и запись в них. Прежде всего, необходимо перевести соответствующие разряды GPIO в режим чтения (BCM2835_GPIO_FSEL_INPT):

По желанию и необходимости можно подключить один из подтягивающих резисторов:

В случае, если к выводу порта подключена кнопка, замыкающая вывод на землю, то будет полезен резистор, подключенный к источнику питания +3,3 В (BCM2835_GPIO_PUD_UP), что обеспечит на входе уровень логической единицы, когда кнопка не нажата. При нажатой кнопке на входе окажется логический нуль.

Функция возвращает либо нуль, либо единицу.

Примеры

Как видно из предыдущих разделов, работать с портами ввода-вывода в бинарном режиме очень просто. Для закрепления материала — два небольших примера, которые будет полезно выполнить, если вы соберетесь программировать порты GPIO.

Код из первого примера раз в секунду включает и выключает светодиод, подключенный (через резистор сопротивлением 300…1000 Ом) к выводу GPIO03 (контакт P1-05).

Второй пример включает тот же светодиод при нажатии на кнопку, подключенную ко входу GPIO15 (P1-10).

Источник

Описание распиновки GPIO на Raspberry Pi 3

RPi – компьютер, который получил столь высокую популярность во многом благодаря наличию встроенного интерфейса ввода/вывода. Используя его, можно создавать всевозможные гаджеты.

RPi – компьютер, который получил столь высокую популярность во многом благодаря наличию встроенного интерфейса ввода/вывода. Используя его, можно создавать всевозможные гаджеты: от простых метеостанций и портативных игровых приставок до систем умного дома. У Raspberry Pi 3, конечно, тоже имеется GPIO. И он мало чем отличается от тех, который присутствует в других моделях.

Чтобы работать с GPIO Raspberry Pi 3, необходимо знать его схему. Собственно, это является самым важным. Из текста ниже, в свою очередь, вы узнаете о том, какие пины за что отвечают. А, чтобы иметь лучшее представление об устройстве GPIO, рекомендуется скачать соответствующую схему, выполненную в графике.

Что такое GPIO и для чего он нужен?

Новичкам будет полезно узнать о том, что собой представляет GPIO. Это интерфейс, который предназначен для обеспечения связи между компонентами компьютера. В случае с «Малиной» он необходим для работы основной системы с дополнительными компонентами, которые называются модулями.

Пины в GPIO могут выполнять 3 функции:

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Интересно то, что за вход и выход в интерфейсе могут отвечать одни и те же контакты. По крайней мере это справедливо для RPi. То, как они себя должны вести, определяется программой.

Управление электроприборами через Raspberry Pi

Как устроено GPIO на RPi3?

Теперь можно перейти к вопросу, который касается того, какая распиновка GPIO имеется на Raspberry Pi 3. В первую очередь необходимо сказать, что общее количество пинов на соответствующей панели равняется 40. Каждый из них имеет свой номер.

Все они подразделяются на 3 группы. К первой относятся питающие (на англоязычных схемах маркируются как Power) – они подают электричество в 3,3 и 5 Вольт. При этом у разных контактов данного назначения различное напряжение. Это обязательно следует учитывать при подключении модулей.

Ко второй – заземляющие (могут именоваться RND или Ground). Они нужны, чтобы отводить электричество, тем самым обеспечивая безопасное использование.

К третьей – порты (имеют обозначение BCM). Именно они служат теми контактами, которые могут принимать и отправлять сигналы. Пользователь может подключать модули к любым из них. Самое главное – чтобы было удобно обеспечивать питание подсоединённых компонентов.

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

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Предположим, что плата расположена горизонтально таким образом, что GPIO на ней находится в левом верхнем углу. В таком случае номера портов будут располагаться так:

Из списка выше должно быть понятно, по какому принципу выполнена нумерация соответствующего интерфейса. Теперь можно перейти к тому, контакты под какими номерами имеют какое назначение.

Питающие на 3,3 Вольта – 1 и 17, а на 5 Вольт – 2 и 4 (они находятся рядом). Заземляющие внизу – 9, 25 и 39, заземляющие вверху – 6, 14, 20, 30 и 34. Все остальные контакты – это порты (BCM).

Особенности нумерации GPIO

Чтобы начать использование GPIO в Raspberry Pi 3, необходимо знать какие существуют особенности нумерации контактов у данного интерфейса. Важно понимать, что в процессоре «Малины» не записаны номера пинов, которые не работают на вход/выход, то есть не являются портами.

Поэтому при управлении GPIO на Raspberry Pi 3 необходимо знать нумерацию BCM. Она в значительной степени отличается от той, которая рассмотрена в разделе выше. Так, 3 контакт (он является портом) имеет номер BCM2. Именно такой следует указывать при написании кода.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Понятно, что из-за этого может возникнуть путаница. Ввиду этого на Raspberry Pi 3 рекомендуется использовать Wiring Pi. Это специальная библиотека, которая имеет собственную нумерацию. Так, например, 3 порт (который является BCM 2) определяется как WiringPi 8. Возможно, это покажется еще более нелогичным. Но после ознакомления с соответствующей схемой все встанет на свои места.

Что нужно знать о GPIO RPI3?

Модули возможно подключать к абсолютно любым портам GPIO «Малины», и они будут нормально работать. Но важно знать, что в системе есть пара контактов, которые зарезервированы системой для особых целей. Ими являются BCM 0 и BCM 1 (их номера на обычной схеме – 27 и 28). Они предназначаются специально для установки плат расширения. Поэтому при возможности их не нужно использовать для подключения других модулей.

Еще один важный момент – осторожное использование питания через GPIO Raspberry Pi 3. Ток на внешние устройства через «Малину» может подаваться с силой до 50 мА. Это достаточно много для столь небольшого девайса. Поэтому подавать ток под такой силой нужно только по крайней необходимости. В противном случае можно не только испортить модуль, но и процессор самой RPi.

Как можно взаимодействовать с GPIO?

Работать с GPIO «Малины» можно посредством языков программирования. Вариантов здесь существует много. Самый лучший для GPIO Raspberry Pi 3 – Python. Это связано с тем, что для этого одноплатника данный ЯП является «родным». Но с не меньшим успехом с интерфейсом возможно взаимодействовать и посредством C/C++ и даже PHP или Basic. Язык каждый выбирает под себя.

Как возможно убедиться, распиновка GPIO на RPi3 не является какой-то сложной. Единственное – по неопытности в ней можно немного запутаться. Чтобы этого не происходило, рекомендуется загрузить на компьютер схему расположения контактов. При этом лучше не одну, а несколько (обычную, BCM и WiringPi). Так будет удобно и подключать модули, и взаимодействовать с ними через программные инструменты.

Источник

Изучаем GPIO в Raspberry Pi, эксперимент со светодиодом и кнопкой

Познакомимся с портами общего назначения GPIO (General-purpose input/output) в Raspberry Pi, разберем простой пример с подключением светодиода и кнопки (переключателя) к портам GPIO, а также напишем простую программу на Python, которая будет управлять свечением (миганием) светодиода при помощи кнопки. Простые эксперименты с Raspberry Pi GPIO для начинающих.

Что такое GPIO

Первым делом давайте разберемся что такое GPIO и для чего оно нужно.

Внешний вид разъемов GPIO для разных моделей малинки изображен ниже.

GPIO в Raspberry Pi для моделей A и B

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 1. Raspberry Pi model B GPIO разъем и нумерация пинов.

В версиях A и B разъем содержит 26 пинов (P1 header), 8 из которых являются общими портами ввода-вывода GPIO, а также пины для подключения интерфейсов I²C, SPI, UART и линии питания +5В, +3,3В, GND.

GPIO в Raspberry Pi для моделей A+, B+ и B2

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 2. Интерфейс GPIO в Raspberry Pi 2 и нумерация пинов.

Распиновка разъемов GPIO

Для использования разъема GPIO необходимо знать точное назначение каждого из его пинов (контактов). Ниже приведены распиновки разъемов GPIO для разных моделей и разных версий платформы Raspberry Pi.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Важно заметить что у ревизий печатной платы «1.0» (сентябрь 2012 или раньше) и «2.0» расположение пинов немножко отличается:

Это нужно учесть при проектировании и переделке устройств на платформах с разной ревизией печатных плат.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 4. Распиновка разъема GPIO в Raspberry Pi A+, B+, 2.

Использование пинов GPIO и меры безопасности

Прежде чем что-то подключать к пинам интерфейса GPIO очень важно разобраться какие напряжения можно подавать на установленные как «вход» (Input) пины и какие токи допустимы через пины, настроенные как «выход» (Output).

Пин GPIO в режиме «вход«:

Пин GPIO в режиме «выход«:

Также важно помнить что:

Рекомендации по использованию пинов GPIO

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

Давайте посмотрим что получится если мы подключим к трем портам GPIO и общему для них выводу 3.3В три светодиода, через каждый из которых будет протекать ток 20мА (сверхъяркие светодиоды):

Ток 60мА уже является превышением рекомендуемого разработчиками максимально допустимого значения на пине +3.3В, а также небольшой перегрузкой для каждого из пинов GPIO (по 20мА на пин вместо 18мА).

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

Если к каждому из нескольких пинов GPIO мы подключим по светодиоду, то можно их общую точку подключить к земле (к GND). В таком случае светодиод будет светиться если на пине будет присутствовать высокий уровень (+3.3В).

Для ограничения протекаемого через светодиод тока до 10-15мА необходимо будет его подключить через токоограничительный резистор.

Хочу заметить что для отлично видимого свечения сверхъяркого светодиода достаточно всего лишь несколько миллиампер тока.

Уменьшив ток через светодиоды уменьшится и яркость их свечения. Таким образом, стараясь уложиться в рекомендуемый общий для всех вместе взятых пинов GPIO ток 50мА, удастся подключить напрямую к GPIO больше светодиодов.

Пины с напряжением 5В подключены к основной шине питания +5В платы (после стабилизатора напряжения). Чрезмерная «пользовательская» нагрузка на этой линии может повлиять на стабильность работы платформы в целом, а также вывести из строя внутренний стабилизатор напряжения +5В.

Необходимо с осторожностью отнестись к использованию линии питания +5В, допустимый ток не должен превышать 1А (без учета потребления самой платы, примерно 700мА). Получается что для питания разных модулей и периферии доступна нагрузочная способность примерно в 300мА.

Если какой-то модуль потребляет много тока, то лучше запитать его от отдельного источника со стабилизированным напряжением +5В.

В действительности потребляемый малинкой ток во многом зависит от загруженности микропроцессора и видеопроцессора (графическая оболочка требует намного больше ресурсов чем консольный режим).

Опасность статического электричества

На плате Raspberry Pi хоть и нет такого предупреждения, но она как и любая другая чувствительная электроника, может быть повреждена статическим электричеством.

Ткани тела человека являются достаточно неплохим проводником электричества (в клетках тканей есть вода, соли), поэтому накопленный в теле статический заряд может быть перенесен на другой предмет (металл, электронное устройство), например, через пальцы рук.

Накопление статического заряда в человеческом теле может происходить по разным причинам: ношение одежды (особенно шерстяной), трение одежды о сиденье в автомобиле (материалы тканей и покрытия сделаны из диэлектриков) и т.д.

Перед тем как приступать к работе с чувствительной электроникой (микросхемы, микроконтроллеры, КМОП-компоненты и т.д.) нужно убрать такой паразитный и не несущий пользы заряд. Для этого достаточно коснуться руками какого-то массивного металлического предмета.

Также в продаже есть специальные антистатические браслеты. Для удобства работы они, как правило, надеваются на запястье одной из рук. Такой браслет содержит металлическую пластинку для контакта с телом, а отвод накопившегося в теле паразитного заряда выполняется через подключенный к ней проводник, соединенный с помощью зажима «крокодильчика» с заземлением.

Перед использованием убедитесь что в браслете действительно присутствует такой резистор! Для этого достаточно измерить значение сопротивления между контактами пластины и заземления с помощью мультиметра или мегаом-метра.

Пайка контактов

Подведу небольшой итог по мерам безопасности:

Уровни на пинах GPIO по умолчанию

Казалось бы, зачем я вынес этот вопрос в отдельный подзаголовок, здесь и так все понятно. Но на самом деле не все так просто, отнеситесь с внимательностью к представленной ниже информации, ее нужно учитывать при проектировании ваших будущих устройств.

После того как Raspberry Pi включена и операционная система Linux загружена, на выводах GPIO установлен низкий уровень (0В), и так будет до тех пор, пока какая-то программа или скрипт не изменит состояние портов GPIO.

Эта информация взята из документации, также она подтверждается «прощупыванием» состояний пинов при помощи тестера (вольтметра).

После включения малинки и загрузки операционной системы все пины GPIO выставлены в «0» и сконфигурированы в режиме входа (Input). После этого мы программным способом выставляем и переключаем состояния нужных пинов в такие, которые нужжын для нашего проекта.

И все бы здесь хорошо если бы не небольшое но. Суть его заключается в том, что начиная с момента подачи питания на платформу и до момента инициализации драйверов в ОС (в процессе загрузки), на произвольных пинах могут кратковременно присутствовать высокие уровни (напряжение +3.3В).

При проектировании подключаемых к GPIO электронных схем и блоков, этот момент желательно предусматривать!

Также одним из решений может стать резервирование одного пина GPIO для управления схемой подачи питания (электронный силовой ключ) на подключаемую к малинке электронику и исполнительные устройства.

В таком случае, питание на электронику поступит только после того, как загрузится OC Linux и скрипт вашей программы в нужный момент готовности подаст высокий уровень на пин, отвечающий за подачу питания на остальную схему.

Более детальную информации о том как работает GPIO на платформе Raspberry Pi можно узнать из документации к процессорам Broadcom (смотри ссылки в конце статьи).

На многих ресурсах в сети можно встретить статьи и обучающие материалы для начинающих по малинке и GPIO, в которых подключают светодиоды и кнопки разными способами.

Иногда встречаются схемы включения, которые даже оказавшись работоспособными могут нести опасность для платформы Raspberry Pi. Дальше я покажу несколько примеров и кратко расскажу почему так.

В примерах, которые будут показаны ниже, используется пин «GPIO4», в реальном проекте вместо него может использоваться любой другой из доступных.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 5. Правильное и неправильное подключение светодиода к Raspberry Pi.

Как видно из рисунка, в правильном подключении светодиода присутствует токоограничительный (гасящий) резистор, который ограничивает ток через него и используемый им порт, соответствующий пину GPIO4.

При прямом подключении без резистора, на светодиод поступит напряжение +3.3В, что есть больше нормы для светодиодов (2-3В). Прямое напряжение такой величины станет причиной резкого возрастания тока в цепи и может с легкостью достигать 50-100мА и даже больше!

Такая ситуация может повлечь за собой выгорание светодиода и выхода из строя как отдельного буфера GPIO, так и микропроцессора в целом.

Кнопку (с фиксацией или без) или переключатель я рекомендую подключать к GPIO с использованием опорного напряжения и двух токограничительных резисторов.

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

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 6. Правильное и неправильное (опасное) подключение кнопки или переключателя к Raspberry Pi.

Дело в том, что после подачи питания на Raspberry Pi и ее процессор, в процессе загрузки ОС, кратковременные состояния напряжений на пинах GPIO могут быть хаотичными: высокий (+3.3V) или низкий уровень (0V). Об этом уже упоминалось выше в статье.

При прямом подключении кнопки к GPIO и GND (как на перечеркнутом рисунке) есть вероятность подпалить используемый выход порта (внутренние микроскопические транзисторы, которые управляют уровнем напряжения на пине).

После подачи питания на процессор (инициализация малинки) или при неверной программной установке режимов порта (сконфигурирован как OUTPUT) на используемый пин может пойти напряжение +3.3V.

В свою очередь, при замыкании кнопки или с замкнутыми контактами переключателя, это вызовет короткое замыкание пина порта на землю GND.

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

В схеме с резисторами мы получаем следующую ситуацию:

Плюсы такого включения:

В зарубежных книгах и на зарубежных сайтах я не раз встречал примеры подключения кнопок к малинке как на перечеркнутом рисунке #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. В данной реализации программная активация подтягивающих резисторов уже не понадобится.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 7. Схема подключения кнопки к пину GPIO3 в Raspberry Pi.

Расчет гасящего резистора для светодиода

Для более точного расчета сопротивления гасящего резистора (при питании от линии 3.3В) используем формулу:

Приведу здесь типовые значения напряжения для светодиодов разного цвета:

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

В нашем случае, для экспериментов, ток величиной 8-15мА будет достаточен и безопасен.

К примеру возьмем отечественный светодиод АЛ307 красного цвета и рассчитаем для него гасящий резистор при токе 10мА:

При сопротивлении гасящего резистора 130 Ом и питании напряжением 3.3В светодиод будет светить достаточно ярко. Можете поэкспериментировать с сопротивлением резистора, скорее всего даже при значении 300 Ом яркости свечения будет вполне достаточно для экспериментов с GPIO в Raspberry Pi и нам не придется волноваться о перегрузке порта.

Схема эксперимента со светодиодом и кнопкой

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

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 8. Схема безопасного подключения кнопки и светодиода к Raspberry Pi GPIO.

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

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 9. Схема подключения переключателя и светодиода к малинке используя макетницу.

Примечание: обе приведенные выше схемки рисовались в замечательной свободной программе под именем «Fritzing» для операционных систем Linux, Windows, Mac OS X.

Скачать программу можно на сайте fritzing.org.

Тем, кто использует Debian GNU Linux, Ubuntu, Linux Mint для установки программы достаточно выполнить команду установки из консоли:

Проект принципиальной схемы и ее разводки на панели для Fritzing: Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm (7,4 КБ).

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 10. Макет эксперимента со светодиодом, кнопкой и Raspberry Pi GPIO.

Для удобного удаленного программирования и управления к малинке подключен беспроводный Wi-Fi адаптер. О том как подключить raspberry Pi и настроить беспроводную сеть было подробно рассказано в предыдущей статье.

Сама малинка у меня запитана через понижающий стабилизатор напряжения (на микросхеме LM2596S), а в качестве основного источника питания используется аккумулятор на 6В и емкостью 6А*Ч.

Можно все запитать и от сетевого блока питания на +5В с током до 2А, но у меня уже был собран тестовый стенд с питанием от такого аккумулятора, вот я его и применил.

Модуль RPi.GPIO

Для написания программы мы будем использовать модуль «RPi.GPIO«, который содержит достаточно много разных возможностей по управлению GPIO в Raspberry Pi.

В операционной системе Raspberry Pi OS (Raspbian) этот модуль установлен по умолчанию. Думаю чтьо не помешает его обновить до последней доступной и актуальной версии, для этого выполним следующие команды в консоли малинки:

Программа для эксперимента со светодиодом и кнопкой

Если все собрано и внимательно проверено, то можем переходить к написанию программы. Программа будет написана на языке Питон (Python).

Для выполнения программы файл с ее кодом (скрипт) должен размещаться на файловой системе в Raspberry Pi.

Если малинка подключена к монитору и клавиатуре, то вы скорее всего работаете в графической среде Raspberry Pi OS (Raspbian). Для создания и редакторивания файла-скрипта вам понадобится запустить программу «Терминал» (Terminal).

Также, если на малинке запущен SSH-сервер, к ней можно подключиться удаленно (по сети) используя любой из SSH-клиентов (Console, Konsole, Putty) на вашем рабочем ПК.

В нашей программе мы будем использовать модуль GPIO из пакета RPi (RPi.GPIO).

Для создания файла-программы под именем «led_key_test.py» в директории «/home/pi» и его последующего открытия для редактирования в редакторе (nano) нужно выполнить простую команду:

Откроется тектовый редактор, куда необходимо скопировать приведенный ниже листинг программы:

Чтобы сохранить файл и выйти из редактора «nano» нажимаем комбинацию клавиш «CTRL+X», а на вопрос о сохранении файла жмем клавишу «y» и подтверждаем при помощи «ENTER».

Теперь сделаем наш скрипт исполняемым и можем запустить нашу программу, выполним команды:

После запуска на экран будет выведено приветствие, а подключенный к малинке светодиод должне начать мигать с частотой примерно 2 раза в секунду.

Что такое gpio bcm. Смотреть фото Что такое gpio bcm. Смотреть картинку Что такое gpio bcm. Картинка про Что такое gpio bcm. Фото Что такое gpio bcm

Рис. 11. Raspberry Pi GPIO тестовая программа для светодиода и кнопки, результат работы.

Небольшое видео, демонстрирующее работу программы (18 секунд):

Теперь вы можете поэкспериментировать с программой, например попробовать изменить значения переменных «timeout», задающих врежа ожидания и служащих для создания паузы при мигании светодиода.

Чтобы прекратить работу программы достаточно нажать комбинацию клавиш «CTRL+C» (Break, прерывание).

Мониторинг состояния всех выводов GPIO

Для удобного мониторинга установленных режимов работы и уровней на всех выводах GPIO можно выполнить в консоли вот такую команду:

В результате выполнения команды в консоль терминала будет выведена подробная и наглядная табличка, например:

Чтобы каждый раз не запускать команду в ожидании наблюдаемых изменений, можно применить утилиту «watch», которая будет обновлять вывод команды «gpio readall» в консоли с интервалом в 1 секунду (параметр «-n 1»):

Как управлять пинами GPIO на любом языке программирования

Интерфейс GPIO, как и другие устройства в Линукс, представлен в псевдо-файловой системы SysFS, состоящей из директорий и файлов-устройств.

К этим файлам можно обращаться за чтением, а также в них можно выполнять запись необходимых значений, тем самым изменяя конфигурацию и состояние портов с соответствующими им пинами GPIO.

Давайте проведем краткий эксперимент: засветим и погасим светодиод, который подключен через гасящий резистор к пину под номером 15 (GPIO 22).

Для упрощения запуска следующих команд понадобятся права суперпользователя, поэтому перейдем в режим «root», выполнив команду:

Делается это при помощи команды:

При помощи следующей команды смотрим создался ли файл для нашего GPIO22:

Увидим примерно вот такой список:

На выходе команды получим:

А теперь установим при помощи следующей команды направление (direction) пина GPIO22 на вывод (OUTPUT) и сразу же посмотрим второй командой все ли установилось как нужно:

В результате на экране должно появиться слово «out», что свидетельствует о том что все установлено верно. Теперь осталось лишь подать высокий уровень на наш пин чтобы засветить светодиод.

Сделаем это выводом числа 1 в файл /sys/class/gpio/gpio22/value, используем вот такую команду:

Светодиод должен зажечься.

Прочитать состояние пина можно при помощи команды:

Ну и напоследок, после всей проделанной полезной работы выполним освобождение пина GPIO22, заставим драйвер разрегистрировать его:

Вот таким образом можно общаться с GPIO при помощи обычных запросов к виртуальным текстовым файлам, можно писать скрипты на любых языках (C, Java, Sh, Bash. ) и под любые задачи.

Чтобы выйти из режима «root» и вернуться к строке обычного пользователя запустим команду:

Важно помнить что после резервирования пина (export) и выполнения работ связанных с ним, его нужно разрезервировать (unexport), иначе он останется занят и другие программы и скрипты не смогут получить к нему доступ!

Управление светодиодами активности и питания на плате малинки

Небольшое продолжение темы о светодиодах и Raspberry Pi. 🙂

Индикаторами активности и питания (зеленый и красный светодиоды на плате), расположенными на плате Raspberry Pi, также можно управлять.

Например, можно использовать красный светодиод индикации питания для индикации какой-то аварийной ситуации (заставив его быстро мигать) и т.п.

Делается это через изменение связанных со светодиодом (как системным устройством) файлов в дереве виртуальной файловой системы SysFS, о которой было сказано в предыдущем разделе.

Вот пути к директориям со специальными файлами и папками, которые «своим содержимым конфигурируют и управляют» этими светодиодами:

В каждой из этих папок есть по два специальных файла:

Например, чтобы полностью взять под свой контроль и погасить светодиод LED1 (индикатор питания) нам нужно:

Давайте посмотрим на текущее содержимое файла «trigger» для каждого из устройств-индикаторов:

В консоль будет выведено примерно следующее:

Это список событий и активностей, к которым можно привязать индикатор. В каждом из случаев, текущая привязка взята в квадратные скобки:

Вот описания еще нескольких интересных событий, к которым можно автоматически привязать данные светодиоды:

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

Давайте заставим светодиод питания (LED1) мигать каждую секунду, привяжем его к событию «timer»:

А теперь ассоциируем LED1 с событием «none», чтобы его свечением можно было уверенно управлять через файл «brightness»:

Чтобы засветить светодиод и потом погасить его, достаточно воспользоваться следующими командами:

Расскажу кратко что это за конструкции из команд и как они работают.

Теперь о связке инструкций в кавычках. Команда «echo 255» выводит на экран (стандартное устройство вывода) число 255. Символ «>» служит для записи полученного ранее из стандартного вывода потока в указанный далее файл, в данном случае это «/sys/class/leds/led1/brightness».

Попробуйте выполнить следующие команды под обычным пользователем:

Вы получите сообщение о запрете доступа:

Все эти команды можно выполнять прямо из-под ‘root’ и без ‘sudo’, как и в предыдущем разделе. Но я не рекомендую применять такую практику постоянно, поскольку из-за невнимательности или ошибки в коде можно повредить важные данные и системные файлы.

А вот как можно заставить светодиод питания быстро мигать, используя скрипт, написанный на Python.

Создадим файл скрипта:

Поместим в него код:

Запускать нужно с правами суперпользователя, например вот так:

Чтобы прервать работу скрипта, нажмите комбинацию клавиш CTRL+C.

Запуская от имени суперпользователя (root) сценарии, написанные на языке Python будьте предельно внимательны и осторожны. Все запускаемые в скрипте операции получат в системе неограниченные права и полный доступ!

Модуль RPIO

Также, данный модуль содержит две полезные и удобные консольные утилиты:

Заключение

Надеюсь было не скучно и информация, которую я привел в данной статье, будет полезна для ваших будущих проектов и экспериментов с платформой Raspberry Pi.

Количество вариантов ограничивается только вашей фантазией и желанием.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *