Работа через GPIO в Raspberry Pi 3

Оглавление статьи: Работа через GPIO в Raspberry Pi 3
Содержание

Одна из основных функций одноплатных компьютеров семейства Raspberry Pi — обеспечивать взаимодействие с разнообразной периферией. Это могут быть датчики, реле и двигатели, лампочки и прочие исполнительные модули и блоки. За такое «общение» отвечает встроенный в платы Raspberry Pi GPIO — интерфейс ввода-вывода. Рассмотрим его подробнее на примере RPi 3 B.

Что такое колодка GPIO

GPIO — сокращение, означающая General-Purpose Input-Output, или общий интерфейс ввода/вывода. Он содержит цифровые входы и выходы для подключения датчиков, разнообразных контроллеров, дисплеев, реле и прочей электронной периферии. Внешне GPIO похож на «гребенку» из штырьков-пинов. В Raspberry Pi 3 его внешний вид таков (в верхней части платы):

плата Raspberry Pi GPIO

Колодка GPIO Raspberry чем-то напоминает интерфейс подключения жестких дисков IDE.

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

распиновка

Разъемов питания 4. Прочие пины способны выступать в роли входа или выхода. Кроме того, некоторые из них многофункциональны и могут работать как интерфейс UART, I2C, SPI или ШИМ.

Рассмотрим более подробно устройство «гребенки».

Устройство GPIO

Число пинов на колодке GPIO Raspberry Pi 3 равняется 40. Они пронумерованы и делятся на три группы:

  • питающие (power на схемах);
  • заземляющие (GND, Ground);
  • порты (часто обозначаются как BCM).

Первые необходимы для подачи электричества разных напряжений — 3.3 и 5 В. Разница между ними была рассмотрена выше. Вторые обеспечивают безопасность работы платы, отводя электричество. А третьи выступают в качестве интерфейсов, принимая и отдавая данные. Именно к ним пользователь подключает свои модули и приборы.

Схема пинов Raspberry Pi 3 Model B:

Схема пинов Raspberry Pi 3 Model B

На данной схеме pinout выводы пронумерованы по следующему принципу:

  • 1 — левый в первом верхнем ряду;
  • 2 — второй в верхнем ряду, и так далее.

Выходы 1 и 17 обеспечивают питание 3.3 В, 2 и 4 — для 5 В. «Земля» расположена на 9, 25 и 39, и на 6, 14, 20, 30, 34. Прочие контакты — интерфейсные порты.

Особенности GPIO «малинки»

При работе необходимо учитывать несколько важных моментов:

  • на обоих выводах 3.3 В суммарный ток равен 50 мА. Поэтому напрямую к ним можно подключать устройства с общим потреблением до 50 миллиампер;
  • 5-вольтовые выводы поддерживают в сумме до 500 мА, что позволяет подсоединять к ним более мощную периферию, включая устройства ввода (мышки, клавиатуры и так далее);
  • GPIO допускает подачу напряжения только до 3.3 В. Если превысить это значение, велик шанс сжечь вход или весь контроллер;сгорел контроллер
  • 14-15 пины по умолчанию работают как RXD и TXD UART-интерфейса и сразу после включения выдают напряжение в 3.3 В;
  • также по умолчанию почти все конфигурируемые выводы «малинки» являются входами с высоким сопротивлением. Исключение — GPIO0 и GPIO1 (SDA и SCL соответственно);
  • работая в режиме INPUT, пин автоматически переводит подаваемую на него информацию в цифровой вид. При этом отметим, что RPi3 исходно работает только с цифровым сигналом, а для обработки аналоговых используется специальный преобразователь ЦАП/АЦП.

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

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

защитные развязки электронными ключами

Как правило, RPi3 работает под управлением ОС семейства Linux (Raspbian или другой). Сразу после загрузки системы напряжение на пинах низкое и остается таковым до изменения запустившимся скриптом или программой. Но в промежуток от подачи электропитания до инициализации системных драйверов пины в произвольном порядке способны выдавать высокое напряжение. Это следует учитывать и изолировать по питанию входы-выходы в процессе запуска системы.

Особые порты

Внешние модули можно подсоединять к любым портам «гребенки» GPIO. Но есть два особенных, которые плата резервирует для специфических задач. На обычной схеме их номера — 27 и 28. Они предназначены для плат расширения, и желательно не использовать их без необходимости.

Нумерация

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

  • не исполняющие функций ввода-вывода «штырьки» номеров не имеют;
  • контакт 3 является портом, но имеет логический номер BCM2.

Этот принцип следует учитывать при создании кода, поскольку ПО ориентируется именно на логические номера. Их схема:

Схема

У новичков это может вызвать недоумение и путаницу. Для помощи в решении проблемы существует программная библиотека Wiring Pi с собственной альтернативной нумерацией. Так, логический GPIO2 в ней определен как WIringPI 8. Это может показаться непонятным, но после освоения библиотеки ее принцип нумерования становится привычным и удобным.

Способы взаимодействия с интерфейсом GPIO

Интерфейсная гребенка позволяет работать с собой несколькими путями:

  • встроенными инструментами Linux (через интерпретатор bash и средства файловой системы);
  • посредством языков программирования.

Управление на bash

