Радиолоцман Электроника en
расширенный поиск +
  

13-09-2017

Что нужно знать о портах ввода-вывода Raspberry Pi. Часть 1

Raspberry Pi

Журнал РАДИОЛОЦМАН, июнь 2017

element14

Вступление

Raspberry Pi (RPi) – это одноплатный компьютер (SBC), который позиционируется на рынке как бюджетное решение для начинающих разработчиков встраиваемых систем. RPi и его модификации пользуются популярностью и среди радиолюбителей. В сети можно найти множество готовых проектов на RPi, начиная от мультимедиа центров до систем Интернета вещей и «Умный дом».

С точки зрения внешних интерфейсов Raspberry Pi, как и другие небольшие одноплатные компьютеры, не сильно отличается от обычного настольного ПК. На плате RPi предусмотрены USB порты для подключения клавиатуры и мыши, порт HDMI для подключения дисплея. Однако, благодаря тому, что RPi значительно компактнее и дешевле, чем ПК, становится возможным использовать их в различных системах и приложениях, где ПК или ноутбуки неуместны.

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

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

Именно здесь проявляется очевидное преимущество RPi и других SBC, обусловленное ключевым различием между одноплатными компьютерами и ПК: одноплатные компьютеры имеют порты ввода/вывода общего назначения, – то, чего нет у больших ПК (Рисунок 1).

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 1. Разъем портов ввода/вывода (GPIO) на плате Raspberry Pi может
использоваться для подключения пользовательской периферии.

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

В статье мы рассмотрим примеры схем, которые можно использовать «как есть» (или изменить и расширить), вместе с примерами кода на нескольких языках программирования.

Разъем расширения Raspberry Pi

На Рисунке 2 показано расположение и назначение выводов разъема расширения Raspberry Pi. Первые выводы подобных разъемов на печатных платах, как правило, могут быть идентифицированы по квадратной контактной площадке на нижнем слое платы. На 40-контактный разъем расширения RPi выведены цифровые входы и выходы, совместимые с логическими уровнями 3.3 В.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 2. Расположение и назначение выводов 40-контактного разъема расширения RPi.

Совместимость с логическими уровнями 3.3 В означает, что RPi будет интерпретировать входной уровень близкий к 0 В как логический «0», а уровень выше 2 В как логическую «1». Подача на вход напряжения выше 3.3 может вывести RPi из строя. Соответственно, когда GPIO порт сконфигурирован как выход, RPi будет устанавливать на нем напряжение близкое к 0, либо к 3.3 В.

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

Цифровые выходы RPi

Первые шаги: управление светодиодом

Простейший пример использования выходов – управление светодиодом или лампочкой, или каким-нибудь приводом или мотором. Для преобразования выходного сигнала RPi во что-то, что будет управлять нужным устройством, обычно требуется электронная схема. Все, что необходимо для небольшого светодиода – последовательный токоограничительный резистор, защищающий светодиод и выход RPi. Сопротивление резистора выбирается из диапазона 100 Ом … 1 кОм, в зависимости от используемого светодиода и необходимой яркости при установке на выходе логической «1».

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 3. Подключение светодиода к разъему GPIO RPi с применением
макетной платы.

Подключение светодиода к контактам разъема GPIO с помощью беспаечной макетной платы показано на Рисунке 3, а сама схема – на Рисунке 4. Соединение GND (0 В) было взято с вывода 6 разъема GPIO, для управления светодиодом используется порт GPIO22 (вывод 15). Можно использовать любой порт GPIO, отмеченный розовым цветом на Рисунке 2.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 4. Принципиальная схема подключения
светодиода к плате RPi.

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

Листинг 1. Пример программы на Python для простого мигания светодиодом.

# Светодиод подключен к GPIO22 (контакт 15)
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, True)
time.sleep(3)
GPIO.cleanup()

Сохраните код в файл с именем led-test.py, а затем запустите его, выполнив команду:

sudo python led-test.py

Другая программа (Листинг 2) демонстрирует пример управления светодиодом. Светодиод мигает 10 раз. (Примечание: в Python, в отличие от других языков программирования, важно использование отступов в коде).

Листинг 2. Исходный код программы на Python (светодиод мигает 10 раз).

