Общая настройка и управление #
Эта группа включает функции, отвечающие за инициализацию библиотеки, выбор режимов и безопасное завершение работы.
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
pwm.start_pwm(): Запускает генерацию ШИМ-сигнала с установленным коэффициентом заполнения.pwm.stop_pwm(): Останавливает ШИМ (устанавливает коэффициент заполнения в 0).pwm.duty_cycle(percent): Изменяет коэффициент заполнения (яркость) "на лету". Принимает значение от 0 до 100.pwm.change_frequency(new_frequency): Изменяет частоту ШИМ-сигнала "на лету".pwm.pwm_polarity(): Инвертирует полярность сигнала. Если раньше 100% означало полную яркость, то после вызова этой функции 100% будет означать полное выключение.pwm.pwm_close(): Корректно останавливает ШИМ и освобождает системные ресурсы.
Вспомогательные и информационные функции #
GPIO.gpio_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.setwarnings(state)
Включает или отключает вывод предупреждений (warnings) в консоль. По умолчанию предупреждения включены (True).
Библиотека выдает предупреждение, если вы пытаетесь настроить пин, который уже был экспортирован (занят) ранее, но не был корректно очищен при завершении прошлого скрипта.
-
Параметры:
state:True(включить) илиFalse(отключить).
-
Пример:
import RepkaPi.GPIO as GPIO GPIO.setwarnings(False) # Отключить предупреждения о занятых пинах
GPIO.RPI_INFO
Словарь, содержащий информацию об определенной плате.
- Пример:
print(GPIO.RPI_INFO['TYPE'])выведет'Repka Pi 3'.
GPIO.VERSION
Константа, содержащая версию библиотеки в виде строки.
GPIO.RPI_REVISION
Константа, содержащая номер ревизии гребенки (P1 header) платы. Добавлена для совместимости со скриптами, проверяющими версию "железа".
-
Возвращает: Целое число (обычно
3или4для Repka Pi). -
Пример:
if GPIO.RPI_REVISION == 4: print("Запущено на Repka Pi 4")
Константы #
Режимы нумерации #
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).