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

Общая настройка и управление #

Эта группа включает функции, отвечающие за инициализацию библиотеки, выбор режимов и безопасное завершение работы.

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.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

Константа, содержащая версию библиотеки в виде строки.


Константы #

Режимы нумерации #

  • 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).

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

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

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

Навигация

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