# Светодиод подключен к GPIO22 (контакт 15)
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
for x in range(0,10):
  GPIO.setup(22, GPIO.OUT)
  GPIO.output(22, True)
  time.sleep(0.05)
  GPIO.output(22, False)
  time.sleep(0.45)

GPIO.cleanup()

Другой способ управления портами GPIO основан на использовании Shell-скрипта (сценария оболочки). Этот метод кажется немного более сложным (если вы не любите писать скрипты), но он хорош просто для расширения кругозора, поскольку многие языки программирования часто позволяют запускать командные скрипты, и в случае необходимости это может быть одним из быстрых способов управления портами GPIO из других языков. Кроме того, описанный в Листинге 3 способ является стандартным для различных платформ, поэтому ваш код может быть перенесен на другие платы.

Листинг 3. Командный скрипт (Shell-скрипт) для управления светодиодом, подключенным к GPIO22 Raspberry Pi.

#!/bin/sh
GPIO_PATH=/sys/class/gpio
LED_PIN=22 #GPIO 22 is pin 15
echo "$LED_PIN" > $GPIO_PATH/export
echo "out" > $GPIO_PATH/gpio$LED_PIN/direction
echo "1" > $GPIO_PATH/gpio$LED_PIN/value
sleep 1
echo "$LED_PIN" > $GPIO_PATH/unexport

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

Другим распространенным языком программирования, с которым вы можете встретиться, является Си, или его старший брат Си++. Примеры исходного кода на Си или Си++ будут приведены далее, когда мы приступим к работе с цифровыми входами.

Генератор тональных сигналов

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

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 5. Генератор звуковых сигналов, управляемый от RPi по двум линиям GPIO.

Принципиальная схема простого генератора звуковых сигналов, выполненного на микросхеме интегрального таймера ICM7555, изображена на Рисунке 5. Вид конструкции, собранной на макетной плате, показан на Рисунке 6. Меняя номиналы резистора и конденсатора, можно создавать разные тональные сигналы и звуки.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 6. Генератор звуковых сигналов, собранный на беспаечной
макетной плате.

Управление генератором осуществляется посредством двух портов GPIO RPi. Один выход (GPIO22) используется для включения или выключения звука, а второй (GPIO27) – для переключения между двумя альтернативными частотами сигнала. При желании можно выбрать другие тона, изменив номиналы компонентов C1, R1 и R2.

Исходный код программы на языке Python, генерирующей несколько звуковых эффектов, приведен в Листинге 4. Сохраните код в файле с именем tone-test.py и затем запустите на выполнение командой

sudo python tone-test.py.

Листинг 4. Программа управления генератором звуковых сигналов.

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)  # Вкл/Выкл генератора
GPIO.setup(27, GPIO.OUT)  # Изменение тональности

GPIO.output(22, True)
for x in range(0,5):
  GPIO.output(27, True)
  time.sleep(0.1)
  GPIO.output(27, False)
  time.sleep(0.2)
GPIO.output(22, False)
time.sleep(0.5)

for x in range(0,5):
  GPIO.output(22, True)
  time.sleep(0.1)
  GPIO.output(22, False)
  time.sleep(0.2)
GPIO.output(27, True)
time.sleep(0.2)

for x in range(0,5):
  GPIO.output(22, True)
  time.sleep(0.05)
  GPIO.output(22, False)
  time.sleep(0.05)

for x in range(0,10):
  GPIO.output(22, True)
  time.sleep(0.1)
  GPIO.output(22, False)
  time.sleep(0.1)
time.sleep(1)

GPIO.cleanup()

Обратите внимание, что схема питается напряжением 3.3 В (вывод 1 разъема GPIO). Используйте этот источник только в том случае, если уверены, что ваша схема не потребляет значительный ток. Шину питания 3.3 В можно нагружать током до 50 мА. При необходимости можно воспользоваться отдельным регулятором напряжения 5 В – 3.3. В и подключить его к источнику питания 5 В, доступному на выводе 2 разъема GPIO.

Дополнительные советы по управлению внешними устройствами

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

Подключение к 5-вольтовым логическим устройствам

Использование RPi для управления 5-вольтовыми устройствами не потребует каких-либо дополнительных схем. Логические входы устройства с напряжением питания 5 В будут нормально функционировать с выходными сигналами 3.3 В портов RPi.

Маломощные светодиоды

Для маломощных синих и белых светодиодов может потребоваться напряжение выше 3.3 В. Проще всего управлять единичным светодиодом с помощью транзисторного ключа, коммутирующего ток шины 5 В (Рисунок 7). Сопротивление резистора R1 рассчитывается исходя из технических характеристик конкретного светодиода, транзистор – любой n-p-n типа.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 7. Для управления светодиодами можно
использовать  транзистор.

Мощные устройства

Самым простым и распространенным способом управления мощными устройствами, питающимися от источника переменного или постоянного тока (но не от сети), является использование реле с транзисторным ключом (Рисунок 8). Подойдут практически любые n-p-n транзисторы, в частности, популярные BC547B, 2N3904 и BC549. При этом, если внешнее устройство может работать от 5 В, подать питание на реле можно с вывода 2 разъема GPIO. Но и в этом случае не следует забывать о токе потребления. В противном случае реле может быть подключено к внешнему источнику питания с соблюдением мер предосторожности, исключающих попадание внешнего напряжения на RPi.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 8. Схема подключения реле к плате RPi для
управления внешними устройствами.

Устройства c питанием от электросети

Обращение с любыми схемами или устройствами, непосредственно управляющими приборами, подключенными к сети переменного тока, требует особой осторожности. Большинство из них просто не отвечает стандартам безопасности, несмотря на то, что некоторые изготовители утверждают обратное. Достаточно безопасный подход заключается в том, чтобы найти готовое решение дистанционного управления авторитетного производителя, предлагаемое авторитетным поставщиком, в котором для управления устройствами, питающимися от сети, используются инфракрасные или беспроводные технологии. Например, компания Energenie предлагает сетевые розетки с управлением по радиоканалу в комплекте с небольшим модулем радиопередатчика (Рисунок 9), подключаемым непосредственно в разъем GPIO платы RPi, а также примеры программ на Python.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 9. Модуль радиопередатчика Pi-mote компании Energenie
для сетевых розеток с управлением по радиоканалу.

Группа реле, светодиодов или иных устройств

Для управления несколькими светодиодами, реле или другими устройствами, которые питаются от 12 В и потребляют менее 200 мА, можно использовать древнюю (выпускаемую более 25 лет) микросхему ULN2803. Микросхема представляет собой набор из восьми ключей на основе транзистора Дарлингтона. Один из вариантов подключения микросхемы ULN2803 к RPi показан на Рисунке 10.

Что нужно знать о портах ввода-вывода Raspberry Pi
Рисунок 10. С помощью микросхемы ULN2803 можно управлять несколькими
нагрузками, не требующими тока более 200 мА.

Маломощные двигатели постоянного тока

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

Загрузки

Материалы по теме

Окончание

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Raspberry Pi GPIO Explained. Part 1

    Исполнение: SDCARD. Карта памяти SD 4Gb с предустановленным Raspbian карта памяти SD 4Gb с предустановленным Debian 6 Linux, 2 Gb доступно...
    Цена Raspberry Pi
    ПоставщикПроизводительНаименованиеЦена
    AliExpressМалина поколения оболочки для поддержки 3.5-дюймовый сенсорный ЖК-экран установки raspberrypi 3 коробка3 руб.
    5 элементTexas InstrumentsSN74LVC1GU04DCKRот 8 руб.
    ICdaromSamsungRASPBERRY-PIот 370 руб.
    XCom-ShopКорпус RASPBERR RASPBERRY-PI3-CASE с крышкой для микрокомпьютера Raspberry Pi 3 Model B524 руб.
    ДессиSamsungМиникомпьютеры и аксессуары к ним RASPBERRY-PI / PROG-4GB-SDCARD702 руб.
    Все 13 предложений от 10 поставщиков »
Срезы ↓
Датчики влажности и температуры ДВТ-03
Цена: от 3 168 руб.
Доставка: Россия и страны СНГ
DIY настольный 3D принтер
Цена: 163 $ (9500 руб.)
Промо-акция, последняя скидка
Очки с подсветкой и сменными окулярами
Цена: от 8 $ (477 руб.)
Бесплатная доставка: Весь мир
радиолоцман вконтакте радиолоцман одноклассники радиолоцман facebook радиолоцман twitter радиолоцман google плюс