Интерфейс программирования приложений (API) библиотеки RepkaPi.GPIO SysFS: возможности и использование

Данная глава представляет собой полный справочник по 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).

47 просмотров0 комментариев

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация