SDDC 协议介绍
本章将介绍 EdgerOS 的 SDDC 协议。
SDDC(Smart Device Discovery & Control,智能设备发现与控制)是 EdgerOS 专门为 Wi-Fi 和以太网通信技术的物联网设备定义的发现与控制通信协议。使用 SDDC 协议开发的物联网设备能被 EdgerOS 自动管理,因此推荐 Wi-Fi 和以太网通信技术的物联网设备使用 SDDC 协议与 EdgerOS 通信。
SDDC 协议功能
SDDC 协议实现了以下功能:
- EdgerOS 发现设备
- EdgerOS 邀请设备加入
- 设备加入和退出 EdgerOS
- EdgerOS 维持设备 Online 状态
- EdgerOS 与设备间的双向数据通信,数据可加密,支持带有消息重传和确认的可靠通信方式
SDDC 协议流程
SDDC 协议流程如下图:
libsddc
为了方便开发者在 MCU 上使用 SDDC 协议,翼辉信息开发了 SDDC 协议的 C 语言版参考实现 libsddc,目前 libsddc 支持 MS-RTOS(翼辉开发的一款微型安全物联网操作系统,将在后面的章节介绍)和 FreeRTOS(一个著名的开源免费的小型实时操作系统)及所有符合 POSIX 标准的嵌入式操作系统(如知名的国产大型实时操作系统 SylixOS 和鸿蒙 HarmonyOS)。
数据加密支持
libsddc 通过 MbedTLS 支持数据加密通信,通过将 libsddc 工程配置头文件 libsddc/src/sddc_config.h
的配置宏SDDC_CFG_SECURITY_EN
定义为 1 来使数据加密:
#define SDDC_CFG_PORT 680U // EdgerOS 端口
#define SDDC_CFG_RECV_BUF_SIZE 1460U // 接收缓冲区大小
#define SDDC_CFG_SEND_BUF_SIZE 1460U // 发送缓冲区大小
#define SDDC_CFG_NET_IMPL "ms_esp_at_net" // MS-RTOS 网络实现名字
#define SDDC_CFG_MQUEUE_SIZE 6U // 消息队列大小
#define SDDC_CFG_RETRIES_INTERVAL 500U // 消息重传时间间隔,单位:毫秒
#define SDDC_CFG_EDGEROS_ALIVE 40U // EdgerOS 保活时间,单位:消息重传时间间隔
#define SDDC_CFG_CONNECTOR_TIMEOUT 5000U // 数据连接器接收超时时间,单位:毫秒
#define SDDC_CFG_DBG_EN 1U // 是否使能调试信息
#define SDDC_CFG_WARN_EN 1U // 是否使能警告信息
#define SDDC_CFG_ERR_EN 1U // 是否使能出错信息
#define SDDC_CFG_CRIT_EN 1U // 是否使能临界信息
#define SDDC_CFG_INFO_EN 1U // 是否使能打印信息
#define SDDC_CFG_SECURITY_EN 1U // 是否使能数据加密通信
#undef __FREERTOS__ // 使用 FreeRTOS 时定义
如果使用了数据加密,在使用前需要调用 sddc_set_token
函数设置设备的密码,如下所示:
#if SDDC_CFG_SECURITY_EN > 0
sddc_set_token(sddc, "1234567890");
#endif
由于加入 MbedTLS 会增加代码体积,某些对安全性要求低的设备(如只具备采集功能不具备控制功能的传感器),可以将数据加密关闭,从而降低对 MCU FLASH 容量的需求。
libsddc 编程
下表展示了 libsddc 相关的 API:
API | 功能 |
---|---|
sddc_create | 创建 SDDC |
sddc_set_uid | 设置唯一 ID |
sddc_set_token | 设置加解密 token (设备密码) |
sddc_set_invite_data | 设置 INVITE 数据 |
sddc_set_report_data | 设置 REPORT 数据 |
sddc_set_on_invite | 设置收到 INVITE 处理函数 |
sddc_set_on_invite_end | 设置 INVITE 完毕后处理函数 |
sddc_set_on_update | 设置收到 UPDATE 处理函数 |
sddc_set_on_edgeros_lost | 设置 EdgerOS 断开链接处理函数 |
sddc_set_on_message_lost | 设置消息 LOST 处理函数 |
sddc_set_on_message | 设置收到 MESSAGE 处理函数 |
sddc_set_on_message_ack | 设置收到 MESSAGE ACK 处理函数 |
sddc_run | 运行 SDDC |
sddc_send_message | 向指定的 EdgerOS 发送 MESSAGE |
sddc_broadcast_message | 向所有链接的 EdgerOS 发送 MESSAGE |
sddc_connector_create | 创建一个连接到 EdgerOS 的数据连接器 |
sddc_connector_destroy | 销毁一个数据连接器 |
sddc_connector_fd | 获得数据连接器的文件描述符 |
sddc_connector_put | 发送数据到数据连接器 |
sddc_connector_get | 从数据连接器接收数据 |
详细的 API 说明和编程示例请参考 libsddc API 。
Wi-Fi 智能配网
当 Wi-Fi 物联网设备需要连接到智能边缘计算机 Spirit 1 的 Wi-Fi AP(Access Point),可以使用以下两种方法:
- 在 Wi-Fi 物联网设备上预先配置好 Spirit 1 的 Wi-Fi AP 的 SSID 和密码
- 使用 EdgerOS 支持的 SmartConfig 智能配网技术
SmartConfig 智能配网技术使得 Wi-Fi 物联网设备可以免配置加入 Spirit 1 的 Wi-Fi 网络,极大简化了 Wi-Fi 物联网设备的配置过程。
SmartConfig 流程
令 Wi-Fi 物联网设备进入 SmartConfig 模式,不同的 Wi-Fi 物联网设备进入 SmartConfig 模式的操作方式可能有所差异,比如长按某个功能按键数秒或快速连击某个功能按键数次
手机通过爱智 App 进入 EdgerOS 后,点击设备 App,进入设备管理界面:
在设备管理界面,点击下方的加号图标进入扫描设备界面:
在扫描设备界面,点击高级设置:
配置 Wi-Fi 物联网设备需要连接到的 Spirit 1 的 Wi-Fi AP SSID 和密码(一般保持默认,即连接到当前手机连接到的 Spirit 1),打开启用 SmartConfig 开关,最后点击完成按钮:
启用 SmartConfig 后,扫描设备”页面右下角会出现 SmartConfig 提示:
等待 SmartConfig 完成(即 Wi-Fi 物联网设备连接到指定的 Spirit 1 的 Wi-Fi AP),一般需要 15 秒左右。
添加设备流程
Wi-Fi 物联网设备连接到 Spirit 1 的 Wi-Fi AP 后,会以 SDDC 协议连接 EdgerOS,EdgerOS 将发现新的设备:
点击添加,即可把设备加入到 EdgerOS(如果是加密设备,需要输入设备密码,如上面代码的 1234567890)。
SDDC 设备开发
我们将在《IoT Pi SDDC 设备开发》和《ESP8266 SDDC 设备开发》章节介绍如何使用 libsddc 和 SmartConfig 智能配网技术开发一个能接入到 EdgerOS 的 Wi-Fi 物联网设备。