Skip to content

第9章 实验一:点对点 LED 控制 ​

本章目标

用 ns-3 仿真跑通「协调器 → 终端 → LED 点亮」全链路,理解端点寻址与数据投递。配套交互页有完整动画。

9.1 实验拓扑 ​

[协调器/控制器]              [终端1/LED 执行器]
  短地址 0x0000              短地址 42:24
  端点 8 (控制应用)  ────→  端点 3 (LED 应用)
              APS: 簇 0x0006 On/Off | Profile 0x0104

9.2 完整运行日志(真实) ​

+1s         [协调器] 建网成功 PAN=0x.... 信道=11
+2.5s       [终端1] 入网成功 短地址=42:24 父=协调器
+6s         [协调器/控制器] 发送 LED 命令: 0x1 (seq 1) -> 终端 (短地址 42:24)
+6.00144s   [终端1/LED 执行器] 收到命令
            源端点 8 -> 目的端点 3 | 帧长 2
            [应用层解析] 命令码=0x1 序号=1
            [执行动作] 终端 1 拉高 GPIO -> LED 点亮成功 (LED=ON)
+8s         [协调器/控制器] 发送 LED 命令: 0x0 (seq 2) -> 终端 (短地址 42:24)
+8.00144s   [终端1/LED 执行器] 收到命令
            [应用层解析] 命令码=0x0 序号=2
            [执行动作] 终端 1 拉低 GPIO -> LED 熄灭成功 (LED=OFF)

9.3 命令协议(应用层自定义) ​

字节含义值
命令码0x1=点亮,0x0=熄灭01 / 00
序号每次递增,防重放01 / 02

看这里

帧长 2 = 命令码 1 字节 + 序号 1 字节。应用层协议是你自己定的——这就是「应用层开发」的含义。

9.4 源码位置与关键函数 ​

源码:led-control/zigbee-led-control.cc(本栏目配套工程)

// 控制器侧发送
SetDeviceType(COORDINATOR);
req.m_srcEndPoint = 8;  req.m_dstEndPoint = 3;
req.m_clusterId = 0x0006;  req.m_profileId = 0x0104;
payload[0]=0x01; payload[1]=seq++;   // 命令码+序号
ZigbeeAps::ApsdeDataRequest(...)

// 终端侧接收(indication 回调里)
ZigbeeApsdeDataIndicationParams ind = ...;
if (ind.m_srcEndpoint == 8 && ind.m_dstEndPoint == 3) {
    if (payload[0] == 0x01) LED_ON(); else LED_OFF();
}

9.5 与 CC2530 真机的第一步对应 ​

ns-3(本实验)CC2530 + Z-Stack
ApsdeDataRequestAF_DataRequest
端点 8/3endPointDesc_t 注册的端点
ApsdeDataIndication 回调afIncomingData / zclIncomingMsg
LED_ON()/LED_OFF()HalLedSet(HAL_LED_1, HAL_LED_MODE_ON)

逐行迁移表见第 14 章。

打开交互实验:实验一 · 点对点 LED 控制(动画演示)

aioteer · 物联网专业课程群

💬AI 伴学配置