Skip to content

TTlook111/QianRuShi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

智能门禁访客管理系统 — 使用与实验开展指南

项目名称: QianRuShi (千如诗) 智能门禁访客管理系统 核心技术: ZigBee (CC2530 + Z-Stack 2.4.0) + 智云平台 + Python/PyQt 上位机 文档版本: v1.0 最后更新: 2026-06-11


目录

  1. 项目概述
  2. 系统架构与节点分工
  3. 硬件准备与接线
  4. 开发环境搭建
  5. 工程编译与程序烧录
  6. 智云平台配置与接入
  7. 实验一:基础通信与数据上报
  8. 实验二:传感器数据采集与验证
  9. 实验三:远程控制与执行器联动
  10. 实验四:安防告警与联动测试
  11. 实验五:综合场景与访客管理演示
  12. 常见问题排查 (FAQ)
  13. 命令速查表

1. 项目概述

本项目是一个基于 ZigBee 无线通信的智能门禁访客管理系统,实现以下功能:

功能模块 说明
环境监测 实时采集温湿度、光照等环境数据
安防检测 PIR人体红外、门磁、震动/触摸、火焰、燃气等多传感器融合
远程控制 通过智云平台远程开门、控制 RGB 灯、蜂鸣器等
告警联动 夜间入侵自动触发声光告警并上报平台
数据可视化 Python/PyQt 上位机显示实时数据与事件日志

1.1 核心数据流

┌──────────────────────────────────────────────────────────────────────┐
│  上行:传感器数据 → 终端节点 → ZigBee → 协调器 → 串口 → 智云平台 → 上位机  │
│  下行:控制命令 → 上位机 → 智云平台 → 串口 → 协调器 → ZigBee → 终端节点      │
└──────────────────────────────────────────────────────────────────────┘

1.2 项目文件结构速查

QianRuShi-main/
├── README.md                           # 项目说明
├── 使用与实验开展指南.md                # 👈 本文档
├── 通信接口说明.md                      # 通信协议与字段定义
├── 智云平台测试命令手册.md              # 智云命令速查
├── 接线说明_安防传感器节点.md           # Sensor-C 硬件接线
├── 测试报告_安防传感器.md               # 驱动测试报告
├── D部分通信协议与ZigBee任务说明.md     # 通信层任务说明
├── D部分通信协议与ZigBee完成说明.md     # 通信层完成说明
└── zstack-2.4.0-1.4.0x/
    ├── Projects/zstack/Samples/
    │   ├── common/                      # 公共协议层 (ZXBee)
    │   │   ├── zxbee.h/c               # 协议核心(帧构建/解析/校验)
    │   │   ├── zxbee-inf.h/c           # ZigBee 收发接口
    │   │   └── ...
    │   ├── sensor-a/                    # 环境采集节点 (601, addr=0x0001)
    │   │   ├── CC2530DB/sensor-a.eww   # IAR 工程
    │   │   └── Source/
    │   │       ├── sensor.c             # 主程序 (temp/humi/lux)
    │   │       ├── htu21d.c/h          # 温湿度传感器 (I²C)
    │   │       ├── bh1750.c/h          # 光照传感器 (I²C)
    │   │       └── ...
    │   ├── sensor-b/                    # 控制执行节点 (602, addr=0x0002)
    │   │   ├── CC2530DB/sensor-b.eww   # IAR 工程
    │   │   └── Source/
    │   │       ├── sensor.c             # 主程序 (unlock/buzz/rgb/alert)
    │   │       ├── rgb.c/h              # RGB 灯驱动
    │   │       ├── beep.c/h             # 蜂鸣器驱动
    │   │       └── relay.c/h            # 继电器/门锁驱动
    │   ├── sensor-c/                    # 安防检测节点 (603, addr=0x0003)
    │   │   ├── CC2530DB/sensor-c.eww   # IAR 工程
    │   │   └── Source/
    │   │       ├── sensor.c             # 主程序 (pir/tch/door/alert...)
    │   │       ├── infrared.c/h         # PIR 人体红外
    │   │       ├── hall.c/h             # 霍尔门磁
    │   │       ├── vibration.c/h        # 震动
    │   │       ├── Touch.c/h            # 触摸按键
    │   │       ├── Flame.c/h            # 火焰
    │   │       ├── gpio_int.c/h         # GPIO 中断配置
    │   │       ├── security_logic.c/h   # 安防逻辑(徘徊检测/夜间判断)
    │   │       └── ...
    │   └── Coordinator/                  # 协调器工程 (000, addr=0x0000)
    │       └── CC2530DB/Coordinator.eww
    └── ...

2. 系统架构与节点分工

2.1 节点概览

节点 工程名 节点地址 名称 主要功能 上报字段
协调器 Coordinator 0x0000 000 网络管理、数据转发、串口桥接
环境采集 sensor-a 0x0001 601 温湿度 + 光照采集 temp, humi, lux
控制执行 sensor-b 0x0002 602 RGB灯 + 蜂鸣器 + 继电器/门锁 unlock, buzz, rgb, alert
安防检测 sensor-c 0x0003 603 PIR + 门磁 + 震动 + 火焰 + 燃气 + 光栅 pir, tch, door, flame, gas, grating, alert, stay, night

2.2 网络拓扑

          ┌─────────────────┐
          │   协调器 (000)   │ ◄── 串口 ──► 智云平台 / 上位机
          └────┬──┬──┬──────┘
               │  │  │           ZigBee 无线网络 (2.4GHz)
      ┌────────┘  │  └─────────────────┐
      ▼           ▼                     ▼
┌──────────┐ ┌──────────┐         ┌──────────┐
│ sensor-a │ │ sensor-b │         │ sensor-c │
│  601     │ │  602     │         │  603     │
│ 环境采集 │ │ 控制执行 │         │ 安防检测 │
└──────────┘ └──────────┘         └──────────┘

2.3 ZXBee 通信协议

帧格式

┌──────┬──────┬──────┬──────┬──────┬────────────┬──────┬──────┐
│ SOF  │ DST  │ SRC  │ CMD  │ LEN  │   PAYLOAD  │ CHK  │ EOF  │
│ 1B   │ 2B   │ 2B   │ 1B   │ 1B   │    N B     │ 1B   │ 1B   │
└──────┴──────┴──────┴──────┴──────┴────────────┴──────┴──────┘
  0xAA  (大端) (大端)              JSON内容     累加和   0x55
  • SOF (Start of Frame): 固定 0xAA,帧起始标志
  • DST (Destination): 目的节点地址 (2 字节,大端),0xFFFF 为广播
  • SRC (Source): 源节点地址 (2 字节,大端)
  • CMD (Command): 命令字
  • LEN (Length): Payload 字节数
  • PAYLOAD: JSON 格式的业务数据,如 {"temp":27.0,"humi":65.0}
  • CHK (Checksum): 从 SOF 到 PAYLOAD 末尾的字节累加和 (仅取低 8 位)
  • EOF (End of Frame): 固定 0x55,帧结束标志

命令字定义

CMD 值 名称 说明
0x01 REPORT 数据/状态上报
0x02 ALARM 告警事件上报
0x03 WRITE 远程控制命令(下发)
0x06 RESET 复位/解除告警

典型数据帧示例

① sensor-a 上报温度 27℃、湿度 65%、光照 200lux

SOF  DST        SRC        CMD  LEN  PAYLOAD                                        CHK   EOF
AA   00 00      00 01      01   17   7B 22 74 65 6D 70 22 3A 32 37 2E 30 2C 22 68 75 6D 69 22 3A 36 35 2E 30 7D   ??    55
     └─ 目的=协调器(0x0000)  └─ 源=sensor-a(0x0001) └─ 上报命令     └─ {"temp":27.0,"humi":65.0}

② 下发到 sensor-b 的远程开门命令

AA   00 02      00 00      03   0F   7B 22 75 6E 6C 6F 63 6B 22 3A 31 7D              ??    55
     └─ 目的=sensor-b(0x0002)  └─ 源=协调器(0x0000)  └─ 写入命令     └─ {"unlock":1}

3. 硬件准备与接线

3.1 物料清单 (BOM)

类别 器件 型号 数量 备注
主控 CC2530 开发板 CC2530F256 最小系统板 4 1个协调器 + 3个终端
烧录 调试器 CC Debugger / SmartRF04EB 1 用于 IAR 烧录
串口 USB 转串口模块 CH340G / CP2102 1 协调器连智云
电源 USB 电源适配器 5V/1A (或 3.3V) 4 每个节点一个
传感器 温湿度模块 HTU21D (I²C) 1 sensor-a
传感器 光照模块 BH1750 (I²C) 1 sensor-a
传感器 人体红外模块 HC-SR501 1 sensor-c
传感器 霍尔门磁模块 KY-003 / AH3144 1 sensor-c + 1块永磁铁
传感器 震动模块 SW-420 / KY-002 1 sensor-c
传感器 触摸按键模块 TTP223 1 sensor-c (Mode=2)
传感器 火焰模块 1 sensor-c
传感器 可燃气体模块 MQ-x 系列 1 sensor-c
传感器 红外光栅模块 1 sensor-c (可选)
执行器 RGB LED 模块 共阴/共阳 三色 LED 1 sensor-b
执行器 蜂鸣器模块 有源/无源蜂鸣器 1 sensor-b
执行器 继电器模块 2路继电器 (5V) 1 sensor-b (门锁)
线材 杜邦线 公对公 / 公对母 若干 接线用

3.2 CC2530 引脚分配总表

3.2.1 sensor-a (环境采集) — I²C 总线

CC2530 引脚    传感器/模块        信号方向
──────────────────────────────────────────
P1.7 (SDA) ──► HTU21D / BH1750   ◄──► I²C 数据线 (双向)
P1.6 (SCL) ──► HTU21D / BH1750   ──► I²C 时钟线 (CC2530输出)
VCC 3.3V   ──► 所有模块           ──  3.3V 供电
GND        ──► 所有模块           ──  共地

3.2.2 sensor-b (控制执行) — 数字输出

CC2530 引脚    执行器              信号方向    功能
──────────────────────────────────────────────────
P0.0 ───────► RGB_R (红色)        ◄──         GPIO 推挽输出
P0.1 ───────► RGB_G (绿色)        ◄──         GPIO 推挽输出
P0.2 ───────► RGB_B (蓝色)        ◄──         GPIO 推挽输出
P0.3 ───────► 蜂鸣器              ◄──         GPIO (低电平触发/高电平触发,看模块)
P0.6 ───────► 继电器1 (门锁)       ◄──         GPIO 推挽输出
P0.7 ───────► 继电器2 (报警灯)      ◄──         GPIO 推挽输出 (可选)
VCC 3.3V/5V ─► 所有模块           ──         供电 (继电器注意 5V 供电)
GND        ──► 所有模块           ──         共地

⚠️ 注意: RGB 灯和蜂鸣器可能需要接 5V 电源以获得足够亮度/响度,但 CC2530 的 GPIO 是 3.3V 电平。继电器模块通常是 5V 供电,3.3V 控制信号可以触发。

3.2.3 sensor-c (安防检测) — 数字输入 + ADC

CC2530 引脚    传感器              信号方向    说明
──────────────────────────────────────────────────
P0.0 ──────── PIR 人体红外 / 触摸  ◄──         *Mode=1: PIR;Mode=2: 触摸*
P0.1 ──────── 震动模块             ◄──         低电平触发
P0.2 ──────── 霍尔门磁             ◄──         有磁场=低,无磁场=高
P0.3 ──────── 火焰传感器           ◄──         有火焰=低
P0.4 (AIN4) ─ 可燃气体 (ADC)       ◄──         模拟量输入 (0~3.3V)
P0.5 ──────── 光栅模块             ◄──         有人=低
P0.6 ──────── 继电器1              ◄──►        本地告警输出 (可选)
P0.7 ──────── 继电器2              ◄──►        本地告警输出 (可选)
VCC 3.3V/5V ─ 所有模块             ──          供电 (传感器一般 3.3V)
GND        ── 所有模块             ──          共地

⚠️ P0.0 复用说明: P0.0 在 Mode=1 时接 PIR 人体红外(用于安防监测),在 Mode=2 时接触摸按键(用于门铃)。同一时刻只能接一个传感器。

3.3 电源与接地注意事项

要点 说明
CC2530 供电 3.3V 直流,绝对不能超过 3.9V
传感器供电 大部分兼容 3.3V~5V,建议统一 3.3V
继电器供电 推荐 5V 单独供电(继电器线圈电流较大)
共地 所有模块的 GND 必须连在一起,否则电平检测出错
上电顺序 先接传感器 → 再接 CC2530 → 最后上电
电流估算 每个节点 ~30mA(待机)~50mA(发送中)

3.4 接线检查清单(必做)

  • 电源电压:万用表测 CC2530 的 VCC-GND = 3.30V ± 0.15V
  • 所有 GND 共地:万用表测 CC2530 GND ↔ 传感器模块 GND 导通(<1Ω)
  • I²C 连线(sensor-a):SDA/SCL 无虚焊、无短路
  • 传感器信号线(sensor-c):无虚焊、无相邻引脚短路
  • 执行器控制线(sensor-b):RGB/蜂鸣器/继电器信号线正确连接
  • 无短路:上电前测 VCC-GND 之间电阻 > 1kΩ(不应为 0Ω)
  • 天线:CC2530 板载天线已安装或外接天线已连接

4. 开发环境搭建

4.1 软件安装清单

软件 版本要求 用途 来源
IAR Embedded Workbench for 8051 8.10.4 或更高 编译 CC2530 工程 IAR 官网(需 License)/ 教育版
SmartRF Flash Programmer 1.12.8 独立烧录 hex 文件 TI 官网
CC Debugger 驱动 WinUSB 驱动 调试器 USB 驱动 安装 Flash Programmer 时自动安装
智云平台上位机 最新版 数据可视化与远程控制 智云官网 / 课程提供
串口调试工具 任意 (SSCOM, PuTTY, 串口助手) 调试 ZXBee 原始帧 免费
Python 3.7+ (可选)自定义上位机开发 python.org
Packet Sniffer TI 版 (可选)ZigBee 抓包分析 TI 官网 + CC2531 USB Dongle

4.2 IAR 安装与配置

