Программирование на Blockly
Документация по RoboIntellect SDK (RI SDK)
Функциональный RI SDK API исполнительных устройств

RI_SDK_connector_i2c_SetBus

!!! ИНФОРМАЦИЯ

RI_SDK - библиотека Robo Intellect Software Development Kit

connector - название группы устройств коннекторов

i2c - название устройства i2c адаптера

SetBus - название метода установки номера шины i2c вручную.

Сигнатура функции #

  • Shared object
RI_SDK_connector_i2c_SetBus(descriptor, bus, nextBus, prevBus, errorText):errorCode

Описание метода #

Позволяет программисту в коде своей программы определить номер шины, на которой в дальнейшем будет открыто соединение с компонентом при вызове функции связывания RI_SDK_LinkPWMToController.

Если не вызывать эту функцию, то номер шины будет определён автоматически, причем для Linux на архитектуре aarch64 номер шины всегда будет равен 1.

Функцию RI_SDK_connector_i2c_SetBus необходимо вызывать ДО связывания (вызов RI_SDK_LinkPWMToController), так как если на заданной шине уже открыто соединение, RI_SDK_connector_i2c_SetBus вернёт ошибку.

Если номер шины необходимо изменить, нужно сперва закрыть все открытые с помощью заданного I2C адаптера соединения с помощью функции RI_SDK_connector_i2c_CloseAll или функции RI_SDK_connector_i2c_Close, вызванной для каждого открытого соединения.

Внимание! Вызов RI_SDK_connector_i2c_SetBus определяет номер шины только на ОС Linux. На ОС Windows номер шины определяется автоматически независимо от результатов выполнения RI_SDK_connector_i2c_SetBus.

Ошибки, возвращаемые RI SDK при вызове функции RI_SDK_connector_i2c_SetBus #

Код ошибки Описание ошибки Рекомендуемые действия
211011 Значение шины отрицательное. Измените номер шины на положительное число или 0.
211012 Существуют открытые соединения Закройте перед вызовом функции все открытые соединения (RI_SDK_connector_i2c_Close или RI_SDK_connector_i2c_CloseAll).

Параметры и возвращаемые значения #

Параметр Тип для Shared object Тип для Golang gRPC Описание
descriptor int (тип C) int64 Дескриптор компонента, у которого будет открыто соединение
bus int (тип C) int64 Номер шины, на котором должно быть открыто соединение
nextBus *int (тип C) int64 Указатель на установленный номер шины
prevBus *int (тип C) int64 Указатель на предыдущий номер шины
errorText char[1000] (тип C) string Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCode int (тип C) int64 Код ошибки

Примеры #

Пример №1 - Определение номера шины I2C вручную. #

Выполняется определение номера шины вручную, затем вызывается функция мерцания подключенного на заданном порту светодиода.

  • Python
# Установка номера шины i2c вручную.
nextBus = c_int() # Установеленный номер шины.
prevBus = c_int() # Предыдущий номер шины.
errCode = lib.RI_SDK_connector_i2c_SetBus(i2c, 11, nextBus, prevBus, errTextC)
# Обработка ошибки.
if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)
print("Задан номер шины: ", nextBus, "Предыдущий номер шины: ", prevBus)

Полный текст примера
  • Python

# Мерцание светодиода после установки номера шины i2c вручную.
import sys
from ctypes import *

# Подключаем внешнюю библиотеку для работы с SDK
lib = cdll.LoadLibrary("./librisdk.so")
# Указываем типы аргументов для функций библиотеки RI_SDK
lib.RI_SDK_InitSDK.argtypes = [c_int, c_char_p]
lib.RI_SDK_CreateModelComponent.argtypes = [c_char_p, c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_LinkPWMToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_LinkLedToController.argtypes = [c_int, c_int, c_int, c_int, c_int, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_connector_i2c_SetBus.argtypes = [c_int, c_int, POINTER(c_int), POINTER(c_int), c_char_p]
lib.RI_SDK_exec_RGB_LED_FlashingWithFrequency.argtypes = [c_int, c_int, c_int, c_int, c_int, c_int, c_bool, c_char_p]

def main():
    errTextC = create_string_buffer(1000)  # Текст ошибки. C type: char*
    i2c = c_int()
    pwm = c_int()
    led = c_int()

    # Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = lib.RI_SDK_InitSDK(3, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Создание компонента i2c адаптера модели ch341
    errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "i2c_adapter".encode(), "ch341".encode(), i2c, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Создание компонента ШИМ модели pca9685
    errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "pwm".encode(), "pca9685".encode(), pwm, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Создание компонента светодиода модели ky016
    errCode = lib.RI_SDK_CreateModelComponent("executor".encode(), "led".encode(), "ky016".encode(), led, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)
    
    # Установка номера шины i2c вручную.
    nextBus = c_int() # Установеленный номер шины.
    prevBus = c_int() # Предыдущий номер шины.
    errCode = lib.RI_SDK_connector_i2c_SetBus(i2c, 11, nextBus, prevBus, errTextC)
    # Обработка ошибки.
    if errCode != 0:
            print(errCode, errTextC.raw.decode())
            sys.exit(2)
    print("Задан номер шины: ", nextBus, "Предыдущий номер шины: ", prevBus)

    # Связывание i2c с ШИМ
    errCode = lib.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Связывание ШИМ со светодиодом
    errCode = lib.RI_SDK_LinkLedToController(led, pwm, 15, 14, 13, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    # Мигание светодиода зеленым цветом с частотой 5 мигание в секунду.
    # Количество миганий - 2. Яркость красного цвета - 255. Яркость остальных цветов - 0.
    errCode = lib.RI_SDK_exec_RGB_LED_FlashingWithFrequency(led, 255, 0, 0, 5, 2, False, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

        # Удаление библиотеки со всеми компонентами
    errCode = lib.RI_SDK_DestroySDK(True, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("Success")

main()


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

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

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы
Программирование на Blockly
Документация по RoboIntellect SDK (RI SDK)
Функциональный RI SDK API исполнительных устройств

Навигация

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