C SDK
C SDK 适合网关、嵌入式 Linux 和需要直接调用串口、GPIO、驱动库或 C/C++ 模块的设备程序。生成包已经处理 MQTT 连接、命令响应和数据上报,主要在 src/main.c 中接入真实硬件逻辑。
| 先看文件 | 用途 |
|---|---|
src/main.c | 编写命令处理、硬件调用和数据上报 |
CMakeLists.txt / README.md | 查看依赖、构建选项和平台说明 |
.env、runtime-model.json 和 device-spec.json 的用途与修改规则见 SDK 工程文件。
当前接入方式的工程
本页示例用于由 Device Agent 直接管理的设备。不同平台的扩展回调可能不同,使用包内 README 指定的接口。平台支持可写状态时,除命令处理外,还需实现状态更新回调,并在硬件应用成功后上报实际值。
构建和启动
- 下载并解压代码包,进入代码包根目录。
- 检查生成的
.env,确认连接地址和设备身份;文件缺失时才从.env.example创建并补齐配置。 - 安装依赖并使用 CMake 完成首次构建。
- 在
src/main.c中接入真实硬件逻辑,然后重新构建。 - 启动
build/device,回到设备智能体工作区验证。
最小构建和启动命令如下:
test -f .env || cp .env.example .env
set -a && source .env && set +a
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/device构建需要 pkg-config,MQTT 客户端依赖 libmosquitto。CMake 会优先使用系统中的 cJSON,未找到时自动获取。语音功能依赖 libwebsockets 和 OpenSSL,视觉功能依赖 libcurl;不需要时可以关闭对应模块:
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DDA_BUILD_VOICE=OFF \
-DDA_BUILD_VISION=OFFC 程序不会自行读取 .env,运行前需要像上面的命令一样将其导出到当前环境。初始状态由模型中有效的默认值、枚举值和类型约束生成,接入硬件后应改为真实状态。
实现命令、状态和事件
本例工程的 handle_command() 先校验命令与参数,再处理视觉动作或设备动作,并关联响应与状态上报。在校验通过后接入真实硬件调用,使用实际读数替换模拟状态映射;硬件失败时返回错误,不要继续上报成功状态。补充硬件逻辑时,保留处理函数的模型校验与请求关联。
三类数据的用途不同:
| 类型 | 何时使用 | C 接口 |
|---|---|---|
| 状态 | 上线或状态快照发生变化 | da_client_send_status() |
| 遥测 | 上报温度、开关等当前数据 | da_client_send_telemetry() |
| 事件 | 上报告警、按键等独立事件 | da_client_send_event() |
客户端连接成功后调用这些接口。本例使用定义设备智能体中的 current_temperature 属性和 over_temperature 事件:
da_client_send_status(client, "online", "{\"current_temperature\":26.5}");
da_client_send_telemetry(client, "state", "{\"current_temperature\":22.5}");
da_client_send_event(client, "over_temperature", "alert", "{\"current_temperature\":32.5}");接入语音和视觉
语音
include/device_agent/voice_client.h 和 src/voice_client.c 提供设备端语音客户端,examples/voice_chat.c 是可直接运行的示例。示例包含生成时写入的默认地址;如需覆盖,运行前导出 VOICE_WS_URL。真实设备需要把麦克风采集、扬声器播放和回调连接到客户端:
da_voice_options_t opts = {
.ws_url = "ws://<gateway>:3001/ws/voice",
.device_id = "device-001",
.product_id = "agent-001",
};
da_voice_client_t *voice = da_voice_client_new(&opts, &callbacks);
da_voice_client_connect(voice);
da_voice_client_start_listening(voice, "manual");
da_voice_client_send_audio(voice, pcm_samples, sample_count);
da_voice_client_stop_listening(voice);视觉
include/device_agent/vision_client.h 和 src/vision_client.c 提供生成包预置的单次拍照识别流程,具体触发命令见生成包 README。在 src/main.c 的 capture_local_vision_image() 中接入摄像头、截图或图像文件,并通过 VOICE_CHAT_HOST 指定服务地址。生成代码会把识别结果作为命令响应返回。
完整的语音和视觉配置见 语音交互 和 摄像头与视觉识别。启动后,按 SDK 接入 中的检查项验证设备上线、状态、命令和事件。