在智能照明这个圈子里摸爬滚打了几年,去年我们团队立项做了一套灯控方案,内部项目代号就叫“伦茨科技”,核心其实很朴素:一颗支持蓝牙BLE 5.2的SoC,加几路LED驱动,通过手机App配网、Mesh组网、语音联动,最后覆盖到家庭筒灯、灯带、商业办公灯具这类场景。做之前我们其实把Wi-Fi、Zigbee、私有2.4G都翻来覆去对比过,最后整套方案锚定在BLE 5.2上,不是因为它新,而是它把照明行业那几个老痛点点得很准:低功耗、低物料成本、手机直连免网关、规模化组网,四个条件缺一不可。这篇文章就把这套方案从选型到落地的完整思路拆开讲,包括一些量产测试和现场排查的坑,适合正在做智能照明、智能家居硬件,或者准备把产品从遥控方案升级到蓝牙方案的朋友参考。
1. 选型阶段:为什么这套灯控方案最后锁死BLE 5.2
1.1 智能照明真正要解决的五个核心问题
灯控产品和我之前接触过的一些智能硬件不太一样,它的使用场景非常“极端”:要么是几十个灯泡同时被一个App控制,要么是一个遥控器就要管整个房间的灯,而且用户对延迟的忍耐度极低,按一下开关,灯必须立刻有反应。
我把当时整理的需求清单简化成这么几条:
- 低功耗:很多灯虽然常供电,但遥控器、感应灯、应急灯这类周边设备是电池供电的,协议功耗直接决定电池能用几个月还是一年。另外即便灯具常供电,控制板待机功耗高了也过不了能效测试。
- 低成本:灯具行业毛利本来就薄,控制模组多1块钱都是压力,所以协议方案要尽可能用低成本芯片和通用器件。
- 大规模组网:家庭里二三十个灯具是常态,商用场景可能有几百个,要求协议能支撑组网、分组、场景联动,而且不能把网络搞得复杂到没法维护。
- 手机直连:用户下意识会用手机去控制新买的灯,如果还要先去买一个网关、配一个音箱,心里就会打折扣。所以“免网关,手机直接控”是体验上的一个甜点位。
- 稳定可靠:照明设备装好以后可能要使用十年,固件升级、断网恢复、抗干扰这些都得考虑进去。
拿这几条去卡协议,结论很明显。Wi-Fi的优势是直连和无缝上网,但功耗偏高,模组成本也压不下来,而且一个家用路由器承载几十个设备时的并发和稳定性都不乐观;Zigbee的Mesh能力非常成熟,低功耗与自组网都做得很好,但手机没有原生支持,用户必须借助网关,等于在产品和用户之间强行加了一道门槛;私有2.4G方案成本低、遥控器好用,但不同厂商之间完全不兼容,手机端控制体验参差不齐,想接入语音助手也很被动。
最后落点自然就到了蓝牙BLE上,特别是协议栈已经发展到5.2版本的今天,BLE几乎是照明控制里的“最大公约数”。
1.2 BLE 5.2不只是版本升级,它解决了几个现实问题
先澄清一个容易误解的点:很多朋友直接把BLE 5.2和“蓝牙Mesh”画等号,这是不对的。BLE 5.2是蓝牙核心规范版本,Mesh则是建立在BLE之上的网络层技术。我们选BLE 5.2,是因为这一代协议栈在物理层、链路层和应用层都有实打实的提升,灯控方案可以沾到不少红利。
最直观的是2M PHY。蓝牙5.0开始支持2Mbps的物理层速率,5.2的协议栈自然沿用。对灯控来说,2M PHY带来的最大收益不是所谓“下载速度快”,而是能把配网和固件升级的时间大幅缩短。尤其是批量配网时,一个设备如果要用1M PHY传几百字节的配网数据,几秒钟可能就超时了;换了2M PHY之后,配网时间几乎缩短一半,现场体验差别很明显的。
第二个是Coded PHY。简单理解就是通过冗余编码把传输距离拉长,代价是速率降下来。对灯泡、灯带这类经常装在墙角、天花板或走线槽里的设备来说,2M PHY负责高速传数据,Coded PHY负责在复杂环境下兜底,保证设备不至于因为“隔了一堵墙”就彻底失联。
第三个是广播扩展和辅助广播。BLE Mesh的消息本质上是基于广播泛洪的,广播信道是否够用、信标能不能被高效扫描到,直接决定配网成功率和消息延迟。BLE 5.2里广播通道的扩展能力更强了,扫描端也更不容易漏包,这套广播机制对Mesh网络和未配网设备发现都有实际帮助。
还有两个5.2新增的特性,EATT和LE Power Control,很多人忽略,但对灯控有一定价值。EATT允许ATT层的并行事务处理,App和节点通信时不会因为一个慢操作把整条链路堵死;LE Power Control则支持动态调整发射功率,灯控设备能根据距离和信号质量自动降功率,省一点电,也降低对其他设备的干扰。至于LE Audio和同步信道,灯控本身不一定用得到,但后续如果想做“灯光随音乐律动”这类氛围功能,5.2的同步信道就派上用场了。
1.3 成本与生态的账,得算得明明白白
协议选型不能只看技术参数,成本账和生态账往往才是决定项目生死的关键。
BLE灯控模组的物料成本,现在已经被芯片厂商打得很低了,主流支持BLE 5.2的SoC价格和几年前支持BLE 4.2的芯片相差无几。再加上BLE芯片外围器件简单,一颗SoC加晶振、天线、匹配电路和LED驱动就能完成整个控制板,PCB面积可以做得很小。对于灯具厂来说,这种改动压力是很小的。
生态方面更不用说。手机系统都对BLE有原生支持,App配网基本不需要用户手动开蓝牙配对,体验接近Wi-Fi设备的配网流程。而且BLE设备能直接通过手机的蓝牙连接做配置和调试,不需要额外购买调试器之外的网关设备。后续再接智能音箱、语音助手,走的也是成熟的云端转网关或手机中转链路,生态通路非常完整。
所以总结下来,BLE 5.2不是“技术最先进”的选择,却是“综合代价最小”的选择。这个结论在我们的方案里得到了验证:灯具厂客户不需要重新养一支射频团队,就能把产品线从传统遥控灯平滑升级到智能灯。
2. 组网与通信架构:从二三十个灯泡到上千节点的演进逻辑
2.1 星型广播方案:小规模照明的主航道
并不是所有灯控场景都需要组网。一个普通家庭一个客厅,灯泡加灯带总共十几个,这种规模用蓝牙Mesh反而有点重。所以我们方案里保留了一条更轻的路线:星型广播控制。
星型广播的思路很简单:手机直接发一个广播包,广播包里带上设备地址或组地址、开关状态、亮度和色温信息,灯具在扫描到符合自己地址的广播后,立刻执行指令,不需要回包确认。
这种模式的优点是延迟低、实现简单、功耗也容易控制。但缺点同样明显:广播包本身不保证可达,设备一多或者现场2.4G环境一拥挤,就有漏控的可能,而且没有确认机制,App端无法知道这盏灯到底有没有执行成功。所以我们通常只在两类产品上用这种模式:一类是低成本单灯控制的入门款,另一类是需要极低延迟的“纯遥控”场景,比如用遥控器控制客厅主灯。
如果要做成规模化的场景体验,比如回家模式、睡眠模式、全屋灯效同步,星型广播就不太够用了,这时候需要让网络具备“多跳”和“自组织”能力,也就是Mesh组网。
2.2 Mesh泛洪组网:规模化照明的骨架
BLE Mesh采用的是泛洪式网络,这一点和传统意义上的路由网络很不一样。传统路由网络里,消息从A到Z需要预先计算出路径,中间的节点负责转发;而Mesh泛洪则是把消息广播出去,凡是开启了中继功能的节点,都会把消息继续往下传,直到消息的TTL(生存时间)归零为止。
选泛洪而非路由,我觉得是蓝牙联盟一个很聪明的决定。照明设备的节点往往是固定的、静态的,但现场环境千差万别,如果硬要做路由计算,任何一个节点掉线都可能导致整条链路失效,运维成本会非常高。泛洪网络虽然让消息在物理上多传了几跳,但网络韧性很强,某个中继节点断电了,消息自然会被其他邻居节点继续转发,灯具照样能收到指令。
当然泛洪也有代价,最典型的是消息冗余。如果每个节点都转发所有消息,网络流量会爆炸,所以Mesh协议里引入了TTL、消息缓存和网络消息去重机制。在我们的方案里,中继节点一般会把TTL限制在3到5跳,灯控指令只在小范围内扩散,避免整个网络被无效消息淹没。
2.3 节点角色与消息模型:谁在转发、谁在睡觉、谁在控制
Mesh组网里有一个概念理解透了,方案实现起来会非常顺手:节点角色分工。
普通节点:最基础的灯具节点,订阅相关组地址,收到消息后执行开灯、关灯、调光动作。 中继节点:除了执行灯控指令,还负责转发消息。一般选常供电的灯具来做。 低功耗节点:电池供电的设备,比如遥控器、感应传感器,平时休眠,定期唤醒去“询问”它的Friend节点有没有新消息。 Friend节点:给低功耗节点暂存消息的设备。灯泡这类常供电设备很适合做Friend,它在低功耗节点休眠时代收消息,等对方来poll。 代理节点:负责把蓝牙Mesh世界和智能手机“翻译”到一块。手机本身不是Mesh节点,它用一个Proxy Protocol连上代理节点,这样整个Mesh网络的寻址控制就通过代理节点进入网络。
这套角色分配的设计逻辑,本质是“让能供电的设备多干活,让电池设备少消耗”。我们在实际部署中,会把客厅主灯、走廊灯这种常供电的产品默认开启中继和Friend功能,而遥控器、人体传感器关闭中继,进入低功耗模式。
消息模型方面,BLE Mesh使用的是发布/订阅机制。设备不关心谁发的消息,只关心自己订阅的地址是不是匹配。比如我把客厅所有灯订阅到一个组地址0xC001,App向这个组地址发布“打开”指令,客厅灯就都亮了;卧室灯订阅的是另一个组地址,不会被误开。这种模型做分组、场景和定时控制都非常灵活,不用维护复杂的设备列表。
3. 灯控设备的核心实现:从原理图到配网上线
3.1 SoC选型、天线与电源设计要点
SoC选型时,我的第一原则是不要把SoC当作“CPU”来选,而是要当作“射频系统”来选。灯控设备对算力要求不高,一个简单的Cortex-M内核足够跑协议栈和应用逻辑,真正决定产品上限的是射频性能和低功耗表现。
我们评测过的芯片,重点看几个指标:
- 发射功率和接收灵敏度:在常见的20dBm、8dBm、0dBm几个档位下,有没有足够的链路余量。接收灵敏度一般要达到-95dBm以下,甚至更优。
- Flash和RAM大小:BLE 5.2协议栈加Mesh profile会吃掉不少Flash,如果不做OTA预留,固件升级就是空谈,所以Flash起码要预留256KB以上。
- 外围接口数量:控制灯需要PWM、ADC、I2C或SPI,至少要保证有足够的定时器通道。
天线设计是灯控方案里特别容易被低估的一环。灯具外壳千奇百怪,金属外壳、金属散热片、玻璃灯罩都会对天线造成干扰。如果直接用参考设计里的PCB天线,大概率在现场会出现连接不稳定的问题。我们内部的做法是要求硬件工程师在打样阶段就把整灯装进真实外壳里做天线调试,而不是在裸板上测到指标好看就收工。必要的时候改用陶瓷天线或外置天线,宁愿多几毛钱成本,也不能让用户看到“满格信号却连不上”的糟心体验。
电源方面,灯控板经常和AC-DC驱动电源放在同一个腔体里,驱动电源的纹波和开关噪声会直接影响射频和调光。我们会在控制板的电源输入端加一级LC滤波,同时在靠近SoC的地方放一个低ESR的MLCC电容。电源地和射频地要处理好,否则天线性能会被电源噪声拖累。
3.2 PWM调光调色的硬核细节
灯控里最见功力的部分,其实是PWM调光调色。很多团队把灯点亮之后,发现亮度调节曲线极其生硬、低亮度时抖动闪烁,这就是PWM设计没做好。
先讲频率选择。PWM调光频率如果太低,人眼能明显感知闪烁,手机摄像头也会拍出条纹。一般建议主调光PWM频率至少做到1kHz以上,但也不是越高越好,PWM频率太高会带来两个新问题:一是LED驱动器开关损耗变大,效率下降;二是可能产生可闻噪声,尤其是陶瓷电容在音频范围内啸叫。我们在方案里默认用4kHz到16kHz之间可配置,量产时按实际灯具测试结果锁定最优频率。
再讲Gamma校正。LED亮度与电流的关系基本是线性的,但人眼对亮度的感知是接近对数的,也就是说,如果直接把PWM占空比从0%均匀调到100%,人眼看到的是“前面好像没怎么变,后面突然刺眼”。解决方法是建立Gamma查找表,通常Gamma值取2.2到2.8,把PWM占空比在软件上做一个指数映射。
我们实际做的公式是:
uint16_t pwm_duty = (uint16_t)(0xFFFF * pow(brightness / 100.0f, 2.2));这样用户在App上拖动亮度条时,灯具的亮度变化看起来是均匀的。如果不做这一步,产品在体验评测阶段就会被用户吐槽“调光像开关”。
色温调节也有讲究。双色温方案里,暖白和冷白两路LED不是简单的一路加、一路减,因为两只灯的功率、光通量不同,如果做线性减半,色温变化会出现跳变。正确做法是先建立亮度与色温的二维约束表,指定某个色温目标时,反查两路PWM比例,再叠加亮度Gamma校正。RGB灯带则要做好三通道混色校准,同一个颜色在不同批次LED之间可能有差异,必须要有一套白平衡校准流程。
还有一个容易被忽略的副作用:低亮度时控制器的PWM精度。假设PWM位深是16位,1%亮度对应的占空比大概是655,如果LED驱动电流是100mA,那1%点亮的时候实际电流只有1mA,很容易被电源噪声和LED驱动自身的开关抖动干扰,导致灯在低亮度下闪烁。解决思路是把调光深度限制在1%以上,并在这个区间切换到线性调光模式或使用更精密的恒流调节。
3.3 Mesh配网与设备模型配置实战
灯具从出厂状态到进入Mesh网络,中间要经过配网过程,也就是Provisioning。这一步是很多做灯控的朋友第一次踩坑的地方,我详细拆一遍。
配网的基本流程是这样的:
- 灯具上电后进入未配网状态,周期性地在通用广播信道发出可连接广播,广播包里带有厂商识别信息、设备UUID和OOB信息。
- 手机App扫描到该广播后,发起Provisioning连接,双方通过ECDH交换公钥,生成会话密钥。
- 配网设备(手机)向灯具分配一个单播地址、一个Mesh网络的NetKey和AppKey。
- 灯具被配置为某个网络下的节点后,停止未配网广播,进入Mesh网络正常工作。
这中间最影响成功率的是第一步的广播参数。如果广播间隔太短,待机功耗会飙升;如果间隔太长,手机扫半天扫不到。我们在量产固件里采用动态广播策略:未配网时用100ms间隔广播,配网成功后立刻停止入网广播,进入低功耗状态。
配网完成后,还要给设备配置模型。BLE Mesh灯控设备通常要支持Light Lightness模型、Light CTL模型,这样App才能通过标准模型控制亮度和色温。如果是RGB灯具,还需要Light HSL模型或Light xyL模型。
模型配置的典型动作是:App通过Mesh消息,把灯具节点的订阅地址设置为某个组地址,然后保存到节点的订阅列表中。比如我要让客厅灯订阅0xC001组地址,配网工具会收到类似这样的操作逻辑:
Node Address: 0x0007 Element: 0 Model: Light Lightness Setup Server Subscribe Address: 0xC001 AppKey Index: 0x0001配置完成后,App往0xC001发一条Set消息,灯就执行开灯或调光了。很多灯控方案后期做场景联动,本质上就是提前把一堆灯订阅到不同组地址,再通过场景模型统一触发所有组状态。
这里有一个很实用的经验:灯具在出厂时不要预置任何组地址,由配网时动态配置。如果预置了组地址,在用户首次配网时可能会收到上一任环境里残留的组控制消息,出现“邻居家调到红色,我家灯也跟着变红”这种恐怖故事。
4. 上层应用与生态联动:App、语音助手与场景体验
4.1 App配网与控制的核心链路
App是整个灯控方案里用户接触最多的界面,配网和控制链路如果做得不顺,前面的硬件功夫都白搭。
配网链路其实是一条“三明治”结构:手机蓝牙扫描未配网广播、建立BLE连接、执行Mesh Provisioning。App端最影响成功率的是扫描策略。BLE的广播信道集中在2.4G频段里,和Wi-Fi有重叠干扰,尤其在用户家里同时跑着好几十个2.4G设备时,扫描很容易漏包。我们的App会采用连续扫描和二次确认机制:第一次扫描发现设备后,不急着连接,先做一次短暂停顿,让信道清一清,再发起连接,这样成功率能提高不少。
控制链路则分为两条:一条是本地的Mesh Proxy通道,手机通过BLE连接某个代理节点,将控制消息注入Mesh网络;另一条是通过云端中转的家庭局域网通道,手机先把指令发给云服务器,云服务器再转发到家里的蓝牙网关,网关再注入Mesh网络。本地通道延迟更低,适合开灯关灯这类即时操作;云端通道适合远程控制和语音助手联动。
App界面上最基础的几个交互,我建议开发时一定要打磨到位:亮度滑条要顺滑、渐变时间要可调、分组管理要一目了然。用户最容易感知的“高级感”,往往来自调光渐变。我们默认把开灯渐变时间设为200ms,关灯渐变时间设为500ms,既不会让人着急,也不会拖沓。色温调节则按300K为步进做离散调节,避免用户微调时觉得手感飘忽。
4.2 OTA升级:大规模设备升级的坑与对策
灯具产品用十年,固件必然要迭代。BLE Mesh的OTA升级路线有两条:
单设备OTA:手机直连单个设备,先把固件包全量传输过去,再执行Flash写入。这种方式适合数量少的场景,优点是实现简单,缺点是要一台一台升。
Mesh DFU:固件包先传到Mesh网络里的目标分组,利用Mesh广播分发给所有在线设备,设备之间互相转发,相当于一次广播就把整个分组的固件包都补齐了。这种方式适合二三十个以上设备同时升级,能节省大量时间。
我们在做Mesh DFU时踩过一个大坑:升级过程中如果有一部分设备没及时收到固件包,或者收到一半断电了,这些设备会处于“半升级”状态,网络里就会出现一部分设备是新版本协议,一部分是旧版本,导致新旧设备之间的灯具配置模型不兼容。
对策是在固件里写了版本回退机制:固件包写入前做CRC校验,写入后做版本标记,下次上电时如果发现版本标记异常,自动从备份区恢复旧固件。同时App端会强制要求升级过程保持灯具供电,并限制升级必须在同一局域网或同一Mesh分组内进行。
4.3 语音助手与智能家居生态接入
灯控产品做出来后,用户一定会问:能不能用小爱同学、天猫精灵、HomeKit控制?
接入方式根据平台不同略有差异:小爱和天猫类平台,一般走“蓝牙 Mesh 网关”路线,设备通过网关接入平台云,平台通过技能或App同步设备数和状态;HomeKit则是走本地协议,手机通过HAP与设备交互,对芯片的要求更高,需要经过认证。
我们在方案里的做法是:优先支持两个主流国内语音平台,通过一个低成本蓝牙网关把Mesh网络和云端连接起来。网关硬件其实就是一颗带Wi-Fi和BLE的模组,它一边以正常节点身份加入Mesh网络,一边连接云端,相当于把Mesh消息“翻译”成云消息。
这里面有几个细节值得注意:
- 云端和设备状态同步是异步的,设备状态变化后必须主动向网关上报,网关再同步云端,否则App和语音助手会显示“幽灵状态”。
- 语音控制对延迟容忍度比App更低,所以网关收到云指令后要尽快注入Mesh网络,不要让消息在网关端排队。
- 家庭场景的断电恢复要处理好,所有灯具上电后必须恢复上次的开关/亮度/色温状态,或者至少恢复到一个约定好的“默认状态”,不能一断电就回到出厂状态,否则用户会疯掉。
5. 量产测试与现场问题排查实录
5.1 出厂前必须盯住的测试项
灯控产品到了量产阶段,不能只在实验室里“能亮”就算完。我们内部有一套出厂测试清单,按优先级排下来大概是这样的:
射频指标测试:发射功率、接收灵敏度、频偏、谐波。这项测试需要用到标准BLE测试仪,抽检比例不能低,因为批量出现频偏超标的IC不是没遇到过。频偏超标会导致连接极不稳定,轻则连接断断续续,重则根本连不上。
功耗测试:待机电流、广播电流、Mesh收发电流、深度睡眠电流。灯具虽常供电,但控制器本身的待机功耗如果超过几十mA,整灯能效就会被打问号。我们要求常供电灯具待机电流在低功耗模式下做到几十微安级别,电池供电遥控器则可以做到10微安以下。
调光参数测试:每个出厂产品都要烧录Gamma校正表,并验证最大亮度、最低调光深度和色温范围这三项是否在规格范围内。很多灯具厂因为不同批次LED光通量有差异,导致同一批产品亮度不一致,这个一定要在产线上校准,而不是指望软件统一。
互操作测试:用市面上主流品牌的几款手机做配网、控制、OTA的抽测。蓝牙协议栈兼容性的坑,只有在跨手机品牌时才会暴露出来。
5.2 配网失败、节点离线、调光闪烁等高频问题
| 问题现象 | 常见根因 | 排查思路与解决对策 |
|---|---|---|
| 手机扫不到设备 | 广播间隔过长、设备处于休眠状态、2.4G信道拥塞 | 缩短未配网状态广播间隔,配网完成前不要休眠;换信道重试;检查设备是否已经进入Mesh网络 |
| 配网超时失败 | ECDH交换慢、连接中断、多设备同时配网冲突 | 配网过程提高连接通信优先级,限制一次性并发配网数量,分段批量配网 |
| 节点离线但设备供电正常 | 中继节点掉线、消息TTL不够、设备进入休眠后找不到Friend | 开启冗余中继,增加常供电设备中继数量;调大TTL;检查Friend轮询周期 |
| 调光时亮度跳变 | Gamma校正表未生效、PWM占空比更新未加渐变 | 烧录Gamma表,PWM占空比更新采用软件渐变限幅 |
| 低亮度下灯光闪烁 | PWM频率不够高、电源纹波大、LED驱动在低电流下不稳定 | 提高PWM频率到8kHz以上;调整电源滤波;检查驱动IC最小恒流值 |
| App控制延迟大 | Mesh消息经过中继跳数多、网络同时有大量无效广播 | 优化组播范围,限制中继节点数量,降低无关广播消息频率 |
| 升级后部分设备失联 | Mesh DFU过程中断电或包丢失,新旧版本配置不一致 | 升级前做电量/供电检测;固件包签名验证;加入版本回退机制 |
拿配网失败来说,我们的排查顺序一般是:先看设备广播是否在合理周期内发出,再看手机扫描结果里是否能看到厂商识别字段,最后才怀疑协议栈本身。经验是,90%的配网失败问题都出在广播参数或环境干扰上,而不是真的无法通信。
节点离线问题则要分场景。如果只有一两个节点离线,最可能是它依赖的中继节点掉电了,因为Mesh是多对多的泛洪网络,通常会有多个中继可选;如果是一大片节点同时离线,那大概率是网关或代理节点出了问题,要么是网关断电,要么是网关蓝牙连接被占满了。我们会要求网关设备具备自监控能力,检测到异常连接后主动重启蓝牙协议栈,恢复代理功能。
调光闪烁这个问题,很多团队会一开始就怀疑PWM频率,但我在现场排查时发现,一半以上的闪烁案例其实是电源纹波造成的。LED驱动电源在小电流下输出纹波会明显增加,导致LED亮度在小范围内高频波动。对策通常有两个方向:一是把最低调光电流抬高,不允许调到1%以下;二是在驱动输出端并联一个RC吸收网络,把纹波压掉。当然,如果灯具用的是非隔离驱动,还要额外注意调光MOS管的栅极驱动信号是否存在振荡。
5.3 功耗与发热的长期稳定性问题
灯控板贴在灯具铝基板或驱动电源旁边,长期温度可能到七八十摄氏度,所以元器件选型要按工业级余量来。我们遇到过一颗SoC在高温环境下射频性能漂移的案例,虽然芯片标称工作温度没问题,但天线匹配电压变化后,发射功率明显下降。后来在量产软件里加了一个温度补偿模板,通过内置温度传感器动态调整射频参数,问题才解决。
低功耗设备的另一个坑是“看似休眠,实际没休眠”。原因是某个外设没有在设备进入睡眠前关闭,比如LED驱动芯片的使能引脚悬空,导致漏电流达到毫安级。我们的做法是在睡眠模式下,将LED驱动IC的EN引脚强制拉低,把所有非必要外设时钟关闭,再进入协议栈的系统Off模式,同时用定时器唤醒做周期心跳。现场测试下来,一颗纽扣电池驱动的遥控器,如果一天操作十次,续航做到一年以上是可行的。
还有一个容易被忽略的点,就是灯具断电再上电后,控制器的启动电流和射频发射的时序。如果控制器一上电就以最大功率发射Mesh消息,而驱动电源还在软启动过程中,容易造成系统电压跌落、复位重启。我们会建议在固件里做“延迟入网”处理——上电后先等主电容稳定,再初始化蓝牙协议栈,最后才加入Mesh网络,这样能规避相当一部分批量复位问题。
写在最后的一点个人经验
这套方案做完以后,我最大的体会是:BLE灯控能不能跑顺,往往不在协议栈本身,而在供应链细节和现场网络规划。天线匹配、PWM调光曲线、现场信道选择这三件事,任何一个没做好,都会变成后续的客服工单。灯具产品做的是“装进去十年不用管”的生意,所以研发阶段多投入一些精力在硬件细节上,比后期到处救火要划算得多。
如果让我再选一次,我依然会走BLE 5.2 Mesh这条路线,但一定会把现场勘测和网络规划提前到方案阶段,而不是等灯具装好后再改。最后再分享一个很实用的小技巧:现场验收时,一定要用至少三到四种不同品牌的手机去做配网和控制的实测,蓝牙兼容性问题比绝大多数人想象的都要多;同一颗芯片在A手机上很正常,在B手机上可能连广播都扫不到,这是很现实的事。