Меню
Блог Гридина Семёна

Робототехника и автоматизация — это наука о будущем

Рубрики блога

Первое знакомство с GPIO в Raspberry PI

Первое знакомство с GPIO в Raspberry PI

Самое интересное в разработке на Одноплатных компьютерах — это общение с внешним миром. Вот что позволяет «Малина» — это подключение датчиков, концевиков, двигателей, лампочек, различных исполнительных органов. В Raspberry Pi GPIO является самой привлекательной частью. Я считаю, что для роботов это просто идеальные «мозги».

Из этой статьи вы узнаете:

Знакомство с GPIO
Особенности работы с GPIO
Схема подключения светодиода и кнопки
Программируем GPIO

Приветствую вас, друзья!! Сегодняшняя тема статьи будет посвящена физическим входам и выходам на одноплатном компьютере Raspberry. Именно этим «Малина» и заслужила такую недетскую популярность. Очень много различных модулей сделано для Raspberry, и разрабатываются всё новые и новые.

Что можно подключить? Да все те же датчики и дополнительные платы, что и на Arduino. На борту есть два интерфейса, таких как SPI и I2C, по которым можно управлять электроникой. Можно сравнить с протоколом Modbus в системе ПЛК — модули ввода/вывода.

Недавно я научился управлять входами и выходами с помощью скриптов на Python. Показать как?

Хорошо...

Знакомство с GPIO

Про старые модели, я так думаю, нет смысла писать. Начнём сразу с 3-ей модели. Давайте разбираться, что такое вообще GPIO.

Аббревиатура GPIO с английского расшифровывается как: General-purpose Input/Output — это интерфейс. который содержит Входы и Выходы общего назначения, к которым можно подключать разнообразные исполнительные устройства, датчики, дисплеи, контроллеры, разные модули и разную периферию.

Интерфейс GPIO выглядит как разъём со штырьками. в третьей «Малине» будет выглядеть следующим образом:

Где какой пин? А вот где они:

На картинке нарисована модель Raspberry Pi 2 model B, не пугайтесь, распиновка одна и та же.

Обратите внимание, что все пины могут быть как ВХОДАМИ, так и ВЫХОДАМИ. Присвоение функции пина происходит программно.

Распиновка Raspberry pi 3:

Некоторые из них являются многофункциональными, кроме входов/выходов могут выполнять функцию ШИМа, интерфейса SPI , I2C или UART.

Особенности работы с GPIO

Перед сборкой и подключением внешних цепей к Raspberry, вы должны знать о таких нюансах:

  • Максимальный суммарный ток обоих выводов 3,3 В равен 50 мА, напрямую можно подключать устройства только с током потребления меньше 50 мА.
  • Максимальный суммарный ток обоих выводов 5 В равен 300 мА, напрямую можно подключать устройства только с током потребления меньше 300 мА.
  • На GPIO ни в коем случае нельзя подавать напряжение выше 3,3 В. В противном случае можно спалить вход, а можно и весь процессор целиком.
  • Выводы 14 и 15 по умолчанию выполняют альтернативную функцию и являются выводами UART (RXD и TXD), поэтому при включении на них присутствует высокий уровень 3,3 В.
  • Все настраиваемые выводы GPIO — кроме GPIO0 (SDA) и GPIO1 (SCL) — по умолчанию являются входами и поэтому имеют высокое сопротивление, при этом подтяжка высокого уровня не подключена, поэтому они начинают плавать.

Вы должны понимать, что GPIO подключены напрямую к процессору, и неграмотное подключение может повредить сам процессор. Будьте внимательны!!!

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

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

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

И поэтому неплохим решением, будет изолировать входы и выходы по питанию, при загрузке операционной системы.

Схема подключения светодиода и кнопки

При подключении светодиода не забудьте подключить гасящий резистор (200-300 Ом). Это обеспечит малое потребления тока, как раз меньше 50 мА. Таким образом вы спасёте сам процессор и буфер GPIO.

При подключении кнопки, тоже есть свои нюансы. Очень рекомендуется ставить токоограничивающие резисторы. Кто-то спросит, а почему нельзя поставить просто кнопку, и всё? Я тоже задавался таким вопросом. Оказывается всё просто.

Не забывайте, что при загрузке ОС или неверно установленном режиме GPIO на используемый пин может пойти 3,3 В. Таким образом при замыкании на землю, мы обеспечим короткое замыкание, и таким образом спалим пин, или процессор.

Такая схема с ограничительными резисторами — это гарантия сохранения работоспособности «Малины» в различных ситуациях.

