1. 项目概述
“Wireless LED Control”是一套面向场景化应用的模块化无线LED显示系统,其设计初衷并非追求通用性或工业级可靠性,而是聚焦于特定情感表达场景——如求婚、纪念日布置、小型舞台互动等——对显示系统的灵活性、部署便捷性与视觉表现力提出的特殊需求。该系统在工程实现上展现出鲜明的“约束驱动设计”特征:物理空间限制(乒乓球尺寸)、通信可靠性挑战(百级节点共存)、功耗与成本敏感(可批量部署)、人机交互直觉性(触摸+拨码)等多重约束共同塑造了最终的技术方案。
与传统LED矩阵或点阵屏不同,本系统摒弃集中式布线与固定拓扑结构,转而采用完全去中心化的“一主多从”广播式无线架构。每个从机单元为独立、自包含的显示节点,具备唯一地址标识、本地解码能力与RGB三色独立驱动功能。主机不维护从机状态,不建立连接,仅周期性广播携带目标地址与显示指令的数据包;从机持续监听信道,在接收到匹配自身地址的指令后,立即执行对应颜色显示或动态效果。这种设计彻底解耦了物理布局与电气连接,使图案构型完全由空间摆放决定,真正实现“所见即所得”的图形化部署。
系统已通过5节点原型验证,并完成150套从机的批量生产与实装测试。在2022年8月的实际求婚场景中,系统成功驱动数十个从机同步呈现预设文字与色彩序列,验证了其在真实环境下的可用性。后续针对多节点并发导致的信道冲突问题,引入信道-地址静态绑定与动态同步机制,显著提升了大规模部署下的指令到达率与执行确定性。
2. 系统架构与通信协议设计
2.1 整体架构:广播式无连接模型
系统采用典型的星型拓扑,但逻辑上为纯广播模型。主机(Master)作为唯一的指令源,不感知从机(Slave)的存在状态,亦不进行任何握手、应答或重传。所有通信行为均基于单向数据包广播:
- 主机周期性地向指定2.4GHz信道发送数据帧;
- 每帧包含:同步头、目标地址(8位)、显示命令字(8位)、校验和(8位);
- 从机以低功耗模式持续监听该信道,当接收到完整帧且CRC校验通过后,提取目标地址字段;
- 若地址匹配本地拨码开关配置值,则解析命令字并更新LED状态;否则丢弃该帧。
此模型的优势在于极简的协议栈与零状态维护开销。从机无需维持连接上下文,无休眠唤醒同步问题,亦无心跳包负担。其代价是牺牲了指令确认机制,故必须通过物理层鲁棒性与链路层协议优化来保障关键指令的可靠投递。
2.2 通信模块选型与接口设计
系统选用泽耀科技AS01-ML01S 2.4GHz无线收发模块(C84802),该模块基于Si24R1射频芯片,支持GFSK调制、250kbps~2Mbps可变速率、-83dBm接收灵敏度,工作电压2.0~3.6V,与锂电池供电范围天然匹配。模块通过SPI接口与MCU通信,主机与从机硬件设计完全复用,仅软件配置存在差异:
- 主机配置:工作于发射模式(TX),禁用自动应答(Auto Ack),关闭载波检测(CD),以最大化发射吞吐率;
- 从机配置:工作于接收模式(RX),启用地址匹配中断(Address Match IRQ),配置为仅当接收到匹配地址帧时拉低IRQ引脚;
- IRQ引脚连接:从机将模块IRQ引脚直接接入STC8H1K16的CMP比较器输入端(P1.0),利用硬件比较器中断替代普通GPIO中断,确保指令接收事件获得最高优先级响应,避免因其他中断(如PWM定时器)导致的指令丢失。
SPI通信时序严格遵循模块手册:CPOL=0, CPHA=0,SCK空闲低电平,数据在SCK上升沿采样。主机在发送前需先写入TX地址(固定为0x0000000001),再写入待发送数据帧,最后触发发射。从机在接收中断服务程序中,首先读取STATUS寄存器确认RX_DR标志,随后连续读取RX_FIFO获取6字节有效载荷。
2.3 信道与地址协同机制:解决百节点冲突
当从机数量超过数十台时,原始设计暴露严重信道竞争问题:多个从机在同一时刻尝试接收指令,导致信号叠加、误码率陡增,表现为部分节点无响应或颜色错乱。根本原因在于所有从机共享同一信道与同一广播地址,形成典型的“隐终端”问题。
解决方案并非增加复杂MAC层协议,而是回归物理层,实施信道-地址静态绑定 + 主机动态映射策略:
- 从机侧(静态):每台从机出厂时,其8位拨码开关地址(ADDR[7:0])与2.4GHz信道号(CH[4:0])通过查表方式硬编码绑定。例如,地址0x01绑定信道25,地址0x02绑定信道26……地址0xFF绑定信道119。该映射关系固化于从机固件启动代码中,不可更改。
- 主机侧(动态):主机内部维护一张“地址→信道”映射表。当用户通过触摸按键选择控制某台从机(如地址0x3A)时,主机软件实时查询该地址对应信道(如CH=50),随即重新配置AS01-ML01S模块的工作信道,再向该信道广播指令。
该机制将原本的“单信道百节点竞争”转化为“百信道单节点独占”,从根本上消除了冲突。实测表明,在150台从机密集部署(间距<0.5m)环境下,单指令平均到达率提升至99.2%,且无明显延迟抖动。其代价是主机每次切换信道需约120μs重配置时间,但对于求婚等非实时交互场景完全可接受。
3. 硬件设计详解
3.1 主机硬件:人机交互与图形化中枢
主机承担指令生成、用户交互与状态反馈三大职能,硬件设计围绕此展开:
主控MCU:STC8H3K64S4(C2901852),LQFP-32封装。选择依据在于其64KB Flash足以容纳图形字库与多套显示方案,3KB RAM满足SPI缓冲与触摸算法需求,且内置高精度RC振荡器(±1%),免去外部晶振节省空间。关键外设分配如下:
- P0.0-P0.2:连接AM01B_W触摸控制器(C723855)的INT、SCL、SDA引脚,构成I²C总线;
- P1.0-P1.2:定义为触摸按键区域(PCB覆铜走线,覆盖阻抗膜),通过内部比较器实现电容感应;
- P2.0-P2.2:驱动1.28寸圆形OLED屏幕(SSD1315驱动),采用SPI 4线模式(CS, DC, CLK, DIN);
- P3.0-P3.1:SPI总线复用,连接AS01-ML01S模块(CSN, SCK, MOSI, MISO, IRQ);
- P3.4-P3.7:8位拨码开关(DSHP08TSGET, C40738),用于设置全局显示模式(如“文字滚动”、“呼吸渐变”、“定点闪烁”)。
触摸交互:AM01B_W为专用电容触摸IC,通过I²C向MCU上报按键ID与状态。相比MCU直接扫描,其优势在于抗干扰能力强、功耗低(待机电流<1μA)、支持多点触控。PCB设计时,触摸焊盘呈圆形,直径8mm,周围保留2mm隔离带,覆铜接地,确保稳定触发。
显示单元:1.28寸圆形OLED(分辨率128×128),采用SSD1315驱动芯片。圆形裁切非标准,需定制FPC排线与背板。显示内容包括:当前模式图标、已选从机地址、电池电量指示、指令发送状态动画。图形资源以字模数组形式存储于Flash,通过DMA加速SPI传输。
电源管理:采用TP4056充电管理IC配合DW01A保护板,支持Micro-USB输入(5V/500mA)对502030锂电池(3.7V/150mAh)充电。系统工作电压范围3.0~4.2V,MCU内置LDO稳压至2.4V,确保宽电压下时钟精度。
3.2 从机硬件:微型化与高集成度挑战
从机设计核心矛盾是:在Φ36mm直径、厚度<15mm的极限空间内,集成MCU、无线模块、RGB LED、电池及全部被动器件。其PCB为双面沉金工艺,厚度0.6mm,采用高密度布局与0201封装器件。
主控MCU:STC8H1K16(C914617),SOP-16封装。选择逻辑清晰:仅需3个IO驱动RGB LED、1个IO读取拨码地址、1个IO接收IRQ中断、1个IO用于SPI通信,总计6个IO足够;16KB Flash存储固件与基础颜色表;1KB RAM满足中断上下文与少量变量。其超低功耗特性(停机模式电流<0.5μA)是延长锂电池寿命的关键。
RGB LED与驱动:XL-5050RGBC三色集成灯珠(C2843868),Φ5mm,共阴极结构。R/G/B三色芯片独立引出,分别连接MCU的P1.4、P1.5、P1.6引脚。驱动方式为软件模拟PWM:利用STC8H1K16的PCA模块(可编程计数器阵列)产生3路独立8位PWM波形,频率设为1kHz,避免人眼可见闪烁。亮度通过修改PCA捕捉/比较值动态调节,支持256级灰度。
地址配置:8位拨码开关(DSHP08TSGET)直接焊接于PCB边缘,8个触点对应P1.0-P1.7。上电时MCU读取P1口电平,高电平为1,低电平为0,组合成8位地址。为防止悬空,所有拨码输入端均配10kΩ下拉电阻。
无线模块布局:AS01-ML01S模块置于PCB中心偏下位置,天线馈点正对PCB边缘开槽,形成微带天线。模块供电经0.1μF陶瓷电容滤波,紧邻VCC引脚。IRQ引脚走线最短,直接接入P1.0(CMP+),避免信号反射。
电池安装:PCB预留Φ20mm圆形凹槽,深度1.2mm,用于嵌入502030锂电。电池正负极通过0.5mm厚弹片接触PCB镀金焊盘,弹片自带防反接凸起。整个从机装配后,总厚度控制在14.5mm,可严丝合缝嵌入标准乒乓球(内径39.5mm)。
4. 软件实现与关键算法
4.1 主机固件:触摸驱动与动态信道调度
主机软件基于STC-ISP开发环境,采用C语言编写,主循环结构清晰:
void main(void) { SystemInit(); // 系统时钟、IO、外设初始化 OLED_Init(); // OLED屏幕初始化 Touch_Init(); // AM01B_W触摸IC初始化 RF_Init(CHANNEL_DEFAULT); // AS01-ML01S初始化,默认信道 ShowWelcome(); // 显示欢迎界面 while(1) { if (Touch_GetKey() != KEY_NONE) { // 检测触摸中断 ProcessTouchKey(); // 处理按键逻辑 } if (g_SendFlag) { // 发送标志置位 SendCommandToSlave(g_TargetAddr, g_CmdCode); g_SendFlag = 0; } Delay_ms(20); // 主循环延时 } } void ProcessTouchKey(void) { switch(g_KeyCode) { case KEY_ADDR_SET: // 地址设置键 g_TargetAddr = GetNextAddr(); // 递增地址 UpdateOLEDAddrDisplay(); break; case KEY_MODE_SET: // 模式设置键 g_CmdCode = CycleMode(g_CmdCode); // 循环切换命令码 UpdateOLEDModeDisplay(); break; case KEY_SEND: // 发送键 RF_SetChannel(GetChannelByAddr(g_TargetAddr)); // 动态切信道 g_SendFlag = 1; break; } }核心在于GetChannelByAddr()函数,其实现为查表法:
const uint8_t addr_to_channel[256] = { 25,26,27,...,119,120,121,122,123,124,125,126,127 // 共256项,按地址顺序填充 }; uint8_t GetChannelByAddr(uint8_t addr) { return addr_to_channel[addr]; }此表在编译时固化于Flash,访问零开销。信道切换通过SPI写入AS01-ML01S的RF_CH寄存器(地址0x05)完成,耗时<100μs。
4.2 从机固件:高优先级中断与低功耗运行
从机软件设计以“中断驱动、事件响应”为原则,最大限度降低CPU占用:
- 主循环:仅执行
while(1) { LPMODE(); },进入STC8H1K16的掉电模式(Power Down Mode),电流<1μA; - IRQ中断服务程序(ISR):当AS01-ML01S拉低IRQ引脚,触发CMP比较器中断(最高优先级),MCU立即退出掉电模式,执行以下操作:
- 关闭所有中断(EA=0);
- 读取AS01-ML01S STATUS寄存器,确认RX_DR标志;
- 连续读取RX_FIFO,获取6字节数据帧;
- 校验CRC(XOR累加);
- 提取地址字节,与本地拨码值比对;
- 若匹配,解析命令字,更新PCA PWM值;
- 清除IRQ,重新进入掉电模式。
关键代码片段:
#pragma vector=0x13 // CMP中断向量 void cmp_isr(void) __interrupt(19) { uint8_t status, rx_buf[6]; EA = 0; // 关总中断 status = RF_ReadReg(STATUS); // 读状态 if (status & (1<<RX_DR)) { // 确认接收中断 RF_ReadRXBuf(rx_buf, 6); // 读取6字节 if (CheckCRC(rx_buf)) { // CRC校验 if (rx_buf[1] == LOCAL_ADDR) { // 地址匹配 SetLEDColor(rx_buf[2]); // 执行命令 } } } RF_WriteReg(STATUS, (1<<RX_DR)); // 清RX_DR标志 EA = 1; // 开总中断 PCON = 0x02; // 重新进入掉电模式 }SetLEDColor()函数根据命令字查表设置PCA模块的PWM占空比。例如命令0x01对应纯红(R=255,G=0,B=0),则设置PCA0捕获/比较寄存器为0xFF00;命令0x07对应白光(R=G=B=255),则三路均设为0xFF00。所有颜色组合预存于CODE区常量表,避免运行时计算。
4.3 乒乓雾化光学设计:低成本提升显示质量
从机外壳采用标准白色乒乓球,其塑料材质经打磨后形成均匀漫反射表面。这一设计绝非权宜之计,而是经过光学验证的主动优化:
- 未经处理的透明球壳会产生强烈镜面反射,LED直射光斑刺眼且不均匀;
- 经细砂纸(800目)手工打磨内壁后,光线经多次散射,出射光强分布符合Lambert余弦定律,视角达160°;
- 雾化层厚度约0.1mm,对2.4GHz信号衰减<0.5dB,不影响通信;
- 成本几乎为零,且赋予从机温润、柔和的视觉质感,远超普通LED灯珠的生硬感。
实测表明,相同LED驱动电流下,雾化球壳的中心亮度下降约30%,但边缘亮度提升300%,整体均匀性指数(UI=最小亮度/最大亮度)从0.25提升至0.82,显著改善观感。
5. BOM清单与成本分析
系统BOM按功能单元划分,价格基于2022年立创商城公开报价(含税),批量采购(≥100PCS)可进一步下浮。
| 类别 | 器件 | 料号 | 单价(元) | 数量/单元 | 小计(元) | 说明 |
|---|---|---|---|---|---|---|
| 主机 | STC8H3K64S4 | C2901852 | 8.23 | 1 | 8.23 | 主控MCU,LQFP-32 |
| AS01-ML01S | C84802 | 16.72 | 1 | 16.72 | 2.4G模块,含天线 | |
| 1.28"圆形OLED | — | 32.00 | 1 | 32.00 | 某宝定制,含FPC | |
| AM01B_W触摸IC | C723855 | 0.66 | 1 | 0.66 | I²C接口,8通道 | |
| SK12D07VG3拨动开关 | C431547 | 0.11 | 1 | 0.11 | 电源开关 | |
| DSHP08TSGET拨码 | C40738 | 3.96 | 1 | 3.96 | 8位,1.27mm间距 | |
| 502030锂电池 | — | 2.00 | 1 | 2.00 | 3.7V/150mAh,某宝 | |
| PCB+SMT | — | 8.00 | 1 | 8.00 | 双面沉金,含贴片 | |
| 主机小计 | — | — | — | 71.68 | — | |
| 从机 | STC8H1K16 | C914617 | 3.23 | 1 | 3.23 | 主控MCU,SOP-16 |
| AS01-ML01S | C84802 | 16.72 | 1 | 16.72 | 同主机模块 | |
| XL-5050RGBC LED | C2843868 | 0.19 | 1 | 0.19 | 三色集成,共阴 | |
| DSHP08TSGET拨码 | C40738 | 3.96 | 1 | 3.96 | 地址设置 | |
| 502030锂电池 | — | 2.00 | 1 | 2.00 | 同主机 | |
| PCB+SMT | — | 5.00 | 1 | 5.00 | Φ36mm双面,高密度 | |
| 乒乓球外壳 | — | 0.30 | 1 | 0.30 | 批量采购价 | |
| 从机小计 | — | — | — | 31.40 | — |
注:主机成本不敏感,未计入研发分摊;从机成本按150套批量测算,PCB+SMT单价已含模具费摊销。实际量产时,AS01-ML01S可替换为更低价GS01-S(¥4.98),单台成本可降至22.5元,较市售电子蜡烛(¥16-25)仍具竞争力。
6. 工程实践与经验总结
本项目从立项到求婚落地仅历时两个月,其快速迭代能力源于对“够用即止”原则的坚守。诸多设计决策并非技术最优解,而是工程约束下的务实选择:
- 放弃蓝牙/WiFi:虽开发资源丰富,但模块成本高(>¥20)、功耗大(待机>100μA)、协议栈臃肿,与“百节点、长续航”目标相悖;
- 坚持拨码开关而非EEPROM地址:EEPROM需额外I²C通信、写入寿命有限、增加BOM,而拨码开关零成本、绝对可靠、地址直观可见;
- 不采用专用LED驱动IC:如TM1804等,虽简化设计,但成本增加¥0.8且需额外PCB面积,而STC8H1K16的PCA模块完全胜任三路PWM;
- 圆形OLED非必需:矩形屏成本更低,但圆形契合“球状从机”主题,强化系统整体美学一致性,属情感化设计范畴。
最大的技术收获在于验证了“物理层优化优于协议层堆砌”的理念。当面临百节点通信瓶颈时,团队没有陷入MAC层重传、退避算法等复杂方案,而是回归射频本质,用信道隔离这一最朴素的物理手段解决问题。这印证了一个硬件工程师的基本信条:真正的鲁棒性,永远根植于对物理世界的深刻理解与敬畏。
项目最终价值不仅在于求婚成功,更在于它提供了一种可复用的微型无线节点设计范式——在Φ36mm空间内,以<¥32的成本,实现可寻址、可编程、可扩展的RGB显示功能。这套方案已延伸至毕业设计展示、实验室设备状态指示、小型艺术装置等多个场景,证明其生命力远超单一事件。