尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

STM32双无线物联网开发套件:蓝牙配网与LPWAN远传实战解析

STM32双无线物联网开发套件:蓝牙配网与LPWAN远传实战解析 最近在做一套远端环境监测节点遇到了一个很典型的尴尬现场用手机蓝牙调试很方便但数据要传回几公里外的网关蓝牙就无能为力了换上LPWAN数据能传了可每次给设备配网、改参数又要抱着笔记本电脑跑到现场别提多痛苦。STMicroelectronics的BT/LPWAN IoT开发套件恰好把这两条路同时铺在了一块板子上本地用蓝牙做近场配置和调试远端用LPWAN做低功耗数据回传。这套组合对做智能家居、资产追踪、智慧农业的人来说解决的不是“多一块无线芯片”的问题而是把整个产品原型的远程运维链路补齐了。我开始认真研究这套方案是在一次实际项目选型时。当时对比了各种单模方案发现要么短距好配但传不远要么传得远但配置流程复杂。ST这套开发套件最难能可贵的地方是用一颗主控同时管理蓝牙和LPWAN两条链路把“近场交互”和“远距离传输”用一个统一的应用层接口带起来。这篇文章不打算讲成官方Datasheet的翻译稿而是从我实际跑通板子、调低功耗、最后把它塞进真实产品原型的角度聊聊这套BT/LPWAN IoT Dev Kit到底该怎么用以及有哪些文档和参考设计里不会写的坑。1. 一个远传设备的选型困境绕不开短距与远距两条腿1.1 蓝牙什么都好就是传不远BLE已经成了智能设备本地交互的事实标准。手机扫码、App发现设备、配对、下发参数这一套用户早就习惯了。蓝牙的功耗可以做到很低广播态、连接态的峰值电流也不算夸张特别适合做设备初次配网时的“近场握手”。但在实际项目中BLE最让人头疼的就是覆盖距离。普通BLE在室内隔两堵墙就掉线空旷环境到10米左右也开始不稳定。就算加了PA也很难做到几百米的可靠覆盖。你想用一个环境监测节点把数据传到楼下的网关用BLE几乎要敷设一堆中继器还不如直接拉网线。我做第一版原型的时候就是纯BLE方案。设备装在厂区边上网关在办公室直线距离不到200米但中间隔了两堵混凝土墙和几条管道。结果数据丢包率大概在30%左右而且设备因为反复重连电池掉得很快。这个问题不是堆功率就能解决的BLE的物理层设计目标本来就是低功耗短距你不能指望它在恶劣环境下干LPWAN的活。1.2 LPWAN传得远但本地调试和配网让人头疼LPWAN这个词涵盖的范围不小典型的有LoRa、Sigfox、NB-IoTST的套件里最常用的是Sub-GHz LoRa链路。LoRa的优点非常直观灵敏度高、穿透性强、单网关覆盖半径在开阔环境可以到几公里而且协议栈支持ACK和自适应数据率。用它做数据回传基本不用在现场复杂布线。但LPWAN的痛点也很真实设备要入网需要配置频段、频点、设备地址、应用会话密钥等一堆参数。如果你做一个带显示器和按键的工业设备可以在本机输入这些参数但更多IoT原型是低成本的传感器节点连显示屏都没有。你让用户抱着USB线去现场烧录或者让维护师傅拿着笔记本电脑蹲在设备旁边配参这体验基本可以用“灾难”来形容。BLE的作用正是在这里补位手机App通过蓝牙把网络参数、传感器阈值、上报周期一股脑发到设备设备保存后就能交给LPWAN通道去干活。1.3 ST把两者塞进同一个开发套件的真正原因我原先以为ST做这个开发套件只是简单地把一颗蓝牙SoC和一颗LPWAN射频芯片放在同一块PCB上。真正摸过板子才发现它们是把两个无线协议栈放在同一个软件框架里协同工作。这样带来的实际好处是应用层只需要面对一套设备管理接口不需要自己处理两个协议栈之间的时间片切换更不用担心两个射频同时收发时的干扰。对做产品的人来说这套板子提供了一个非常关键的原型验证平台。你可以在它上面先验证“手机配置节点采集LPWAN回传”的完整业务闭环看这个交互逻辑是否顺畅再去决定要不要做两个独立的SKU。实际上很多IoT设备的需求本来就是“现场安装时用蓝牙配置一次之后全部走LPWAN”这种主从结构做在单板上是成本最合理的。2. 开发套件的硬件骨架主控、射频与传感器的组合逻辑2.1 主控MCU的定位不是堆算力而是管功耗ST这套开发套件的核心主控用的是自家STM32系列MCU具体型号会根据套件迭代有所不同但设计思路是一致的在满足应用需求的前提下把待机功耗压到最低。做物联网节点最怕的不是算法跑不动而是待机时电流“偷跑”。STM32的低功耗模式比如Stop模式、Standby模式配合RTC唤醒能做到微安级待机这在电池供电场景里非常关键。在跑LPWAN链路时主控大部分时间是睡着的只有收到RF中断或者定时唤醒时才起来处理数据。这套套件的例程里默认就带了一个功耗管理的示例传感器采集周期设为1小时采集完数据通过LPWAN发送发送成功后立即进入低功耗状态实测平均电流可以压到几十微安。如果这两个无线芯片没有一个统一的主控去管理睡眠和唤醒时序各自用自己的定时器低功耗设计会变得非常难切。2.2 BLE与LPWAN射频通道是怎么共存的很多人一听到一块板子上既有BLE又有Sub-GHz LPWAN第一反应是“天线会不会打架”。这个问题要从频率和时序两个维度看。BLE跑在2.4GHz频段LPWAN跑在Sub-GHz频段两者工作频率差了很远物理层的隔离比同频段双模容易得多但这不代表不需要做干扰管理。真正需要处理的其实是底层协议栈的共存机制尤其当两个射频都需要占用MCU资源和无线硬件加速器的时候。ST的软件包里用了一个类似任务调度的方式BLE连接事件和LPWAN发送窗口被放在不同时间片低功耗模式下两者可以分时工作。我在实际测试中发现如果只发送短数据包这种分时工作的效率损失可以忽略不计。但如果你调到一个极端边界比如蓝牙正在做大数据量OTA升级同时LPWAN又需要立即上报告警日志就需要在应用层做优先级决策。ST的文档里建议用BLE为主通道的时候暂时让LPWAN进入待机或者反过来这点非常实用。2.3 板上传感器与接口的选用思路开发套件不可能只放MCU和射频芯片它要让人“开箱即用”地验证创意物联网设备所以板上会集成一组常见的传感器。以我拿到的一版为例板载了温湿度、气压、运动传感器还有几个可以接外部模拟量输入的接口。这个选型思路很聪明环境监测、资产位移检测、智能农业温棚这三个最常见的创意场景基本不用外接传感器就能跑Demo。接口方面Arduino兼容排针和ST自家扩展接口都有。Arduino生态的好处不用多说很多现成的传感器模块可以直接插上去验证ST自己的扩展接口则提供更完整的低功耗外设支持。我在实际项目里是用它接了一个土壤水分传感器和一个翻斗式雨量计通过板载ADC和外部中断就能工作不需要额外写复杂的驱动这对快速验证业务逻辑帮助很大。3. 跑通第一条双无线数据链路从配网到上报3.1 让开发板先“开口说话”固件与SDK的准备拿到套件之后第一步永远不是写业务代码而是把官方SDK、固件升级工具和调试环境搭好。ST的物联网开发板通常用STM32CubeProgrammer来烧录固件IDE我建议直接用STM32CubeIDE它是基于Eclipse的官方工具链省去自己折腾GCC和调试插件的环节。板子连接电脑后先升级板载ST-LINK调试器固件再把SDK里的示例工程导入。这里有个小坑示例工程第一次编译会去拉取一些软件包依赖如果网络不太顺畅可能卡在某个中间件上。我建议在CubeMX里提前勾选好需要的中间件比如BLE协议栈、LoRaWAN协议栈、低功耗管理组件让它在生成工程时把依赖一起拉齐。SDK版本之间也有差异最好用Release Notes里标记为Stable的版本不要一上来就追最新版否则某些驱动接口变了网上搜到的资料大概率对不上。3.2 用手机App完成近场配置的流程接下来就是这套套件最有吸引力的环节用手机App给设备配网。ST官方有一个配网参考App它本质上是一个BLE Scanner加一段自定义服务。设备上电后先进入蓝牙广播态App扫描到设备后会读到设备提供的一个配置服务这个服务里面有几个特征值分别用来接收Wi-Fi配置或LPWAN参数。实际跑一遍流程大概是这样打开App扫描到“STIOT-DEMO-XXXX”这样的蓝牙设备点击连接然后在App的配置页填上LoRaWAN的Device EUI、App EUI和App Key。App把这些数据通过BLE的写特征值接口发过去设备收到后解析并保存到非易失存储然后自动重启并切换到LPWAN入网模式。整过程不到一分钟关键是全程不用拔插线缆、不用连接串口对现场安装维护特别友好。这里提醒一下BLE配置通道一定要做数据校验。ST的示例里App端和设备端都有CRC校验但我见过有人为了省事把校验砍掉结果参数错一位数字设备怎么都入不了网最后查了半天才发现是配置数据被传输错误了。BLE链路本身有CRC但那是在链路层应用层的校验仍然有必要尤其当你是从自己的App而不是官方App下发配置时。3.3 LPWAN上行数据的发送与回调验证配置完成后设备会执行一个LPWAN入网流程。LoRaWAN的设备入网大概需要过OTAA也就是空中激活这个过程会跟正在使用同一网络的服务器做密钥协商。如果你用的是LoRaWAN公共测试网络比如The Things NetworkTTN需要先在它的控制台注册设备填上和板子里一致的Device EUI、App EUI和App Key注册成功后才能入网。入网完成后发送上行数据就很简单了。示例里调用的接口大致是发送一个字节数组然后在回调函数里确认发送状态。我第一次跑通时从TTN控制台看到设备上报的数据包再把板子的按键按一下触发发光二极管基本就知道整条链路是通的。开发套件里的LoRaWAN协议栈默认支持Class A也就是设备下行接收窗口只在每次上行之后短暂打开。做传感器节点用Class A就够了既省电又能保证服务器能下发一些低频控制指令。3.4 双链路切换的软件分工跑通Demo之后需要认真想想两个无线通道到底怎么分工。我的策略是BLE通道只负责“配置、调试、固件升级”这三个近场场景LPWAN通道负责“传感器数据、告警、心跳”这类的远传场景。应用层需要维护一个状态机平时工作在LPWAN模式只有在收到本地命令或者主动进入配置模式时才开启蓝牙广播。这套分工在软件实现上要非常小心不能把两个协议栈的初始化放在同一个全局流程里。我建议把BLE协议栈和LPWAN协议栈都做成可配置开关的中间件默认系统上电先初始化LPWAN传感器采集跑一段时间后如果没有收到手机蓝牙配置请求就继续保持LPWAN模式。一旦检测到BLE配对连接就进入配置模式此时暂停LPWAN发送或延长其上报周期避免两个无线通道抢主控资源。在ST的示例工程里其实抽象了一层“应用业务处理器”它不关心底层是哪个协议栈发数据只关心数据最终从哪个通道走了。这个设计在早期原型阶段看不出优势但等你把产品拆成多个固件版本需要为一个型号同时做“蓝牙单模版”和“蓝牙LPWAN双模版”时这层抽象能省掉大量重复代码。4. 低功耗调优与通信可靠性的实战细节4.1 两种无线协议的空闲功耗差异把板子跑通容易把板子功耗调到能支撑一年两年才是做产品的人真正关心的事。BLE和LPWAN在通信时的峰值电流都不算低但真正拉开差距的是“空闲时谁更省电”。BLE保持连接需要周期性地收发保持连接的数据包也就是说即使没有业务数据双方也要维持链路同步这个电流会一直存在。LPWAN的Class A模式则没有这种持续连接它平时可以让射频完全关闭只在需要发送数据的时刻醒来。所以从低功耗角度LPWAN天然更适合电池供电的远传节点。ST的示例里节点默认每过一个采集周期才醒一次发送完数据马上回落到睡眠模式。我实测过如果把上报周期设为15分钟整板平均电流能控制在20微安左右而同样情况下如果长期保持BLE连接平均电流会高出至少一个数量级。因此在实际项目中我倾向于让LPWAN作为“长期在线”的通道BLE只在配置阶段常开配置完成后就关闭广播。4.2 数据帧长度与上报周期的权衡LoRaWAN协议有很严格的空口占用时间限制不同的数据长度和扩频因子会影响发送时长也会影响电池寿命。我在调优时发现一个传感器节点的数据往往只有几十个字节但你如果为了省事把所有数据都JSON编码后发出去包长膨胀不说空口占用时间也会成倍增加。建议在LPWAN上行链路里采用紧凑的二进制编码比如温湿度各用两个字节、电池电压用两个字节一个上行包控制在十几个字节以内。上报周期的选择也不能只看上层业务需求还要看网关和网络服务器的承载能力。比如LoRaWAN的占空比在某些地区有法规限制如果你上报频率过高设备会被网络侧限速甚至封禁。我在欧洲用的测试环境里默认占空比限制是1%也就是说一个100毫秒的空口包两次发送间隔至少要10秒。这个限制从设备端可能看不出来但只要服务器检查占空比就会拒绝接收。ST的协议栈里可以配置占空比管理建议在Demo阶段就打开避免后面测试时莫名其妙被服务器拉黑。4.3 用协议层重传把可靠性拉回来LPWAN的远距离优势来自高灵敏度但高灵敏度不代表万能。在复杂环境下比如设备装在地下管廊或者金属外壳内一个上行包丢失是很常见的。LoRaWAN提供了确认机制你可以把上行包标记为确认帧这样网络服务器收到后会回一个ACK设备在超时未收到ACK时可以选择重传。但这会显著增加功耗和空口占用需要权衡。我的做法是普通周期性数据按Class A的默认模式发送不要求ACK只有告警或配置回执这类关键数据才启用确认机制并做最多两次重传。这样既保证了关键事件不丢又不会让日常上报的功耗翻倍。还有一个容易踩的坑有些开发者把所有上行包都加上确认结果一个上报周期内设备反复等待ACK无线射频长时间不休息整板功耗比预期高了好几倍。做低功耗物联网节点一定要记住“不是所有数据都重要也不是所有数据都需要可靠性”。5. 创意落地的坑与心得天线、认证、边缘场景5.1 天线布局开发板好跑产品不一定好跑开发套件上的天线接口和参考设计在空阔桌面上测试效果很好但当你把方案塞进真实产品外壳里射频性能经常会出现断崖式下跌。我见过不少人在原型阶段测试LPWAN信号能覆盖三公里结果装进塑料外壳加金属支架后一公里内就频频丢包。原因往往不是无线芯片的问题而是天线周围地铜、金属件、电池走线影响了天线阻抗匹配和辐射效率。所以如果你打算用这套方案做产品建议尽早做射频传导测试也就是用SMA转接头把天线接口引出来通过线缆接到频谱仪上测量发射功率和接收灵敏度。别等到整机组装完了才想起来测那时候返工成本太高。ST的参考设计里明确画出了天线净空区和底层地平面的处理建议值得认真看一遍。即使不打算改板只做原型验证也要在最终“装箱”前重新测一轮通信距离。5.2 射频认证与网络接入许可的提前量这是做创意设备最容易忽略的部分。如果一个设备带有BLE和LPWAN两种射频发射通道做市场准入认证时要同时覆盖两个频段。很多国家或地区对Sub-GHz频段有专门的管制要求不是通过蓝牙的认证就能覆盖。比如在欧洲可能需要RED、在北美需要FCC而且在LoRaWAN公共网络上使用设备还要遵循具体网络的入网许可条款。别以为“只是做个开源Demo”就不需要关心这些一旦你想把产品拿到公开渠道售卖这些认证都是绕不开的。我的建议是在产品定义阶段就列出目标市场对应的频段表和认证需求然后把它作为选型的一部分。ST的套件通常支持的频段是可配置的不同版本针对不同地区做了区分。你买板子的时候就要确认是否匹配你目标区域的频段规则比如欧洲这边常用863-870MHz北美是902-928MHz如果买错版本后期要改频段几乎等于重新调硬件。5.3 从Demo到小批量哪些地方必须换开发套件作为原型验证是完全够用的但如果你想把产品做成小批量有几个地方不能直接沿用开发板设计。第一是板载调试器开发板的ST-LINK电路很占空间产品板上不需要留着可以换成SWD调试接口第二是天线类型开发板的IPEX天线或者PCB天线在量产时要根据外壳重新选型可能要从PCB天线改成外置天线第三是电源电路开发板一般考虑USB供电和板载LDO产品则要考虑电池供电、DC-DC、低功耗监测等多路电源管理。另外还有一个很多人忽略的地方传感器校准参数。开发套件板载的传感器出厂时可能有校准值但那个校准数据是针对开发板的不是针对你的产品外壳和装配工艺的。真正做小批量时你需要把传感器放到标准环境中重新标定并把补偿参数写进设备的生产固件。这个工作看起来不起眼但直接影响产品数据的一致性我在项目里就是因为省了这一步导致一批节点在温度读数上差了将近2摄氏度最后全部返工重刷固件。最后再分享一个小技巧这套BT/LPWAN开发套件的调试体验很好有一个细节是我后来才发现的它的BLE配置服务其实可以自定义扩展。你不光能用它下发LPWAN入网参数还可以下发传感器的校准系数、上报周期、甚至远程重启指令。我后来把产品所有需要现场调整的参数都定义成了BLE配置服务里的“配置项”这样运维人员只要拿着手机就能完成现场调参不再需要拆外壳接串口了。这个思路远比我最初只拿它做“无线串口”要实用得多也让“Creatively Connected Smart Devices”这个标题真正落了地。如果你正在做一个需要远程数据回传、又不想牺牲现场体验的IoT设备这套ST方案值得认真玩一遍。尤其是先跑通BLE配网再走LPWAN上行的完整链路你会发现许多从前觉得“很麻烦”的事其实只需要在正确的开发平台上重新组合一下就能顺理成章。再多说一句经验不要在一开始就急着把功能做全先把“手机配网、远程数据上报、低功耗睡眠”这三个核心闭环跑通后面的创意才有底气去扩展。
返回列表