Что даёт такая схема подключения кнопки:

  • Пока кнопка SW1 не нажата то через резисторы R1 и R2 на входе порта установлен высокий уровень 3,3В;
  • При замыкании кнопки SW1 через резистор R1 и кнопку пойдет ток, равный I=U/R=3,3В/10000Ом=0,33мА, а через ограничивающий резистор R2 и кнопку на входе порта будет установлен низкий уровень — 0В;
  • Если пин порта выставлен неверно, на выход 3,3В — через цепочку R1, R2 не будет идти никакой ток (3,3В=3,3В), а при нажатии кнопки через R2 и SW1 потечет ток равный R=3,3В/750Ом=4,4мА, что является безопасным значением и никак не повредит схему и порт GPIO.

Схема подключения светодиода и кнопки:

R1 — 10 кОм, R2 — 1 кОм, R3 — 220 кОм.

Не жалейте резисторов для данной схемы, лучше всего подвесить на каждый пин по 1 кОм. И настроить схему для уверенной работы. Не экспериментируйте друзья, согласитесь, спалить 3000 р. просто так будет жалко.

Программируем GPIO

Работать с GPIO можно двумя способами:

  1. Используя оболочку bash и файловую систему.
  2. Используя языки программирования.

Управление GPIO из оболочки bash

ОС Raspbian является дистрибутивом Linux, а концепция Linux представляет собой работу с текстовыми файлами, и конфигурирование этих файлов. Пользуемся оболочкой bash в любимом терминале.

Вывод логической единицы на 25 пин:

Выполняем чтение входа 24, используем команду cat:

Управление GPIO из языка Python

Вот здесь для меня начинается самое интересное! Надеюсь, не только для меня, но и для вас.

Для того, чтобы эта система работала на языке Python, требуется специальная библиотека RPi.GPIO. В новых дистрибутивах Raspbian она уже установлена. Если же нет, то ставим:

Чтобы использовать все опции пинов в Python'e, для этого нам нужно использовать модули:

Затем выбираем способ нумерации портов. GPIO.BOARD — использует нумерацию портов на плате. Преимущество будет в том, что эта система будет работать всегда, в независимости от номера ревизии платы. Вторая система нумерации GPIO.BCM — это более низкий уровень и обращается напрямую к номерам каналов на процессоре. По аналогии на ПЛК, как конфигурирование или обращение напрямую к адресам. Программисты CoDeSyS меня поймут.

Выбираем:

Дальше выбираем режим работы пинов (вход или выход):

Если входной канал ни к чему не подключен, он может «Плыть». Следующие команды осуществляют подтяжку вывода к 3,3 В или к земле. Тогда прописываем:

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

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

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

Ну что, есть. Давайте попробуем написать программу, со скрипта включим или выключим светодиод.

Если вы хотите помигать светодиодом:

Включаем светодиод с кнопки:

Управляем с клавиатуры:

Все это мы пишем в ОС в программе Python IDLE. Сохраняем все в корневую папку /home/pi.

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

Для основного понимания работы скриптов в Raspberry PI я думаю достаточно. Если будут вопросы, пишите в комментариях или письма. До встречи в следующих статьях. Пока-пока!!

С уважением, Гридин Семён

Интересен блог? Подпишись и получай новости на почту

Подписка на новости блога

Вам так же может быть интересно

Комментариев к статье: 6
  • Статья хорошая, нужная и своевременная. Жаль только, что для полного понимания моего любительского уровня явно недостаточно. Распечатку статьи я вынужден был покрыть массой вопросительных знаков, буду потихоньку выяснять подробности. Это упрёк себе, а не вам. Мало энаком с терминологией , местами с жаргоном и т.д.

    На мою краткую заметку по предыдущей статье я ответа не увидел, может у вас попала в Спам. Хотя я не настаиваю на ответе, поскольку уже ушли те времена, когда

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

    • Напишите ещё раз письмо, возможно попало в спам. А в чём затруднения у вас?

  • Привет, Семен! Помогите разобраться, плз!

    Если я ввожу в IDLE Питон import3.4.2 «Import», то выдает ошибку. На «import» реагирует адекватно. Питон 2.7.9 поступает аналогично((.

    В Вашей статье используется и так и этак. В чем дело?

    Спасибо!

    • Привет, Владимир, это возможно опечатка. import — это резервируемое ключевое слово, пишется с маленькой буквы. :???:

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

    Семён, не в курсе, есть может какой нибудь шилд, который уровни малины приводит к привычным 5 вольтам, и по току сразу ограничивает?

    • Привет, я так думаю, должны быть. Вообще удобная цепочка такая: все датчики и исполнительные органы берёт на себя Ардуина — потом все данные передаёшь уже на малину, и в малине обрабатываешь данные и выполнение программы. Я замечал в нескольких проектах, что делают так. Какая там скорость обработки информации сказать точно не могу. Пока не выяснял.

Оставить комментарий

  • ;-)
  • :smile:
  • :sad:
  • :roll:
  • :razz:
  • :oops:
  • :o
  • :lol:
  • :idea:
  • :grin:
  • :cry:
  • :cool:
  • :???: