# dev100 **Repository Path**: x-itg/dev100 ## Basic Information - **Project Name**: dev100 - **Description**: 无线传感器报警网络系统:100个采集器,10个报警器组成的无线网络 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 无线传感器报警网络系统 ## 系统概述 这是一个基于STM32WL系列微控制器的无线传感器报警网络系统,支持100个采集端和10个报警端的分布式架构,无需中心节点,实现100ms内的快速报警响应。 ## 系统特性 - **无中心节点分布式架构**:采集端和报警端直接通信 - **快速响应**:100ms内完成报警触发和响应 - **事件管理**:5秒内同一设备超限为同一事件,不同设备为不同事件 - **重传机制**:1秒内无应答自动重传,最多重传3次 - **可靠通信**:数据包校验和应答机制 ### 全局应答(更新) 采集端在发送报警后,需要收到来自所有 10 个报警端(节点ID 101-110)的应答,才将事件标记为“完全确认”。注意:只有采集端会处理这些 ACK 包;报警端在收到广播的 ACK 时会忽略它们,从而避免那些未发出报警事件的设备误将广播 ACK 当作确认。 具体规则: - 采集端等待 1000 ms(见 `RETRANSMIT_TIMEOUT_MS`)收集来自各报警端的 ACK。 - 若在 1000 ms 内未收到全部 10 个报警端的 ACK,采集端会重传报警包(最多重传 3 次,见 `MAX_RETRANSMIT_COUNT`)。 - 每收到一个报警端的 ACK,会记录该报警端对应的位(位图),并在日志中显示已收到的 ACK 数量。 - 若在重传次数用尽后仍未收到全部 ACK,则事件被标记为部分确认(未完全确认),并停止重传。此情况会在调试日志中记录以便排查。 该行为已在 `Core/Src/alarm_network.c` 中实现(使用 `ack_bitmap` 跟踪 101-110 的应答位,`TOTAL_ALARM_NODES` 定义为 10)。 ## 硬件架构 ### 采集端 (100个) - STM32WLE5微控制器 - 传感器接口 (UART1/UART2接收数字信号) - 射频模块 (Sub-GHz FSK) ### 报警端 (10个) - STM32WLE5微控制器 - 报警器接口 (GPIOB2触发报警) - 射频模块 (Sub-GHz FSK) ## 软件架构 ### 通信协议 - **频率**:874MHz - **调制方式**:FSK - **数据包格式**:6字节固定长度 - **校验方式**:校验和 ### 数据包结构 ```c typedef struct { uint8_t preamble; // 前导码 0xAA uint8_t node_type; // 节点类型 (0x01:采集端, 0x02:报警端) uint8_t node_id; // 节点ID (1-100:采集端, 101-110:报警端) uint8_t event_id; // 事件ID uint8_t data; // 数据 (1:报警, 0:正常) uint8_t checksum; // 校验和 } Packet_t; ``` ## 编译配置 ### 节点类型配置 编辑 `Core/Inc/node_config.h` 文件: **采集端配置 (节点ID: 1-100)** ```c #define NODE_TYPE_COLLECTOR #define NODE_ID 1 // 设置采集端ID (1-100) ``` **报警端配置 (节点ID: 101-110)** ```c #define NODE_TYPE_ALARM #define NODE_ID 101 // 设置报警端ID (101-110) ``` ### 编译步骤 1. 打开项目工程文件 (`MDK-ARM/PING_PONG_V1.2/*.uvprojx`) 2. 根据节点类型修改 `node_config.h` 文件 3. 编译并下载到对应的STM32WL设备 ## 工作流程 ### 采集端工作流程 1. **传感器检测**:UART1/UART2接收到ASCII数字字符时触发报警 - UART1:左侧传感器接口,收到ASCII数字(0-9)表示超限 - UART2:右侧传感器接口,收到ASCII数字(0-9)表示超限 - 收到'N'或'n'字符表示传感器状态正常 2. **事件创建**:检查5秒内是否有相同节点的事件 3. **报警发送**:广播发送报警数据包 4. **等待应答**:启动1秒应答超时定时器 5. **重传机制**:1秒内无应答自动重传,最多3次 6. **事件确认**:收到报警端应答后标记事件为已确认 ### 报警端工作流程 1. **持续监听**:射频模块持续接收数据包 2. **报警处理**:收到采集端报警包后触发GPIOB2报警 3. **应答发送**:按ID时隙返回应答广播 4. **报警持续**:报警持续5秒后自动关闭 ## 时间参数配置 | 参数 | 值 | 说明 | |------|-----|------| | 报警响应超时 | 1000ms | 采集端等待应答时间 | | 事件超时 | 5000ms | 同一设备5秒内超限为同一事件 | | 重传间隔 | 1000ms | 无应答时重传间隔 | | 报警持续时间 | 5000ms | 报警端报警持续时间 | ## 调试信息 系统通过串口输出调试信息,包括: - 节点启动信息 - 数据包收发状态 - 事件处理状态 - 错误信息 ## 硬件连接 ### 采集端连接 - **UART1**:左侧传感器接口 - 波特率:9600bps (默认) - 数据格式:8位数据位,无校验,1位停止位 - 传感器协议:ASCII字符通信 - 数字字符(0-9):表示传感器超限,触发报警 - 'N'或'n'字符:表示传感器状态正常 - **UART2**:右侧传感器接口 - 配置与UART1相同 - **射频模块**:Sub-GHz天线 ### 报警端连接 - **GPIOB2**:报警器控制信号 - 高电平触发报警 - 报警持续5秒后自动关闭 - **射频模块**:Sub-GHz天线 ## 传感器接口协议 ### 通信协议 - **接口类型**:UART异步串行通信 - **波特率**:9600bps (可配置) - **数据位**:8位 - **校验位**:无 - **停止位**:1位 ### 传感器数据格式 - **超限报警**:ASCII数字字符 '0'-'9' - 收到任意数字字符即触发报警 - 数字值表示超限级别 (0-9) - **正常状态**:ASCII字符 'N' 或 'n' - 表示传感器状态恢复正常 - **其他字符**:忽略处理 ### 工作流程 1. 系统启动时自动初始化UART1和UART2接口 2. 启用接收中断,实时监听传感器数据 3. 收到数字字符时,立即触发报警流程 4. 报警处理完成后,等待传感器恢复正常 ## 注意事项 1. **节点ID唯一性**:确保每个设备的节点ID唯一 2. **射频参数一致性**:所有设备使用相同的射频频率和参数 3. **电源稳定性**:保证设备供电稳定 4. **天线匹配**:确保天线阻抗匹配良好 5. **传感器接口**:确保UART接口电平匹配,避免通信错误 6. **字符编码**:传感器必须发送标准ASCII字符 ## 故障排除 ### 常见问题 1. **通信失败**:检查射频参数和天线连接 2. **报警不触发**:检查传感器接口和GPIO配置 3. **重传频繁**:检查射频信号质量和距离 ### 调试建议 1. 启用串口调试信息 2. 检查数据包校验和 3. 验证射频信号强度