Данная глава представляет собой полный справочник по API библиотеки RepkaPi.GPIO
. Здесь подробно описана каждая функция, класс и константа, которые доступны разработчику. Документация разделена на логические группы для удобства навигации и изучения.
Общая настройка и управление
Эта группа включает функции, отвечающие за инициализацию библиотеки, выбор режимов и безопасное завершение работы.
GPIO.setmode(mode)
Устанавливает глобальный режим нумерации пинов для всей сессии. Эту функцию необходимо вызвать один раз в начале программы перед использованием любых других функций, работающих с пинами.
-
Параметры:
mode
: Одна из констант нумерации:GPIO.BOARD
,GPIO.BCM
,GPIO.SOC
,GPIO.SUNXI
.
-
Пример:
GPIO.setmode(GPIO.BOARD)
GPIO.setboard(model)
Принудительно указывает библиотеке, для какой модели Repka Pi загружать карту пинов. Имеет приоритет над автоматическим определением.
-
Параметры:
model
:GPIO.REPKAPI3
илиGPIO.REPKAPI4
.
-
Пример:
# Убедиться, что используются карты для Repka Pi 3 GPIO.setboard(GPIO.REPKAPI3)
GPIO.cleanup(channel=None)
Сбрасывает настройки для указанных каналов или для всех каналов, если channel
не задан. Корректно останавливает отслеживание событий и выполняет unexport
пинов в sysfs
.
-
Примечания: Эта функция автоматически регистрируется для вызова при завершении скрипта, но ее явный вызов в блоке
finally
является хорошей практикой. -
Пример:
try: # Ваш основной код pass finally: GPIO.cleanup() # Очистить все использованные каналы
Управление пинами ввода-вывода
Это основные функции для настройки и взаимодействия с GPIO-пинами.
GPIO.setup(channel, direction, pull_up_down=GPIO.PUD_OFF, initial=None)
Конфигурирует указанный канал.
-
Параметры:
channel
: Номер пина в соответствии с установленным режимом.direction
: Направление работы пина:GPIO.IN
(вход) илиGPIO.OUT
(выход).pull_up_down
: Зарезервировано. В текущей версии библиотеки внутренние подтягивающие резисторы не реализованы. Используйте внешние.initial
: Начальное состояние (GPIO.HIGH
илиGPIO.LOW
) для пина, сконфигурированного как выход.
-
Пример:
# Настроить 7-й пин (BOARD) как выход с начальным низким уровнем GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) # Настроить 15-й пин (BOARD) как вход (для кнопки с внешним резистором) GPIO.setup(15, GPIO.IN)
GPIO.output(channel, value)
Устанавливает логический уровень на пине, предварительно настроенном как выход.
-
Параметры:
channel
: Номер пина.value
: Состояние:GPIO.HIGH
(1) илиGPIO.LOW
(0).
-
Пример:
GPIO.output(7, GPIO.HIGH) # Подать 3.3V на пин 7
GPIO.input(channel)
Считывает логический уровень с пина, предварительно настроенного как вход.
-
Возвращает:
GPIO.HIGH
(1) илиGPIO.LOW
(0). -
Пример:
if GPIO.input(15) == GPIO.HIGH: print("Кнопка нажата!")
Обработка событий и прерываний
Функции для асинхронной, событийно-ориентированной работы с GPIO.
GPIO.add_event_detect(channel, edge, callback=None, bouncetime=0)
Включает отслеживание события на входном пине.
-
Параметры:
channel
: Номер пина.edge
: Тип события (триггер):GPIO.RISING
(нарастающий фронт),GPIO.FALLING
(спадающий фронт) илиGPIO.BOTH
(оба).callback
: Функция, которая будет вызвана при наступлении события. Она должна принимать один аргумент — номер канала.bouncetime
: Время в миллисекундах для подавления "дребезга контактов".
-
Пример:
def my_callback(channel): print(f"Событие на канале {channel}!") GPIO.add_event_detect(15, GPIO.RISING, callback=my_callback, bouncetime=200)
GPIO.remove_event_detect(channel)
Отключает отслеживание события на указанном пине.
GPIO.add_event_callback(channel, callback)
Добавляет дополнительную callback-функцию к уже отслеживаемому событию. Позволяет привязать несколько обработчиков к одному событию.
-
Пример:
GPIO.add_event_detect(15, GPIO.RISING) # Сначала включаем отслеживание GPIO.add_event_callback(15, my_callback) # Затем добавляем обработчик
GPIO.event_detected(channel)
Проверяет, произошло ли событие на пине с момента последней проверки. Используется для неблокирующего опроса без callback-функций.
- Возвращает:
True
, если событие было, иначеFalse
.
GPIO.wait_for_edge(channel, edge, timeout=-1)
Блокирует выполнение программы до тех пор, пока не произойдет указанное событие или не истечет таймаут.
-
Параметры:
timeout
: Максимальное время ожидания в миллисекундах. Если-1
, ожидание будет бесконечным.
-
Возвращает: Номер канала, если событие произошло, или
None
, если истек таймаут. -
Пример:
print("Ожидание нажатия кнопки в течение 5 секунд...") channel = GPIO.wait_for_edge(15, GPIO.RISING, timeout=5000) if channel is None: print("Тайм-аут!") else: print(f"Кнопка на канале {channel} нажата.")
Аппаратный ШИМ (Класс PWM_A
)
Класс для управления аппаратным ШИМ-контроллером.
pwm = GPIO.PWM_A(chip, pin, frequency, duty_cycle_percent)
Создает и инициализирует объект ШИМ.
-
Параметры:
chip
: Номер ШИМ-контроллера (чипа), обычно0
.pin
: Номер канала ШИМ внутри чипа, обычно0
.frequency
: Частота сигнала в Герцах (Гц).duty_cycle_percent
: Начальный коэффициент заполнения (0-100).
-
Пример:
# Создать ШИМ на частоте 100 Гц с начальной яркостью 50% my_pwm = GPIO.PWM_A(0, 0, 100, 50)
pwm.start_pwm()
Запускает генерацию ШИМ-сигнала с установленным коэффициентом заполнения.
pwm.stop_pwm()
Останавливает ШИМ (устанавливает коэффициент заполнения в 0).
pwm.duty_cycle(percent)
Изменяет коэффициент заполнения (яркость) "на лету".
- Параметры:
percent
: Новое значение от 0 до 100.
pwm.change_frequency(new_frequency)
Изменяет частоту ШИМ-сигнала "на лету".
pwm.pwm_polarity()
Инвертирует полярность сигнала. Если раньше 100% означало полную яркость, то после вызова этой функции 100% будет означать полное выключение.
pwm.pwm_close()
Корректно останавливает ШИМ и освобождает системные ресурсы.
Вспомогательные и информационные функции
GPIO.get_function(channel)
Возвращает константу текущей функции пина.
- Возвращает:
GPIO.IN
,GPIO.OUT
,GPIO.I2C
,GPIO.SPI
и т.д. - Пример:
if GPIO.get_function(7) == GPIO.OUT:
GPIO.get_function_name(channel)
Возвращает текстовое название специальной функции пина.
- Возвращает: Строку, например,
"I2C1-SDA"
,"UART0-TX"
или"GPIO"
.
GPIO.getboardmodel()
Возвращает номер автоматически определенной модели платы.
- Возвращает:
3
для Repka Pi 3,4
для Repka Pi 4.
GPIO.RPI_INFO
Словарь, содержащий информацию об определенной плате.
- Пример:
print(GPIO.RPI_INFO['TYPE'])
выведет'Repka Pi 3'
.
GPIO.VERSION
Константа, содержащая версию библиотеки в виде строки.
8.6. Константы
Режимы нумерации #
GPIO.BOARD
: Физическая нумерация (1-40).GPIO.BCM
: Нумерация по системному номеру GPIO.GPIO.SOC
: Нумерация через вычисление (GPIO.PL + 7
).GPIO.SUNXI
: Нумерация по имени порта и пина ("PL7"
).
Логические уровни #
GPIO.HIGH
: Логическая единица (1).GPIO.LOW
: Логический ноль (0).
Направления пинов #
GPIO.IN
: Пин сконфигурирован как вход.GPIO.OUT
: Пин сконфигурирован как выход.
Режимы подтяжки #
GPIO.PUD_UP
: Подтягивающий резистор к 3.3V.GPIO.PUD_DOWN
: Стягивающий резистор к земле.GPIO.PUD_OFF
: Подтяжка отключена.
Типы событий (триггеров) #
GPIO.RISING
: Нарастающий фронт (сигнал переходит с LOW на HIGH).GPIO.FALLING
: Спадающий фронт (сигнал переходит с HIGH на LOW).GPIO.BOTH
: Любое изменение состояния.
"Калькулятор" для режима SOC
Константы, являющиеся базовыми значениями для портов процессора.
GPIO.PA
(0),GPIO.PB
(32),GPIO.PC
(64),GPIO.PD
(96),GPIO.PE
(128),GPIO.PF
(160),GPIO.PG
(192),GPIO.PH
(224),GPIO.PL
(352).