Перейти к основному содержимому

RI_SDK_connector_i2c_SetBus

Информация

RI_SDK - библиотека Robo Intellect Software Development Kit
connector - название группы устройств коннекторов
i2c - название устройства i2c адаптера
SetBus - название метода установки номера шины i2c вручную.

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

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Описание
descriptorint (тип C)int64Дескриптор компонента, у которого будет открыто соединение
busint (тип C)int64Номер шины, на котором должно быть открыто соединение
nextBus*int (тип C)int64Указатель на установленный номер шины
prevBus*int (тип C)int64Указатель на предыдущий номер шины
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Примеры

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

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

# Установка номера шины 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 вручную.
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()