You need to enable JavaScript to run this app.
导航
使用说明
最近更新时间:2024.04.10 17:32:38首次发布时间:2024.03.01 15:58:11

准备工作

  • 账号准备:已注册火山引擎账号完成企业实名认证
  • 服务开通:已在边缘智能相关产品创建了实例、产品和设备,并获取了对应的实例 ID、开发配置、product_key 和 device_name 等配置。

开发环境

  • 语言版本:C99
  • 系统要求:当前边缘智能设备接入 SDK(C语言版)支持的系统为 macOS 和 Linux。

获取 SDK

SDK 使用 Github 托管,可访问 Github 下载 C SDK 源码。

编程语言

GitHub 地址

C

https://github.com/volcengine/vei-iot-sdk-c

安装 SDK

在开发者获取到边缘智能设备接入 SDK(C 语言版)后,首先需要针对要进行开发的平台(目前操作系统支持 macOS 和 Linux)进行 SDK 编译操作,得到相应的 SDK 编译产物(静态库或动态库)后,将其安装配置到开发者的工程中进行开发,开发者可以选择在相应集成开发环境(IDE)中进行操作。

SDK 编译

操作说明

您可以根据需要,选择编译 SDK 为静态库或动态库。
假设 SDK 已经通过git clone或压缩包解压到了当前路径下。其目录结构如下所示:

% tree -L 1
.
├── CMakeLists.txt         // cmake编译脚本
├── LICENSE.txt            // License文件
├── NOTICE.txt             // Notice文件
├── README.md              // 快速使用说明
├── THIRD-PARTY-LICENSES   // 第三方License文件
├── build.sh               // 编译脚本
├── cmake                  // cmake配置
├── examples               // 样例程序源文件
├── libraries              // 第三方库
├── src                    // SDK源文件
└── toolchain_dep.cmake    // 交叉编译配置脚本

编译步骤

  1. 获取依赖库。
    当前 SDK 依赖开源组件库,需要先获取依赖库再进行编译。在当前路径下执行:

    % git submodule update --init --recursive
    
  2. 编译脚本支持的命令。
    build.sh为主要的编译脚本,可使用-h查看支持的参数。

    % ./build.sh -h
    /path/to/vei-iot-sdk-c
    Here are supported parameters:
    [empty]   build static libraries with examples
    -d        build shared libraries with examples
    -h        print this help output
    -p        bypassing building 3rdparty libraries
    -x        cross-compiling with toolchain specified in toolchain_dep.cmake
    

    其中,部分参数解释如下:

    参数

    说明

    不提供参数

    编译静态库产物和样例程序。

    -d

    编译动态库产物和样例程序。

    -h

    列出脚本支持的参数说明。

    -p

    不编译第三方库。

    -x

    使用 toolchain_dep.cmake 文件中指定的交叉编译工具链进行编译。

  3. 您可以根据需要,选择编译 SDK 为静态库或动态库。

    • 执行以下命令,编译静态库。

      % ./build.sh
      

      可以在output_static文件夹下查看编译静态库的结果:

      output_static
      ├── example  // 样例程序
      ├── include  // 头文件
      └── lib      // 库文件
      
    • 执行以下命令,编译动态库。

      % ./build.sh -d
      

      可以在output_shared文件夹下查看编译动态库的结果:

      output_shared
      ├── example  // 样例程序
      ├── include  // 头文件
      └── lib      // 库文件
      
  4. 交叉编译。
    假设在 Linux 主机上使用 ARM 交叉编译工具gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu进行 ARM64 架构的目标库编译。

    1. 编辑文件,指定交叉编译工具中gccg++编译器的位置,如下所示:

      # arm64 arch
      set(CMAKE_SYSTEM_PROCESSOR arm64)
      set(CMAKE_C_COMPILER   /sample/path/to/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc )
      set(CMAKE_CXX_COMPILER /sample/path/to/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ )
      
    2. build.sh编译脚本指定-x参数进行编译。

      • 静态库如下:

        % ./build.sh -x
        
      • 动态库如下:

        % ./build.sh -d -x
        
    3. 可以在output_staticoutput_shared文件夹中,查看交叉编译的结果。

样例程序

在编译 SDK 库时,样例程序也作为编译产物,提供在examples文件夹下。在使用样例程序之前,请确保配置了正确的 ProductKey、ProductSecret、DeviceName 和 DeviceSecret 等内容,具体可参考边缘智能中相关产品与设备信息。其中部分样例程序功能如下:

  • demo_temp_humid: 模拟测试场景,温度和湿度属性的上报。
  • test_tm_event: 事件上报。
  • test_tm_property: 属性上报。
  • test_tm_property_set: 属性设置。
  • test_tm_service: 服务调用。
  • test_tm_custom_topic: 自定义 Topic。

SDK 基本配置

在调用 SDK 前,需要到边缘智能获取调用 SDK 所需的一系列参数。下面为样例程序demo_temp_humid.c文件中所需制定的初始化配置的示例代码及配置说明。

char * SAMPLE_HTTP_HOST = "<PROVIDE_CORRECT_VALUE_HERE>";      // 设备端API接入URL
char * SAMPLE_INSTANCE_ID = "<PROVIDE_CORRECT_VALUE_HERE>";    // 实例ID
char * SAMPLE_MQTT_HOST = "<PROVIDE_CORRECT_VALUE_HERE>";      // MQTT设备接入URL
char * SAMPLE_DEVICE_NAME = "<PROVIDE_CORRECT_VALUE_HERE>";    // 设备名称
char * SAMPLE_DEVICE_SECRET = "<PROVIDE_CORRECT_VALUE_HERE>";  // 设备DeviceSecret
char * SAMPLE_PRODUCT_KEY = "<PROVIDE_CORRECT_VALUE_HERE>";    // 产品ProductKey
char * SAMPLE_PRODUCT_SECRET = "<PROVIDE_CORRECT_VALUE_HERE>"; // 产品ProductSecret

这些参数配置在使用 SDK 进行 MQTT 初始化时需要提供。

头文件

下面为 SDK 主要功能相关头文件。

头文件

范围

说明

core/iot_code.h

错误码

错误码文件。

core/iot_core.h

全局上下文定义

全局上下文定义。

core/iot_mqtt.h

MQTT 链接

MQTT 链接头文件。

core/iot_http.h

HTTP 请求

HTTP。相关使用头文件。

core/iot_log.h

日志

日志接口。

log/iot_log_report.h

日志上报

日志上报功能。

thing_mode/iot_tm_api.h

物模型

类型定义。

thing_model/event.h

物模型

事件上报。

thing_mode/service.h

物模型

服务调用。

thing_mode/property.h

物模型

属性相关。

thing_mode/custom_topic.h

物模型

自定义 topic。