Программирование на 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()


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

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

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

Навигация

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