第01章 项目概述
约 935 字大约 3 分钟
2026-04-25
1 项目简介
本项目是一个基于 Nordic nRF52840 的 BLE Mesh 智能灯带控制节点,支持 WS2812 灯带驱动、可扩展灯效系统和蓝牙 Mesh 群控三部分解耦设计。
用户可通过手机 App 配网后远程开关灯带、调节亮度、切换灯效;也可通过本地物理按键循环切换灯效。
核心价值在于实现了"灯带硬件抽象 → 灯效插件化 → Mesh 远程控制"的清晰分层架构,新增灯效仅需一个文件即可在编译期自动注册,无需修改其他代码。
2 项目背景与定位
在智能家居和氛围照明日益普及的趋势下,传统的遥控灯带存在控制距离短、无法群控、灯效单一等痛点。
BLE Mesh 技术支持多对多网络拓扑,天然适合灯带群控场景。
本项目定位于:
- 学习平台:覆盖 NCS/Zephyr 开发、BLE Mesh 协议栈、设备树配置、自定义 Vendor 模型等嵌入式核心技能
- 参考设计:提供可复用的"灯效插件框架 + Mesh 控制"代码架构
- 原型验证:为后续商业化智能灯带产品提供 MVP 级原型
3 系统模块总览
系统划分为 6 大模块:
| 模块 | 职责 |
|---|---|
| 板级支持 (BSP) | 硬件引脚、Flash 分区、外设配置 |
| 系统配置 | Kconfig 功能开关、CMake 构建系统 |
| 应用入口 | 模块初始化、主循环调度、本地按键处理 |
| 灯带输出层 | 灯带运行时状态管理、像素渲染、线程安全 |
| 灯效插件系统 | 灯效抽象接口、注册表、4 种内置灯效 |
| 蓝牙 Mesh 层 | Mesh 协议栈初始化、标准模型、Vendor 模型 |
4 系统数据流
┌──────────┐ Mesh消息 ┌─────────────┐ set/get API ┌──────────────┐
│ 手机 App │ ──────────────→ │ mesh_models │ ────────────────→ │ led_output │
│ (配网者) │ ←────────────── │ (模型回调) │ ←──────────────── │ (状态管理) │
└──────────┘ STATUS回复 └─────────────┘ └──────┬───────┘
│
┌──────────┐ GPIO中断 ┌──────────┐ │ render API
│ KEY2 │ ────────────→ │ main.c │ ───────────────────────── │
│ (sw1) │ │(按键调度)│ cycle_effect() │
└──────────┘ └──────────┘ ↓
┌──────────────┐
主循环 33ms ──→ led_output_render_step() ──→ effect->render() │ effects │
│ (灯效插件) │
└──────┬───────┘
│
pixels[] 数组
│
↓
led_strip_update_rgb()
│
↓
WS2812 灯带 (SPI1)5 已实现功能与待扩展
5.1 已实现功能
| 功能 | 说明 |
|---|---|
| WS2812 SPI 灯带驱动 (120 像素) | 基于 Zephyr LED Strip 驱动框架 |
| BLE Mesh 协议栈完整初始化 | PB-ADV + PB-GATT 双通道配网 |
| Generic OnOff 标准开关控制 | Mesh 标准模型,立即生效 |
| Light Lightness 标准亮度控制 | 0~65535 亮度范围 |
| Vendor 自定义灯效切换 | GET/SET/SET_UNACK/STATUS 操作码 |
| 本地按键 sw1 循环切换灯效 | RC 硬件去抖 + 200ms 软件去抖 |
| 4 种内置灯效 | 常亮/流动/呼吸/彩虹 |
| 灯效插件化自动注册 | 基于 Zephyr ITERABLE SECTION |
| 关灯记忆亮度 | 开灯恢复最近有效亮度 |
| RTT 日志输出 | Segger RTT 通道 |
5.2 待扩展功能 (Backlog)
| 功能 | 优先级 | 说明 |
|---|---|---|
| Transition Time / Delay 渐变执行 | 高 | 当前全部立即生效,未解析渐变参数 |
| Mesh 状态持久化 (NVS) | 高 | Settings 基础设施已就绪,尚未接入 |
| 灯效列表查询协议 | 中 | 当前仅能查当前灯效和总数 |
| 手机 App 自定义控制界面 | 中 | Vendor 协议已完整,缺配套 UI |
| 更多灯效 | 低 | 框架已支持,新增文件即可 |
6 关键技术决策
| 决策点 | 选择 | 理由 |
|---|---|---|
| 灯效注册机制 | Zephyr ITERABLE SECTION | 编译期自动收集,零运行时开销 |
| 状态管理同步 | k_mutex 互斥锁 | Mesh/按键/主循环三线程并发 |
| 渲染帧率 | 33ms (~30fps) | 平衡流畅度与功耗 |
| SPI 驱动 WS2812 | 6.4MHz, 8bits/symbol | 利用 SPI byte 模拟 NZR 时序 |
| BLE 安全精简 | 关闭 LE 加密/隐私 | MVP 阶段简化实现 |