Если использовать Raspbian, «баш» доступен по умолчанию. Пример отправки логического «1» на пин номер 25:
sudo su -
echo 25 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio25/direction
echo 1 > /sys/class/gpio/gpio25/value
echo 0 > /sys/class/gpio/gpio25/value

Чтение данных со входа номер 24:

echo 24 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio24/direction
cat > /sys/class/gpio/gpio24/value

Управление через Python

Питон — один из самых популярных языков разработки под Raspberry, и в нем создан богатый инструментарий. В последних дистрибутивах ОС Raspbian уже присутствует и сама среда Python, и необходимая для работы библиотека RPi.GPIO. Если же таковой нет, ее можно загрузить из репозитория:

sudo apt-get install python-rpi.gpio

Далее необходимо подгрузить этот модуль в программу:

import RPi.GPIO as GPIO

Далее следует определиться с порядком нумерации — брать ли «физический» по номерам портов на микрокомпьютере, или использовать принцип обращения по номерам процессорных каналов (BCM):

GPIO.setmode (GPIO.BOARD)
GPIO.setmode (GPIO.BCM)

Преимущество первого пути — универсальность: он будет работать с любой ревизией контроллера. BCM обращается непосредственно к каналам процессора на более низком уровне.

На следующем шаге выбирается режим работы портов input или output.

GPIO.setup(channel, GPIO.IN)
GPIO.setup(channel, GPIO.OUT)

Сразу же можно определить начальное состояние выходов RPi3:

GPIO.setup(channel, GPIO.OUT, GPIO.LOW)
GPIO.setup(channel, GPIO.OUT, GPIO.HIGH)

Команда на чтение информации со входа:

GPIO.input(channel)

Запись значения на выход GPIO:

GPIO.output(channel, state)

Пример работы

Рассмотрим пример взаимодействия RPi3 и простой схемы со светодиодом через написанную на Python программу.

Для начала понадобится «малинка» с установленным ПО и средой разработки, макетная плата, диод, кнопка и резисторы. Схема подключения приведена ниже:

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

Здесь R1 имеет сопротивление 10 кОм, R2 — 1 кОм, а резистор R3 — 220 кОм.

Что обеспечивает подобная модель:

  • без нажатия кнопки на входе пина возникает напряжение 3.3 В;
  • при нажатии кнопки через нее и резистор R1 начнет подаваться ток 0.33 мА, а на входе схема обеспечит 0 В;
  • при неверном подключении пинов по схеме потечет ток безопасных значений, предохраняя систему от повреждения.

Написанный на Python скрипт включения-выключения лампочки:

Import RPi.GPIO as GPIO
GPIO.setmode (GPIO.BCM)
GPIO.setup (4, GPIO.OUT)
GPIO.output (4, 1)
GPIO.cleanup ()

Для «моргания» диодом:

import RPi.GPIO as GPIO #импорт библиотеки дл¤ работы с GPIO
import time             #импорт библиотеки дл¤ ожидани¤
GPIO.setmode(GPIO.BCM)  #"запуск" GPIO
GPIO.setup(4, GPIO.OUT) #объ¤вл¤ем 4 порт как выход
while True:             #цикл
GPIO.output(4, 1) #вкл светодиода
time.sleep(1)     #пауза 1 с
GPIO.output(4, 0) #выкл светодиода
time.sleep(1)     #пауза 1 с

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

import RPi.GPIO as GPIO #импорт библиотеки дл¤ работы с GPIO
GPIO.setmode(GPIO.BCM)  #"запуск" GPIO
GPIO.setup(4, GPIO.OUT) #объ¤вл¤ем 4 порт как выход
GPIO.setup(3, GPIO.IN)  #объ¤вл¤ем 3 порт как вход
while True:             #цикл
if GPIO.input(3) == False: #если кнопка нажата
GPIO.output(4, 1) #вкл светодиода
else:
GPIO.output(4, 0) #выкл светодиода

Пример управления выходами с клавиатуры:

import RPi.GPIO as GPIO #импорт библиотеки дл¤ работы с GPIO
GPIO.setmode(GPIO.BCM)  #"запуск" GPIO
GPIO.setup(4, GPIO.OUT) #объ¤вл¤ем 4 порт как выход
while True:             #цикл
str = input("Enter - вкл, другое - выход ");
if str != "":
break
else:
GPIO.output(7, 1)
str = input("Enter - выкл, другое - выход ")
if str != "":
break
else:
GPIO.output(7, 0)
GPIO.cleanup()

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

sudo python путь_к_исполняемому_файлу/имя_программы.py

Python предоставляет широкое поле возможностей для программирования «Распберри» и позволяет реализовывать гораздо более сложные схемы. Кроме того, с платой можно взаимодействовать на практически любом распространенном языке — одном из семейства C, Perl, Erlang и другое. Существуют даже реализации проектов на Java и HTML5.

Заключение

GPIO — удобное и универсальное решение, позволяющий подключать к RPi 3 разнообразную периферию и программировать ее поведение на одном из привычных языков. Логика взаимодействия довольно проста, а GPIO, как и сама «малинка», хорошо документирован, что обеспечивает легкий вход в программирование с использованием этого интерфейса даже новичкам в мире IT.

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

Видео по теме

Хорошая реклама

Добавить комментарий Ваш e-mail не будет опубликован. Обязательные поля помечены *