感知层编程实验十一
实验十一:ZCL基础编程(4课时)
实验目的
- 加深和巩固学生对 Z-Stack 协议栈的理解和掌握。
- 学生通过本实验进一步理解和掌握 Z-Stack 协议栈编程方法。
- 提高学生在上机和编程过程中处理具体问题的能力。
实验要求
- 实验要求独立完成。
- 编写和调试过程中出现的问题需做好记录,并在报告中总结。
- 实验程序调试完成后,使用指定平台进行测试,由老师检查测试结果并给予相应成绩。
- 实验完成后,需上交实验报告。
实验内容
- 将 Z-Stack_Home_1.2.2a 示例中的 SampleLight 和 SampleSwitch 调试运行成功,观察实验现象。
- 通过 EZ-Mode 方式实现绑定,能够完成 SampleSwitch 对 SampleLight 的控制。
- 通过 End-Device 方式进行绑定,能够完成 SampleSwitch 对 SampleLight 的控制。
- 使用 Ubiqua 抓包,分析通信过程。
- 尝试通过串口实现绑定。
实验环境
- 集成开发环境:IAR
EZ-Mode 绑定的实验步骤
-
能够成功实现组网。
-
使用 Ubiqua 查看组网包。
![]()
-
在 Switch 开关上按下 Key2,发送 Identify Request。
-
在 Light 上按下 Key2,正常情况下应能完成绑定。抓包显示如下:
![]()
-
完成绑定后,即可使用 Switch 上的 Key1 控制 Light 上的 LED1。
![]()
End-Device 方式进行绑定的实验步骤
-
关闭两个节点上的 ZCL_EZMODE 宏定义。
![]()
- 因为要使用 End-Device 方式绑定,所以要把前面的 EZMODE 注释掉,这样进入到下面的
#else。
![]()
- 因为要使用 End-Device 方式绑定,所以要把前面的 EZMODE 注释掉,这样进入到下面的
-
重新编译两个节点的代码。
-
烧录后让两个节点成功组网。
![]()
-
按下 Switch 上的 Key2,抓包显示如下:
![]()
-
按下 Light 上的 Key2,抓包显示如下:
![]()
-
绑定成功,此时可以用 Switch 控制 Light。抓包如下:
![]()
通过串口实现绑定的实验步骤
- 将
MT_UART_DEFAULT_OVERFLOW定义为FALSE。-
尽量在代码的两边都定义。
![]()
-
这个我一开始想不明白是为什么,但是我后面去查阅资料发现:只有把这个改成FALSE,Z-Tool才可以发现你的设备,具体原因如下图
-

-
打开 Z-TOOL 工具,设置相应的串口及其参数(波特率:38400)。正常情况下应该能检测到相应的设备。注意,应将协调器通过串口与 Z-TOOL 相连。
![]()
![]()
- 源码中的 option 是没有
MT_UART_DEFAULT_BAUDRATE的,所以 Z-Stack 代码初始波特率就已经设置为 38400。 - 在 Z-Tool 中设置波特率的地方如下:
![]()
![]()
![]()
- 源码中的 option 是没有
- 可以看到初始值其实也是38400,所以波特率其实可以不用去修改,但是了解一下在哪里设置还是有必要的。
- 根据文档《Z-Stack Monitor and Test API》中对
ZDO_BIND_REQ的定义:
![]()
-
根据文档ZDO_BIND_REQ的定义我们可以了解到:
![]()
-
DstAddr 对应的是协调器要与被绑定对象的 16 位短地址(即终端或路由器的地址),而 SrcAddress 是协调器要与被绑定对象的扩展 64 位地址。这两个地址可以通过抓包工具获取的组网信息查看。
![]()
这个是路由器的:
![]()
-
SrcEndPoint:源端点号,经过全局搜索得知其值为 8。
![]()
![]()
-
ClusterID:簇 ID,对
bindingOutCluster不断深入查找即可得知簇 ID 为 6。
![]()
![]()
![]()
-
DstAddrMode:选择第三个 64 位地址,其下的 BindAddress 对应协调器的 64 位扩展地址。只有选这个并且 BindAddress 对应的是协调器的 64 位扩展地址才能使用,具体原因尚不明确,你们可以知道了分享出来。
-
DestEndPoint:也是 8。
-
-
具体使用串口发送命令配置绑定的过程:
-
协调器串口连接 PC 端。
![]()
-
发送后(协调器的串口):
![]()
抓包内容可以看到绑定成功:
![]()
-
实验结果验证
-
初始协调器的 LED1 灯是亮着的。
![]()
-
按下 Key1 发送命令后,LED1 灯熄灭。这里拍的有点不清楚,实操时可以看到效果。
![]()
Ubiqua 抓到的开关灯命令:

- 解除绑定也同理,只需配置
ZDO_UNBIND_REQ即可,配置过程如上。
![]()
![]()
































浙公网安备 33010602011771号