① 安装 IAR EW8051

  1. 运行安装包,一路 Next,选择安装路径(建议 C:\IAR
  2. 首次启动时输入 License Key 或选择评估版(32KB 代码限制,本项目够用)
  3. 确保安装包含 8051 工具链

② 安装 CC Debugger 驱动

  1. 将 CC Debugger 通过 USB 连接电脑
  2. Windows 提示找到新硬件 → 自动安装驱动(或指定到 IAR 安装目录的 drivers 文件夹)
  3. 设备管理器中应显示 Cebal Controlled Devices → CC Debugger

③ 安装 SmartRF Flash Programmer

  1. 运行安装包,默认安装即可
  2. 用于独立烧录 hex 文件(不打开 IAR 也能烧)

4.3 智云平台环境

  1. 访问智云平台官网(或课程提供的私有平台),注册账号
  2. 创建一个新项目,获取项目 ID 和设备密钥
  3. 下载智云平台上位机软件(Win 版)
  4. 配置串口参数:波特率 38400 / 115200,数据位 8,停止位 1,无校验

5. 工程编译与程序烧录

5.1 打开 IAR 工程

共需要编译 4 个工程:协调器 + sensor-a + sensor-b + sensor-c

以 sensor-a 为例(其它工程步骤相同):

1. 打开 IAR Embedded Workbench
2. File → Open → Workspace
3. 选择路径:zstack-2.4.0-1.4.0x\Projects\zstack\Samples\sensor-a\CC2530DB\sensor-a.eww
4. Workspace 窗口中确认目标为 CC2530DB
5. Project → Rebuild All (或按 F7)
6. 等待编译完成,底部 Build 窗口无 Error 即可
7. 编译输出:sensor-a\CC2530DB\Exe\sensor-a.hex

📌 其它三个工程的路径:

  • 协调器:Coordinator\CC2530DB\Coordinator.eww
  • sensor-b:sensor-b\CC2530DB\sensor-b.eww
  • sensor-c:sensor-c\CC2530DB\sensor-c.eww

5.2 通过 IAR 直接烧录(推荐调试阶段)

1. 将 CC Debugger 连接到 CC2530 开发板的 Debug 接口
2. 将 CC Debugger 通过 USB 连接电脑
3. CC Debugger 上的 LED 应变为 **绿色**(红灯表示未识别到目标板)
4. IAR 中:Project → Download and Debug (或按 Ctrl+D)
5. 等待烧录完成,程序自动进入调试模式
6. 按 F5 全速运行 → 观察节点是否入网(绿灯常亮)
7. 完成后点击 Stop Debugging (Shift+F5),程序会继续在板上运行

5.3 通过 SmartRF Flash Programmer 独立烧录(推荐批量/演示)

1. 连接 CC Debugger → CC2530 板 → 电脑
2. 打开 SmartRF Flash Programmer
3. 左侧选择目标板 (System-on-Chip → CC2530)
4. Flash image 选择编译好的 .hex 文件
5. 勾选 Erase + Program + Verify
6. 点击 "Perform Actions"
7. 烧录完成后移除调试器,重新上电即可运行

5.4 烧录顺序(关键!)

① 先烧录并上电协调器 → 建立 ZigBee 网络 ② 依次烧录并上电三个终端节点 → 自动寻找并加入协调器的网络

💡 为什么要先上协调器?因为 ZigBee 网络由协调器创建,终端节点上电后会主动扫描信道寻找并加入网络。如果协调器未上电,终端节点会不断重连直到超时。

5.5 观察入网状态

CC2530 开发板上通常有 2 个 LED:

LED 状态 含义
LED1 (红) 闪烁 节点正在尝试入网
LED1 (红) 常亮 入网成功,已连接协调器
LED2 (绿) 闪烁 正在发送/接收数据
LED2 (绿) 常亮 已连接且空闲

具体 LED 行为取决于工程配置,以实际代码为准。


6. 智云平台配置与接入

6.1 物理连接

┌──────────────┐        ┌──────────────┐        ┌──────────────┐
│ 协调器 CC2530 │  UART  │ USB 转串口模块 │  USB   │ 电脑(智云平台)│
│   (节点 000)  │ ◄────► │  (CH340G 等)   │ ◄────► │  上位机软件     │
└──────────────┘  38400  └──────────────┘        └──────────────┘
         │
         │ ZigBee 无线
         ▼
   [其它终端节点]
  • 协调器 UART 引脚:P0.2 (RX), P0.3 (TX)(不同板子可能不同,以原理图为准)
  • 波特率:38400 bps(或 115200,以协调器工程配置为准)
  • 数据格式:8-N-1(8 数据位,1 停止位,无校验)

6.2 智云平台操作

① 登录与创建设备

  1. 打开智云平台上位机软件,登录账号
  2. 进入"设备管理" → "添加设备"
  3. 选择设备类型为 "ZigBee / CC2530"
  4. 选择 COM 口(USB 转串口对应的端口)
  5. 设置波特率 38400,点击"连接"
  6. 软件应识别到协调器,显示设备在线

② 添加数据点 (Data Point)

按以下字段配置数据点(字段名必须与代码中的一致):

字段 类型 来源节点 说明
temp 数值 (float) sensor-a 温度 (℃)
humi 数值 (float) sensor-a 湿度 (%)
lux 数值 (int) sensor-a 光照 (lux)
pir 布尔/开关 sensor-c 人体红外 (0=无人, 1=有人)
door 布尔/开关 sensor-c 门磁 (0=关, 1=开)
tch 布尔/开关 sensor-c 触摸/门铃 (0=无, 1=按下)
flame 布尔/开关 sensor-c 火焰 (0=无, 1=有)
gas 数值 (int) sensor-c 可燃气体浓度
grating 布尔/开关 sensor-c 光栅 (0=无, 1=有)
alert 数值 (int) sensor-c / sensor-b 告警等级 (0/1/2)
stay 数值 (int) sensor-c 徘徊时间 (秒)
night 布尔/开关 sensor-c 夜间模式 (0=白天, 1=夜间)
unlock 布尔/开关 sensor-b 门锁 (0=锁, 1=开)
buzz 数值 (int) sensor-b 蜂鸣器 (0=关, 500=短响, 1=长响)
rgb 数组/字符串 sensor-b RGB 颜色 [R,G,B]
reset 布尔/开关 sensor-b / sensor-c 解除告警 (1=复位)

③ 测试连接

  • 观察智云平台是否收到 sensor-a 的周期性上报(默认 30 秒一次)
  • 观察智云平台是否显示节点在线状态

7. 实验一:基础通信与数据上报

7.1 实验目的

  • 验证 ZigBee 网络是否正常建立
  • 验证协调器与终端节点的通信链路
  • 验证 ZXBee 协议帧是否正确构建与解析
  • 验证数据能否正确上传至智云平台

7.2 实验器材

器材 数量
CC2530 协调器节点 1
CC2530 sensor-a 节点 1
USB 转串口模块 1
CC Debugger 1
万用表 1
电脑(已安装智云平台) 1

7.3 实验步骤

步骤 1:硬件连接与上电

1. 连接协调器 CC2530 → USB 转串口 → 电脑
2. 协调器上电,观察 LED(约 2 秒后红灯常亮 = 网络建立)
3. sensor-a 节点上电(HTU21D + BH1750 已接线)
4. 观察 sensor-a 的 LED,红灯常亮 = 入网成功

步骤 2:在智云平台观察周期上报

1. 打开智云平台,确认设备在线
2. 查看"实时数据"窗口
3. 每 30 秒(默认)应出现一次 sensor-a 的数据
4. 预期数据格式:{"temp":27.0,"humi":65.0,"lux":200}
5. 用手捂住 HTU21D,观察 temp 和 humi 数值是否变化
6. 用手电筒照射 BH1750,观察 lux 数值是否增大

步骤 3:智云平台查询命令测试

在智云平台的"命令发送"或"调试"窗口输入:

发送目标 命令 预期响应
sensor-a (601 / 0x0001) {temp=?} {temp:XX.X}
sensor-a (601 / 0x0001) {humi=?} {humi:XX.X}
sensor-a (601 / 0x0001) {lux=?} {lux:XXX}
sensor-a (601 / 0x0001) {V0=?} {V0:30} (当前上报周期秒数)

步骤 4:修改上报周期测试

1. 发送 {V0=10} 到 sensor-a
   → 预期:上报周期改为 10 秒
2. 观察实时数据窗口
   → 预期:数据刷新频率提高到约 10 秒一次
3. 发送 {V0=30} 恢复默认

7.4 实验记录模板

测试项 预期结果 实测结果 通过/失败
协调器上电建网 2 秒内红灯常亮
sensor-a 入网 上电 5 秒内红灯常亮
周期上报频率 约 30 秒一次
temp 数值合理性 15~35℃ (室内)
humi 数值合理性 30~80% (室内)
lux 数值变化 手遮挡/手电筒照射时明显变化
temp 查询响应 1 秒内返回温度值
V0 修改生效 改为 10 后,刷新频率明显提高

7.5 思考题

  1. 如果 sensor-a 上电后 10 秒仍未入网,可能的原因有哪些?(至少列举 3 个)
  2. 为什么上报周期 V0 不能设置为 1 秒?(从 ZigBee 网络拥堵、功耗、智云平台角度分析)
  3. 温度数据用 float 类型传输,与用 int 类型(如乘以 10)相比,各有什么优缺点?

8. 实验二:传感器数据采集与验证

8.1 实验目的

  • 验证 sensor-c 各安防传感器的检测功能
  • 验证 GPIO 中断模式的实时性
  • 验证事件驱动的即时上报 vs 周期上报的差异
  • 验证多传感器并发检测不互相干扰

8.2 实验器材

器材 数量
CC2530 协调器节点 1
CC2530 sensor-c 节点(已接 PIR+霍尔+震动) 1
永磁铁(用于霍尔测试) 1
人体(用于 PIR 测试) 1
电脑(智云平台) 1
手机秒表(可选,用于延迟测量) 1

8.3 实验步骤

步骤 1:PIR 人体红外检测

1. sensor-c 上电,等待入网(红灯常亮)
2. 人离开传感器 3 米以上,静止 10 秒
   → 智云平台显示 {pir:0}
3. 人走向 PIR 传感器,距离约 1~2 米,做挥动手臂动作
   → 智云平台应立即显示 {pir:1}
4. 人离开,静止 2 秒后
   → pir 应恢复为 0
5. 重复 5 次,记录检测成功率

步骤 2:霍尔门磁检测

1. 将霍尔模块放在桌上,磁铁远离
   → 智云平台显示 {door:1} (无磁场=开门状态)
2. 将磁铁贴近霍尔模块(距离 < 1cm)
   → 智云平台应立即显示 {door:0} (有磁场=关门状态)
3. 将磁铁快速移开
   → door 应立即恢复为 1
4. 重复 10 次(磁铁靠近→远离),记录误判次数

步骤 3:震动/敲门检测

1. 将震动模块安装在一个硬纸板上(模拟门扇)
2. 保持静止
   → {tch:0} (A1=0)
3. 用手指轻敲纸板 1 次
   → 应立即显示 {tch:1} 一次,随后恢复 0
4. 连续快速敲击 3 次(< 100ms 间隔)
   → 应合并为一次事件上报(去抖机制生效)
5. 调节震动模块上的电位器,测试灵敏度:
   → 顺时针旋转:更灵敏(轻微震动即触发)
   → 逆时针旋转:更迟钝(需要较大震动才触发)

步骤 4:多传感器并发测试

1. 人靠近 PIR → 同时用磁铁移开霍尔 → 同时敲击震动模块
2. 观察智云平台的上报顺序与内容
   → 预期:pir, door, tch 三个字段分别正确变化
   → 预期:无数据丢失,各字段独立

步骤 5:事件上报 vs 周期上报对比

1. 观察无事件时的数据刷新频率 → 30 秒一次
2. 触发 PIR(有事件)→ 立即上报(< 50ms 延迟)
3. 用秒表测量:
   - 从人靠近 PIR → 智云平台显示 pir=1 的时间差
   - 从磁铁靠近霍尔 → 智云平台显示 door=0 的时间差
   → 预期:均 < 100ms(中断模式下)

8.4 实验记录模板

测试项 测试次数 成功次数 成功率 平均延迟 通过/失败
PIR 检测 10
霍尔门磁状态切换 20
震动敲门检测 10
多传感器并发 5
事件上报延迟 5
周期上报准确性 10 30s ± Xs

8.5 思考题

  1. 为什么 PIR 检测到人后,pir 不会立即恢复 0,而是有一段延时?(从 PIR 模块硬件特性分析)
  2. GPIO 中断模式相比轮询模式,在响应时间上有多大提升?查阅 测试报告_安防传感器.md 中的数据
  3. 如果在门口安装 sensor-c,实际使用中可能遇到哪些误触发因素?如何避免?

9. 实验三:远程控制与执行器联动

9.1 实验目的

  • 验证从智云平台下发控制命令到 sensor-b
  • 验证 RGB 灯、蜂鸣器、继电器的控制功能
  • 验证 ZXBee 协议下行通道(WRITE 命令)
  • 验证 sensor-b 的状态上报(控制后状态回传)

9.2 实验器材

器材 数量
CC2530 协调器节点 1
CC2530 sensor-b 节点(已接 RGB+蜂鸣器+继电器) 1
电脑(智云平台) 1

9.3 实验步骤

步骤 1:RGB 灯颜色控制

在智云平台向 sensor-b (602 / 0x0002) 发送以下命令,观察 RGB 灯:

命令 预期现象
{rgb=[255,0,0]} 亮红灯
{rgb=[0,255,0]} 亮绿灯
{rgb=[0,0,255]} 亮蓝灯
{rgb=[255,255,0]} 亮黄灯 (红+绿)
{rgb=[255,0,255]} 亮紫灯 (红+蓝)
{rgb=[0,255,255]} 亮青灯 (绿+蓝)
{rgb=[255,255,255]} 亮白灯 (全亮)
{rgb=[0,0,0]} 关灯

步骤 2:蜂鸣器控制

命令 预期现象
{buzz=1} 蜂鸣器长响(持续)
{buzz=0} 蜂鸣器停止
{buzz=500} 蜂鸣器短响 500ms 后自动停止,蓝灯亮数秒
{buzz=200} 蜂鸣器短响 200ms

步骤 3:远程开门(继电器 + RGB 联动)

命令 预期现象
{unlock=1} 继电器1吸合(咔哒声)+ RGB 绿灯亮 → 3 秒后继电器自动断开
{unlock=0} 继电器1断开(如未自动关闭)

💡 可以在继电器输出端接一个小灯炮/LED 来模拟"门锁打开"的视觉效果

步骤 4:控制后状态回传验证

1. 发送 {unlock=1}
2. 观察智云平台是否收到 sensor-b 的上报:
   → 预期:{unlock:1, rgb:[0,255,0]}
3. 等待 4 秒
   → 预期:{unlock:0} (3秒自动关门后状态回传)

步骤 5:连续控制压力测试

1. 在 10 秒内连续发送 10 条命令(如交替亮红、亮绿)
2. 观察:
   - 每条命令是否都被执行
   - RGB 灯是否立即响应
   - 有无命令丢失或延迟
   - 智云平台是否正确回传状态

9.4 实验记录模板

测试项 命令 预期现象 实测现象 通过/失败
RGB 红灯 {rgb=[255,0,0]}
RGB 绿灯 {rgb=[0,255,0]}
RGB 蓝灯 {rgb=[0,0,255]}
RGB 关灯 {rgb=[0,0,0]}
蜂鸣器长响 {buzz=1}
蜂鸣器短响 {buzz=500}
蜂鸣器停止 {buzz=0}
远程开门 {unlock=1}
3秒自动关门 等待
状态回传 观察 unlock 状态变化
连续控制 10次/10秒 无丢失

9.5 思考题

  1. 远程开门命令为什么要设计 3 秒自动关门?如果没有自动关门会有什么安全问题?
  2. RGB 灯为什么用数组 [R,G,B] 而不是三个独立字段 rgb_r, rgb_g, rgb_b?两种设计各有什么优缺点?
  3. 如果智云平台与协调器的串口连接不稳定,可能导致下发命令丢失。如何在协议层面增强可靠性?

10. 实验四:安防告警与联动测试

10.1 实验目的

  • 验证 sensor-c 的告警等级判断逻辑(正常/注意/报警)
  • 验证徘徊检测(PIR 持续触发一定时间 → alert=1)
  • 验证夜间入侵检测(夜间 + 开门 → alert=2)
  • 验证 sensor-b 的告警联动(alert=2 → 红灯 + 蜂鸣器长响)
  • 验证解除告警命令(reset=1)

10.2 实验器材

器材 数量
CC2530 协调器 1
CC2530 sensor-c 节点 1
CC2530 sensor-b 节点 1
永磁铁 1
电脑(智云平台 + 可选:Python 上位机用于联动转发) 1

10.3 实验原理

sensor-c 内置的安防逻辑 (security_logic.c):
  ├── PIR 检测到人 → 开始计时
  │   ├── 持续 < 10秒 → 正常 (alert=0)
  │   └── 持续 ≥ 10秒 → 徘徊 (alert=1, stay=XX秒)
  ├── night=1 (夜间模式) + door=1 → 入侵 (alert=2)
  └── alert=2 上报 → 人工或 Python 转发 alert=2 到 sensor-b → 声光告警

告警等级说明:
  0 = SAFE(安全,绿灯)
  1 = ATTENTION(注意,蓝灯)
  2 = ALARM(报警,红灯 + 蜂鸣器长响)

10.4 实验步骤

步骤 1:基础告警测试 — 徘徊检测 (alert=1)

1. 确认系统处于白天状态(night=0,默认)
2. 在 sensor-c 的 PIR 前持续晃动或停留(模拟"有人徘徊")
3. 观察智云平台:
   → 先显示 {pir:1}
   → 约 10 秒后显示 {stay:10, alert:1}
4. 人离开 PIR 范围
   → pir 恢复为 0,但 alert 保持 1(需手动解除)

步骤 2:高级告警测试 — 夜间入侵 (alert=2)

1. 通过智云平台向 sensor-c 发送 {night=1}(启用夜间模式)
   → 预期返回 {night:1}
2. 用磁铁模拟门状态:磁铁远离霍尔 = 门被打开
   → door 变为 1
3. 观察智云平台:
   → 预期立即显示 {door:1, alert:2} (入侵!)
4. 观察/验证告警联动:
   → 方案 A (Python 转发):Python 上位机检测到 alert=2 → 自动下发 alert=2 到 sensor-b
   → 方案 B (手动测试):在智云平台手动发送 {alert=2} 到 sensor-b (602)
   → sensor-b 现象:RGB 红灯 + 蜂鸣器长响

步骤 3:解除告警

1. 在 sensor-b 告警状态下(红灯 + 蜂鸣器响)
2. 向 sensor-b 发送 {reset=1}
   → 预期:蜂鸣器停止,RGB 恢复绿灯,alert 变回 0
3. 向 sensor-c 发送 {night=0}
   → 退出夜间模式,恢复白天正常状态

步骤 4:完整告警流程端到端测试

时间线(秒)  动作                              预期现象
────────────────────────────────────────────────────────────
 0           系统正常,所有节点在线             alert=0, RGB绿灯
10           下发 {night=1} 到 sensor-c        night=1
20           人走到 PIR 前                      pir=1
25           磁铁远离霍尔(模拟门被打开)          door=1, alert=2
26           sensor-b 开始告警                  RGB红灯 + 蜂鸣器
60           点击"解除告警"下发 {reset=1}       停止告警,绿灯
70           下发 {night=0} 到 sensor-c         恢复白天

10.5 实验记录模板

测试项 预期结果 实测结果 通过/失败
PIR 徘徊 10s → alert=1 alert 变为 1
夜间 + 开门 → alert=2 alert 变为 2
sensor-b 响应 alert=2 红灯 + 蜂鸣器
reset=1 解除告警 恢复绿灯,蜂鸣器停
night 字段下发响应 返回 {night:1}
端到端完整流程 按时间线执行

10.6 思考题

  1. 为什么告警事件不设计为 sensor-c 直接向 sensor-b 发送 ZigBee 命令,而是要经过智云平台转发?(从架构/扩展性/记录角度分析)
  2. 徘徊检测的 10 秒阈值是如何确定的?如果要部署在实际公寓门口,这个阈值应该如何调整?
  3. 设计一个更完善的告警策略:当 alert=2 持续 5 分钟仍未解除,系统应该如何处理?

11. 实验五:综合场景与访客管理演示

11.1 实验目的

  • 将前述所有功能整合为一个完整的"智能门禁访客管理"演示场景
  • 模拟真实访客到访 → 门铃 → 开门 → 进入 → 离开的完整流程
  • 测试多节点并发工作下的稳定性
  • (可选)基于智云数据开发简单的访客登记日志

11.2 实验器材

器材 数量
CC2530 协调器 1
CC2530 sensor-a(环境采集) 1
CC2530 sensor-b(控制执行) 1
CC2530 sensor-c(安防检测) 1
电脑(智云平台 + Python 上位机) 1
演示用门禁道具(可选:小门模型 + 灯指示) 1

11.3 演示场景脚本

场景 A:正常访客流程

时间 (秒)   场景动作                          系统响应与演示要点
────────────────────────────────────────────────────────────────
 0-10    【场景设置】白天,门口无人             temp/humi/lux 周期上报,所有状态=0
                                                  → 展示"环境监测"功能

10-20    【访客到访】人走到门口                PIR 检测到 pir=1 (event 上报)
                                                  → 展示"人体检测"功能
                                                  → sensor-a 继续上报环境数据

20-25    【访客按门铃】按触摸按键              tch=1 事件上报
                                                  → 展示"门铃触发"功能
                                                  → (可选) 语音播报 "叮咚,有访客"

25-40    【远程确认与开门】
          在智云平台/Python 界面点击"开门"
                                                  → 下发 {unlock=1} 到 sensor-b
                                                  → 继电器吸合 + RGB 绿灯
                                                  → 展示"远程控制"功能
                                                  → 3 秒后自动关门

40-60    【访客进入】门打开(霍尔状态变化)       door=1 → door=0
          人进门,停止在门前徘徊
                                                  → (可选) 停留 < 10 秒,无告警
                                                  → 展示"门磁检测"功能

60-70    【访客离开】人走出门口                 pir=0, door=0→1→0
                                                  → 系统恢复空闲状态
                                                  → 记录一次"访客事件"

70+     【系统日志】智云平台查看数据历史        temp/humi/lux 图表 + 事件时间线
                                                  → 展示"数据记录"功能

场景 B:异常告警流程

时间 (秒)   场景动作                          系统响应与演示要点
────────────────────────────────────────────────────────────────
 0        【设置夜间模式】下发 {night=1}       night=1 (模拟深夜 02:00)

10        【模拟入侵】磁铁远离霍尔              door=1 → 立即触发 alert=2
                                                  → 展示"入侵检测"功能
                                                  → (联动) sensor-b 红灯 + 蜂鸣器长响
                                                  → 智云平台显示红色告警提示

20        【解除告警】点击"解除告警"按钮        下发 {reset=1} 到 sensor-b + sensor-c
                                                  → 蜂鸣器停止,RGB 恢复绿灯
                                                  → alert 变回 0
                                                  → 展示"告警管理"功能

30        【恢复白天模式】下发 {night=0}       night=0
                                                  → 系统恢复正常

11.4 稳定性与长时间测试

将所有 4 个节点上电,连续运行 30 分钟,期间:

  • 每隔 5 分钟触发一次 sensor-c 的 PIR/门磁事件
  • 每隔 5 分钟向 sensor-b 发送一条 RGB/开门命令
  • 观察:
    1. sensor-a 的周期上报是否持续(不漏报)
    2. 事件上报是否即时(不延迟)
    3. 控制命令是否全部成功(无丢失)
    4. 是否有节点掉线或需要重启
    5. 智云平台的数据流是否稳定

11.5 实验记录模板

测试项 指标 目标 实测 通过/失败
场景 A 完整流程 可演示性 流畅无卡顿
场景 B 告警流程 响应时间 开门 → 告警 < 1s
30 分钟稳定性 节点掉线次数 0 次
30 分钟稳定性 命令成功率 ≥ 99%
30 分钟稳定性 上报漏报率 < 1%

11.6 演示要点总结

在项目答辩或演示时,按以下顺序展示:

  1. 系统架构介绍(1 分钟):展示节点拓扑图,说明 1 个协调器 + 3 个终端节点的分工
  2. 环境数据采集(1 分钟):手捂温湿度模块,展示实时曲线变化
  3. 安防事件检测(1 分钟):演示 PIR、门磁、触摸按键的即时响应
  4. 远程控制(1 分钟):点击"开门"按钮 → 继电器动作 → RGB 绿灯
  5. 告警联动(1 分钟):模拟夜间入侵 → 红色声光告警 → 解除告警
  6. 数据可视化(1 分钟):展示智云平台的历史数据图表 / Python 上位机界面
  7. 技术亮点(1 分钟):ZXBee 协议设计、GPIO 中断实时性、ZigBee 无线自组网

12. 常见问题排查 (FAQ)

Q1:CC Debugger 一直亮红灯,IAR 无法识别目标板

症状:IAR 提示 "Failed to connect to target",CC Debugger 红色 LED 常亮

排查步骤

  1. 检查 CC2530 板是否上电(VCC=3.3V)
  2. 检查 Debug 接口线序(通常 6 针:VCC/GND/DCK/DD/RESET/NC)
  3. 确认 CC2530 板上的 Debug 使能跳线帽已插上
  4. 尝试按一下 CC Debugger 上的 Reset 按钮重新识别
  5. 换一根 USB 线或换一个 USB 口(避免 USB3.0 干扰)
  6. 在设备管理器中确认 "Cebal Controlled Devices" 正常显示,无黄色感叹号

Q2:终端节点一直闪烁红灯,无法入网

症状:sensor-a/b/c 上电后红灯一直闪烁,不变成常亮

排查步骤

  1. 确认协调器已上电且红灯常亮(网络已建立)
  2. 确认协调器和终端节点使用相同的 PAN ID 和信道
    • 检查各工程 f8wConfig.cfgZGlobals.h 中的 ZDO_CONFIG_PAN_ID
    • 检查 DEFAULT_CHANLIST(信道列表)是否一致
  3. 将终端节点断电 → 协调器断电 → 先上协调器(等 3 秒)→ 再上终端节点
  4. 检查终端节点的天线是否连接
  5. 节点之间距离是否过远(室内建议 < 30 米,无遮挡)
  6. 附近是否有 2.4GHz WiFi 干扰(可尝试切换 ZigBee 信道 11/15/20/25,避开 WiFi 信道 1/6/11)

Q3:智云平台无数据显示

症状:协调器已入网,终端节点已入网,但智云平台无任何数据

排查步骤

  1. 确认 USB 转串口模块已连接协调器的 UART(TX/RX 不要接反!)
  2. 打开串口调试助手(波特率 38400),直接观察协调器是否发送数据:
    • 如果串口有乱码/十六进制数据 → 协调器在发送,智云配置问题
    • 如果串口完全无数据 → 协调器工程问题或 UART 接线问题
  3. 确认智云平台的串口参数(波特率/端口号)正确
  4. 确认智云平台的数据点字段名与节点代码中的字段名完全一致(区分大小写!)
  5. 重启智云平台软件

Q4:下发命令无响应

症状:在智云平台发送 {unlock=1} 到 sensor-b,但 sensor-b 无任何动作

排查步骤

  1. 确认发送目标地址正确(sensor-b = 0x0002,节点名 602)
  2. 确认命令格式正确:{key=value}{"key":value},不要有中文/全角括号
  3. 用串口调试助手直接发送原始 ZXBee 帧,绕过智云平台判断问题在哪一层
  4. 检查 sensor-b 代码中 ZXBeeUserProcess() 函数是否正确处理了该字段
  5. 检查 sensor-b 是否入网(红灯常亮)
  6. 检查 RGB/蜂鸣器/继电器的硬件接线和供电是否正常

Q5:温湿度数据异常(temp=0 或数值跳变)

症状:sensor-a 上报 {"temp":0.0,"humi":0.0} 或数值随机跳变

排查步骤

  1. 检查 HTU21D/BH1750 的 I²C 接线:
    • SDA → P1.7
    • SCL → P1.6
    • VCC → 3.3V
    • GND → GND
  2. I²C 器件地址是否正确(HTU21D = 0x40,BH1750 = 0x23 或 0x5C)
  3. 用示波器/逻辑分析仪观察 I²C 总线是否有信号
  4. 检查杜邦线是否牢固(I²C 对接触不良敏感,可尝试换线)
  5. 检查传感器是否损坏(换一个同型号传感器测试)

Q6:PIR 人体红外一直输出 1(误触发)

症状:sensor-c 持续上报 pir=1,无人时也不恢复 0

排查步骤

  1. PIR 模块上电需要 30 秒~1 分钟的预热稳定时间,等待后再观察
  2. 检查 PIR 模块跳线设置:
    • H 位置 = 可重复触发(推荐,人持续活动会持续输出高电平)
    • L 位置 = 单次触发(人离开后延时自动恢复)
  3. 检查延时电位器:逆时针旋转减小延时(默认可能设置了很长的延时)
  4. 检查灵敏度电位器:逆时针旋转降低灵敏度
  5. PIR 不应面对窗户、空调出风口、热源(暖气/电灯)
  6. 检查是否有宠物/飞虫/植物晃动导致触发
  7. PIR 模块供电电压应稳定在 5V(3.3V 也可以工作,但灵敏度可能降低)

Q7:sensor-b 的 RGB 灯颜色不对

症状:发送 {rgb=[255,0,0]} 显示的不是纯红色,或某一色不亮

排查步骤

  1. 检查 RGB 灯的共阴/共阳类型:
    • 共阴:高电平点亮 → CC2530 GPIO 高=亮(一般代码默认)
    • 共阳:低电平点亮 → 需要在代码中反转逻辑
  2. 检查 R/G/B 三条信号线是否正确连接(可能线序插反了)
  3. 用万用表测 GPIO 输出电平:
    • 发送 {rgb=[255,0,0]} 时,P0.0 应为高电平 (~3.3V),P0.1/P0.2 应为 0V
  4. 某些 RGB 模块需要串联限流电阻(220Ω~1kΩ),否则可能烧坏或亮度异常

Q8:串口调试助手看到乱码

症状:协调器串口输出是一堆不可识别字符

排查步骤

  1. 检查波特率是否正确(默认 38400,不同工程可能为 115200)
  2. 检查数据位/停止位/校验位(应为 8-N-1)
  3. TX/RX 是否接反(协调器 TX → 串口模块 RX,协调器 RX → 串口模块 TX)
  4. 串口模块是否为 3.3V TTL 电平(RS232 电平会烧坏 CC2530!)
  5. USB 转串口模块本身是否故障(换一个模块试试)

Q9:编译报错 "Error[e16]: Segment RAM ..."

症状:IAR 编译时报内存不足

排查步骤

  1. 在 IAR 中选择 Project → Options → General Options → Target
  2. 确认 Device 选择的是 CC2530F256(256KB Flash / 8KB RAM)
  3. 在 linker 配置中确认 XCL 文件为 CC2530.xcl
  4. 如果仍报错,检查是否定义了过多的大数组或打印缓冲区
  5. 可尝试减少 MAX_PAYLOAD_LEN 或关闭某些调试日志

Q10:节点偶尔掉线或数据延迟

症状:连续运行几小时后,某节点不再上报数据,需要重新上电

排查步骤

  1. 检查电源是否稳定(劣质电源会导致 CC2530 软死机)
  2. ZigBee 网络中是否有其他厂商设备干扰
  3. 如果使用电池供电,检查电池电压是否低于 2.8V(CC2530 最低工作电压)
  4. 检查代码中是否有看门狗定时器溢出导致重启
  5. 协调器长时间运行后,建议断电重启一次以清理网络表

13. 命令速查表

13.1 智云平台下发命令速查

sensor-a (601 / 0x0001) — 环境采集

目的 命令 响应 / 效果
查询温度 {temp=?} 返回 {temp:XX.X}
查询湿度 {humi=?} 返回 {humi:XX.X}
查询光照 {lux=?} 返回 {lux:XXX}
查询上报周期 {V0=?} 返回 {V0:30}
修改上报周期 {V0=10} 改为 10 秒上报
关闭温度上报 {CD0=1} D0 bit0 清零
开启温度上报 {OD0=1} D0 bit0 置 1

sensor-b (602 / 0x0002) — 控制执行

目的 命令 响应 / 效果
远程开门 {unlock=1} 继电器吸合 3 秒 + 绿灯
手动关门 {unlock=0} 继电器断开
蜂鸣器长响 {buzz=1} 蜂鸣器持续响
蜂鸣器短响 {buzz=500} 蜂鸣器响 500ms + 蓝灯数秒
关闭蜂鸣器 {buzz=0} 蜂鸣器停止
RGB 红灯 {rgb=[255,0,0]} 亮红灯
RGB 绿灯 {rgb=[0,255,0]} 亮绿灯
RGB 蓝灯 {rgb=[0,0,255]} 亮蓝灯
RGB 关灯 {rgb=[0,0,0]} 关闭 RGB
设置注意模式 {alert=1} 蓝灯
设置报警模式 {alert=2} 红灯 + 蜂鸣器长响
解除告警/复位 {reset=1} 恢复绿灯,清除所有状态
查询门锁状态 {unlock=?} 返回 {unlock:X}

sensor-c (603 / 0x0003) — 安防检测

目的 命令 响应 / 效果
查询 PIR {pir=?} 返回 {pir:X}
查询门磁 {door=?} 返回 {door:X}
查询触摸/震动 {tch=?} 返回 {tch:X}
查询告警等级 {alert=?} 返回 {alert:X}
查询徘徊时间 {stay=?} 返回 {stay:X}
设置夜间模式 {night=1} 启用夜间入侵检测
设置白天模式 {night=0} 关闭夜间模式
布防 {arm=2} 同夜间模式
撤防 {arm=0} 同白天模式
解除告警 {reset=1} alert 清零,关闭本地继电器
修改上报周期 {V0=10} 改为 10 秒周期上报

13.2 节点地址与命令字速查

节点 地址 名称 典型上行 CMD 典型下行 CMD
Coordinator 0x0000 000
sensor-a 0x0001 601 0x01 (REPORT) 0x01 (查询), 0x03 (设V0)
sensor-b 0x0002 602 0x01 (REPORT) 0x03 (WRITE), 0x06 (RESET)
sensor-c 0x0003 603 0x01 (REPORT), 0x02 (ALARM) 0x03 (WRITE), 0x06 (RESET)

📎 相关文档索引

  • 通信接口说明.md — 详细字段定义与对接说明
  • 智云平台测试命令手册.md — 完整命令列表与测试步骤
  • 接线说明_安防传感器节点.md — sensor-c 硬件接线详图
  • 测试报告_安防传感器.md — 传感器驱动与 GPIO 中断的性能测试数据
  • D部分通信协议与ZigBee完成说明.md — ZXBee 协议实现细节

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages