感知层编程实验十一

实验十一:ZCL基础编程(4课时)

实验目的

  1. 加深和巩固学生对 Z-Stack 协议栈的理解和掌握。
  2. 学生通过本实验进一步理解和掌握 Z-Stack 协议栈编程方法。
  3. 提高学生在上机和编程过程中处理具体问题的能力。

实验要求

  1. 实验要求独立完成。
  2. 编写和调试过程中出现的问题需做好记录,并在报告中总结。
  3. 实验程序调试完成后,使用指定平台进行测试,由老师检查测试结果并给予相应成绩。
  4. 实验完成后,需上交实验报告。

实验内容

  1. 将 Z-Stack_Home_1.2.2a 示例中的 SampleLight 和 SampleSwitch 调试运行成功,观察实验现象。
  2. 通过 EZ-Mode 方式实现绑定,能够完成 SampleSwitch 对 SampleLight 的控制。
  3. 通过 End-Device 方式进行绑定,能够完成 SampleSwitch 对 SampleLight 的控制。
  4. 使用 Ubiqua 抓包,分析通信过程。
  5. 尝试通过串口实现绑定。

实验环境

  • 集成开发环境:IAR

EZ-Mode 绑定的实验步骤

  1. 能够成功实现组网。

  2. 使用 Ubiqua 查看组网包。

  3. 在 Switch 开关上按下 Key2,发送 Identify Request。

  4. 在 Light 上按下 Key2,正常情况下应能完成绑定。抓包显示如下:

  5. 完成绑定后,即可使用 Switch 上的 Key1 控制 Light 上的 LED1。

End-Device 方式进行绑定的实验步骤

  1. 关闭两个节点上的 ZCL_EZMODE 宏定义。

    • 因为要使用 End-Device 方式绑定,所以要把前面的 EZMODE 注释掉,这样进入到下面的 #else
  2. 重新编译两个节点的代码。

  3. 烧录后让两个节点成功组网。

  4. 按下 Switch 上的 Key2,抓包显示如下:

  5. 按下 Light 上的 Key2,抓包显示如下:

  6. 绑定成功,此时可以用 Switch 控制 Light。抓包如下:

通过串口实现绑定的实验步骤

  1. MT_UART_DEFAULT_OVERFLOW 定义为 FALSE
    • 尽量在代码的两边都定义。

    • 这个我一开始想不明白是为什么,但是我后面去查阅资料发现:只有把这个改成FALSE,Z-Tool才可以发现你的设备,具体原因如下图

  1. 打开 Z-TOOL 工具,设置相应的串口及其参数(波特率:38400)。正常情况下应该能检测到相应的设备。注意,应将协调器通过串口与 Z-TOOL 相连。

    • 源码中的 option 是没有 MT_UART_DEFAULT_BAUDRATE 的,所以 Z-Stack 代码初始波特率就已经设置为 38400。
    • 在 Z-Tool 中设置波特率的地方如下:


  • 可以看到初始值其实也是38400,所以波特率其实可以不用去修改,但是了解一下在哪里设置还是有必要的。
  1. 根据文档《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。

  1. 具体使用串口发送命令配置绑定的过程:

    • 协调器串口连接 PC 端。

    • 发送后(协调器的串口):

    抓包内容可以看到绑定成功:

实验结果验证

  • 初始协调器的 LED1 灯是亮着的。

  • 按下 Key1 发送命令后,LED1 灯熄灭。这里拍的有点不清楚,实操时可以看到效果。

Ubiqua 抓到的开关灯命令:

  • 解除绑定也同理,只需配置 ZDO_UNBIND_REQ 即可,配置过程如上。


posted @ 2024-12-06 21:40  NCHU-徐小磊  阅读(472)  评论(0)    收藏  举报