SDK 使用 Github 托管,可访问 Github 下载 C SDK 源码。
编程语言 | GitHub 地址 |
---|---|
C |
在开发者获取到边缘智能设备接入 SDK(C 语言版)后,首先需要针对要进行开发的平台(目前操作系统支持 macOS 和 Linux)进行 SDK 编译操作,得到相应的 SDK 编译产物(静态库或动态库)后,将其安装配置到开发者的工程中进行开发,开发者可以选择在相应集成开发环境(IDE)中进行操作。
您可以根据需要,选择编译 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 // 交叉编译配置脚本
获取依赖库。
当前 SDK 依赖开源组件库,需要先获取依赖库再进行编译。在当前路径下执行:
% git submodule update --init --recursive
编译脚本支持的命令。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 文件中指定的交叉编译工具链进行编译。 |
您可以根据需要,选择编译 SDK 为静态库或动态库。
执行以下命令,编译静态库。
% ./build.sh
可以在output_static
文件夹下查看编译静态库的结果:
output_static ├── example // 样例程序 ├── include // 头文件 └── lib // 库文件
执行以下命令,编译动态库。
% ./build.sh -d
可以在output_shared
文件夹下查看编译动态库的结果:
output_shared ├── example // 样例程序 ├── include // 头文件 └── lib // 库文件
交叉编译。
假设在 Linux 主机上使用 ARM 交叉编译工具gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu
进行 ARM64 架构的目标库编译。
编辑文件,指定交叉编译工具中gcc
和g++
编译器的位置,如下所示:
# 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++ )
为build.sh
编译脚本指定-x
参数进行编译。
静态库如下:
% ./build.sh -x
动态库如下:
% ./build.sh -d -x
可以在output_static
或output_shared
文件夹中,查看交叉编译的结果。
在编译 SDK 库时,样例程序也作为编译产物,提供在examples
文件夹下。在使用样例程序之前,请确保配置了正确的 ProductKey、ProductSecret、DeviceName 和 DeviceSecret 等内容,具体可参考边缘智能中相关产品与设备信息。其中部分样例程序功能如下:
在调用 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。 |