至此,用SilicionLabs方案搭建的网关基本功能已经完成,就系统SDK实现zigbee网关的框架做一点总结认识,抛转引玉~
Zigbee网关的开发涉及工程建立、编译,执行。相关联需要了解依赖的SDK目录含义、工程配置原理,以及懂得整个软件框架运行原理,下面就关键项展开介绍。
一、网关SDK目录详情
1、存储空间
源码包默认有2.5G多
经过一番裁剪之后,SDK用到文件大约有20M。
2、目录详情
SDK目录包含了Silicon Labs开发环境需要的所有代码,在安装时同样可以配置,比如现在我们支持Zigbee,所有相关代码都会自动下载更新。
SDK目录如下:
在linux环境下使用tree命令,可以打印目录详情。tree -d 只打印目录项,不展开。
二、网关工程编译介绍
思想指导:Silicon Labs芯片的开发思想是插件化,可以手动勾选配置支持项。通过简单的勾选,生成回调函数,在工程项目文件中暴露出来,具体的函数实现在SDK中,plugin目录。
1、Callbacks使用
Callback中勾选的参数,影响callbacks.h
2、Plugins使用
Plugins中勾选的参数,影响如下
可见最终会被Z3GatewayHost工程外部回调函数调用
3、具体函数介绍
3.1、普通回调示例
simple-main.c ->emberAfMain()
Af-main-host.c ->emAfInit() // 该函数实现在znet-bookkeeping.c中
znet-bookkeeping.c -> 注册了很多回调函数,暴露在外面
void emAfInit(void)
{
emberAfMainInitCallback(); // Global
emberAfInit(); // Global
emberAfPluginGatewayInitCallback(); // Plugin: gateway
emberAfPluginNetworkCreatorSecurityInitCallback(); // Plugin: network-creator-security
}
3.2、Plugin支持MQTT示例
emberAfPluginGatewayRelayMqttInitCallback 在Z3GatewayHost_endpoint_config.h中
这个宏定义的实现在util.c的emberAfInit()
emberAfInit()函数如上述在znet-bookkeeping.c定义实现
三、网关设计
1、网关硬件结构图
Zigbee协调器通过串口与主控连接,支持硬件流控
2、网关设计原理
Zigbee协调器与Host端通过串口连接,Host端可以接入互联网,通过Socket或者Mqtt等网络协议与外界通信,达到间接控制Zigbee网络的目的。
3、软件设计模型
3.1线程化模型
Socket Server接收命令
轮训获取数据状态
3.2、数据流向