Введение Установка и первичная настройка Константы библиотеки Методы библиотеки Начало работы с библиотекой Информация о библиотеки и плате Режим работы пинов Режим установки состояния (OUTPUT) Режим чтения состояния (INPUT) Чтение и установка состояний Заключение Начнем знакомство с подключаемой библиотекой RepkaPi.GPIO, данная библиотека написана на Python 3 и для управления GPIO использует методы, реализованные через SysFS. Подробней про SysFS можно прочитать на wikipedia. Данная библиотека была максимально поддерживает обратную совместимость с библиотекой RPI.GPIO для Raspberry Pi чтобы обеспечить быстрый перенос Ваших скриптов. Постоянный адрес библиотеки на gitflic.ru: https://gitflic.ru/project/repka_pi/repkapigpiofs. Первым делом устанавливаем необходимые пакеты. Обновим индекс пакетов Установим необходимые пакеты Клонируем репозиторий Переходим в полученную папку * Вы также можете скачать архивом с gitflic и распаковать в удобном месте. Перед тем как установить модуль давайте рассмотрим возможную его настройку. Модуль имеет две константы, данные константы находятся в файле RepkaPi/constants.py GPIO.DEFAULTBOARD - позволяет указать модель Repka Pi на которой будет использоваться модуль. По умолчанию значение None. При этом значение необходимо определять плату при работе с библиотекой. На данный момент возможно установить значение GPIO.REPKAPI3 или 1, это будет означать что библиотека работает на Repka Pi 3 и в дальнейшем при работе с библиотекой указывать версию платы не обязательно. GPIO.AUTODETECT - автоматическое определение модели Repka Pi. Принимает логическое значение True/False, по умолчанию установлена в True. Если установлено True то GPIO.DEFAULTBOARD игнорируется. Установка библиотеки При успешной установки библиотеки будет такая концовка вывода Если вы хотите использовать библиотеку как пользователь без полномочий root, вам необходимо сначала настроить правило UDEV, чтобы предоставить вам разрешения. Это можно сделать следующим образом: Создаем группу gpio Добавляем вашего пользователя в группу gpio Создаем правило для udev при загрузке системы В открывшейся файл вставляем следующее Нажмите ctrl-x, Y и ENTER, чтобы сохранить и закрыть файл. Перезагружаем систему Рассмотрим какие константы имеет библиотека и могут использоваться при работе. В статье мы их рассмотрим подробней. GPIO.RPI_INFO - информация об устройстве GPIO.VERSION - информация о версии библиотеки GPIO.REPKAPI3 - Repka Pi 3 GPIO.BOARD - 10 - физическая нумерация по порядку от 1 до 40 GPIO.BCM - 11 - нумерация по Raspberry Pi 3B для обратной совместимости скриптов, в новых скриптах использовать не рекомендуем GPIO.SUNXI - 12 - по строковому обозначенею SUNXI “PA0…, PC…, PL…” GPIO.SOC - 13 - по числовому адресу в SOC, применяется в SysFS, рекомендовано к использованию GPIO.SYSFS - альяс для GPIO.SOC GPIO.PA - 0 GPIO.PC - 64 GPIO.PD - 96 GPIO.PE - 128 GPIO.PF - 160 GPIO.PG - 192 GPIO.PL - 352 GPIO.IN - 1 - режим INPUT - чтение состояния GPIO.OUT - 0 - режим OUTPUT - установка состояния GPIO.HIGH - 1 - высокий уровень, логическая единица GPIO.LOW - 0 - низкий уровень, логический ноль GPIO.PUD_OFF - не подтягивается GPIO.PUD_DOWN - пин через внутренний резистор будет подключен к 0 (GND) GPIO.PUD_UP - пин через внутренний резистор будет подключен к +3.3В Внимание: Подтяжка в данной версии модуля игнорируется, необходимо реализовать физическую подтяжку через резистор. GPIO.RISING - изменение сигнала с LOW на HIGH GPIO.FALLING - изменение сигнала с HIGH на LOW GPIO.BOTH - изменение сигнала в любом направление GPIO.getboardmodel() - получает установленную модель Repka Pi GPIO.getmode() - возвращает номер режима нумерации пинов GPIO.setboard() - установка модели Repka Pi, принимает значение board - GPIO.REPKAPI3 GPIO.setmode() - установка режима нумерации пинов, принимает значение mode - GPIO.BOARD, GPIO.BCM, GPIO.SUNXI или GPIO.SOC GPIO.setwarnings() - управление предупреждениями, принимает логическое значение True/False GPIO.setup() - инициализация пина, принимает значения channel - номер пина в соответствие с установленным режимом нумерации, direction - устанавливаем GPIO пин как вход или выход (использовать только GPIO.IN или GPIO.OUT) initial - (опционально) установка начального значения пина (GPIO.LOW (0) или GPIO.HIGH (1), pull_up_down - (опционально) подтяжка к +3,3В (GPIO.PUD_UP), к 0 (GPIO.PUD_DOWN) или не установлен (GPIO.PUD_OFF). Внимание: Подтяжка в данной версии библиотеки не работает, но описание сохранено для обратной совместимости GPIO.input() - получение состояние пина, принимает значение channel - номер пина в соответствие с установленным режимом нумерации, возвращает значение GPIO.LOW (0) или GPIO.HIGH (1) GPIO.output() - устанавливает состояние пина, принимает значения channel - номер пина в соответствие с установленным режимом нумерации, state - состояние пина GPIO.LOW (0) или GPIO.HIGH (1) GPIO.cleanup() - возвращаем пины в исходное состояние, принимает значение channel - номер пина в соответствие с установленным режимом нумерации или None (значение по умолчанию) чтобы сбросить все инициализированные пины В следующих статьях рассмотрим остальные методы библиотеки.  Первым делом нам необходимо подключить библиотеку RepkaPi.GPIO в вашем скрипте   Если при установке вы не указали GPIO.DEFAULTBOARD и GPIO.AUTODETECT установили в False то необходимо установить модель Repka Pi, это можно сделать следующей функцией GPIO.REPKAPI3 - означает что библиотека используется на Repka Pi 3. На данный момент единственная модель. Указываем какой мы режим хотим использовать Выше в разделе “Константы библиотеки” были перечислены все константы, давайте теперь разберем подробней чем они отличаются. BOARD - обращение по порядковому номеру пина на плате, если хотим обратиться к пину под №7, то при обращении нужно писать тоже 7 SUNXI -  Обращение по строковому параметру в схеме распиновки, если мы используем этот режим, то обращение к пину 7 будет как строковое значение “PA7” Данный способ будет более понятным, но тоже при работе использует дополнительные операции. SOC и SYSFS - числовая адресация по SOC и SYSFS т.е. если обратить внимание на распиновку как официальную, так и на представленную в статье, то увидите соответствующий столбец. Если вы захотите обратиться к пину под номером 18, то вам нужно будет указать его номер SOC/SysFS равный 355, также вы можете вычислить данное число по SUNX (P обозначает Pin ее мы пропускаем. Формула вычисления, (порядковый номер латинской буква (L) - 1) 32 + номер после латинской буква (3), то получим (12-1) 32+3=355). Данный способ является предпочтительным т.к. не выполняются дополнительные операции приведения. Также для удобства в библиотеке есть следующие константы. PA - 0, PC - 64, PD - 96, PE - 128, PF - 160, PG - 192, PL - 352 и обращение к 18 пину PL3 будет уже следующим GPIO.PL + 3. BCM - эта схема создана для совместимости с обращением по BCM процессорам которые устанавливаются в основном в Raspberry Pi. Если мы посмотрим на схему Raspberry Pi то к примеру на 7 пине у него находится GPIO4. Обращение происходит по номеру GPIO т.е. 4, дальше скрипт приведет данное значение к соответствующему значению к Repka Pi, т.е. по SOC это будет 7 или PA7 по SUNXI Рассматривать в рамках статьи этот способ не будем, при разработке на Repka Pi он не пригодится. Если не разобрались, то не переживайте мы еще будем возвращаться к этой части в примерах, и возможно не раз. И так мы рассмотрели основные методы которые необходимо применять во всех скриптах, назовем их базовыми методами. В библиотеке есть две константы и один метод чтобы получить информацию о плате и библиотеке. Получить выбранную модель платы Данный метод вернет нам * при появление новых версий и по мере их добавления в библиотеку возможны и другие ответы. Версия библиотеки Вернется версия 0.1.2, это версия на момент написания статьи. Информация об устройстве Вернет объект свойств Данная информация соответствует структуре аналогичной константы в RPI.GPIO для Raspberry Pi. Для получения конкретного свойства можно, обратившись к нему напрямую: Вернет значение Вернет значение Узнать, какой режим установлен Данный метод вернет числовое значение, соответствующее установленному  режиму или None. Данные значения можно посмотреть в описание констант. После рассмотрения основных базовых действий можно переходит к установке режима работы пина. Рассмотрим все возможные обращения на примере 18 пина Пин может принимать 2 варианта - INPUT (режим чтения состояния) и OUTPUT (режим установки состояния). Для установки состояния используем метод GPIO.setup(channel, direction, initial=None, pull_up_down=None) channel - номер пина в соответствие с установленным режимом нумерации, direction - устанавливаем GPIO пин как вход или выход (использовать только GPIO.IN или GPIO.OUT) initial - (опционально) установка начального значения пина (GPIO.LOW (0) или GPIO.HIGH (1), pull_up_down - (опционально) подтяжка к +3,3В (GPIO.PUD_UP), к 0 (GPIO.PUD_DOWN) или не установлен (GPIO.PUD_OFF) В режиме GPIO.BOARD В режиме GPIO.SUNXI В режиме GPIO.SOC/GPIO.SYSFS или Далее будем рассматривать только в режиме GPIO.SOC/GPIO.SYSFS Вы также можете настроить сразу несколько пинов в одном вызове используя списки (list) или кортежи (tuple) Для пина в режиме OUT можно установить начальное значение при помощи свойства initial. Инициализируем пин в режиме OUTPUT со значением логическая единица GPIO.HIGH Инициализируем пин в режиме OUTPUT со значением логическая ноль GPIO.LOW В режиме GPIO.SOC/GPIO.SYSFS Вы также можете настроить сразу несколько пинов в одном вызове используя списки (list) или кортежи (tuple) При инициализации пина в режиме INPUT, можно в этой же команде осуществить повышающую/понижающую резисторную подтяжку этого пина, а также отключить подтягивание. Внимание: Поддержка резисторной подтяжки в данном модули нет, если они указаны, вместо них будет отображаться предупреждение, чтобы оно было хотя бы совместимо с существующим кодом, но без реализации реальной функциональности. Если входной контакт ни к чему не подключен, он будет «плавать». Другими словами, считываемое значение не определено, поскольку оно ни с чем не связано, пока вы не нажмете кнопку или переключатель. Чтобы обойти эту проблему, мы используем подтягивающий или понижающий резистор. Таким образом, можно установить значение входа по умолчанию. Резисторы повышения/понижения можно использовать аппаратно и с помощью программного обеспечения. В аппаратном обеспечении обычно используется резистор 10 кОм между входным каналом и напряжением 3,3 В (повышение) или 0 В (понижение). Программная подтяжка будет реализована в другой версии модуля. Подтягиваем к +3.3В Подтягиваем к 0В Отключаем подтягивание Для получения состояния пина, установленного в режиме INPUT (режим чтения состояния) или OUTPUT (режим установки состояния) воспользуемся функцией input(channel). Функция имеет параметр channel номер пина в соответствие с установленным режимом нумерации и возвращает значение 0/GPIO.LOW/False или 1/GPIO.HIGH/True В данном примере в value запишется состояние пина PL3, 0/GPIO.LOW/False или 1/GPIO.HIGH/True. Для задания состояния пина, инициализированного в режим OUTPUT (режим установки состояния) воспользуемся функцией output(channel, state). Параметры функции: channel - номер пина, может принимать список (list) и кортежи (tuple) state - состояние пина 0/GPIO.LOW/False или 1/GPIO.HIGH/True, может принимать список (list) и кортежи (tuple) В данном примере PL3 был задан высокий уровень (1/GPIO.HIGH/True), в данном случае на пине будет напряжение +3,3В. Теперь рассмотрим варианты с использованием списка (list) или кортежа (tuple) В этих примерах мы установили PL3 и PA10 высокий уровень (1/GPIO.HIGH/True). Также в значение пина можно тоже передать список (list) значений или кортежа (tuple) Параметры channel и state могут иметь тип список (list) или кортеж (tuple), связи типов нет. Но в state должно быть 1 значение которое будет задано все пина или одинаковое количество с channel. И рассмотрим еще одну функцию cleanup(), предназначенную для возврата пинов в исходное состояние. Функция имеет параметр channel номер пина в соответствие с установленным режимом нумерации. Сброс всех установленных пинов Внимание: При таком вызове также сбросится и установленный режим нумерации пинов. Сбросить только один пин Также в этой функции можно применить список (list) или кортеж (tuple), чтобы вернуть в исходное состояние несколько пинов или В данной статье мы начали знакомство с библиотекой RepkaPi.GPIO SysFS для Python3, выполнили установку, разобрали ее настройки, рассмотрели константы и некоторые функции по работе с GPIO в режиме I/O (Input/Output). В следующей статье мы рассмотрим разные примеры работы библиотеки на практике!