拿到SensorTile.box这块小板子的时候,我就知道光是玩转入门模式肯定不够尽兴。在上一部分,我们聊了开箱、固件升级和基础模式下那几个预设好的功能页面,那体验确实不错,但说白了,传感器采集逻辑、算法开关、数据上报周期这些都是厂方写死的,你能改的只有最表面的参数。而这一篇要聊的 Expert mode(专家模式),才是真正把这块板子的灵魂释放出来的地方。简单说,专家模式让你不写一行嵌入式代码,就能通过手机App把“传感器采集、实时算法处理、逻辑判断、数据落盘”整条流水线像搭积木一样搭起来。这篇文章适合两种人:一种是已经跑通入门模式、想深挖板子能力的玩家,另一种是手里有运动监测、姿态识别、环境记录这类需求的开发者,想把原型快速跑起来看看效果。
1. 专家模式到底在解决什么问题
1.1 入门模式是套餐,专家模式是自助餐
先把话说透:入门模式(Demo Mode)给你的是一桌配好的菜。加速度数据怎么采集、温度怎么显示、活动识别结果怎么展示,这些链路全都封装在板载固件里了。你打开 ST BLE Sensor App,连接板子,看到的是一排预设好的数据界面,比如加速度曲线、陀螺仪曲线、气压高度、温湿度、活动状态这些。你只能开关这些预设页面,或者调整一下展示形式,至于“把陀螺仪数据喂给姿态解算算法,再把结果组合一个跌倒检测标签”这种需求,入门模式完全做不到。
专家模式的思路完全不同。它把整个数据采集链路拆成了几个独立可配置的模块:传感器节点、算法节点、逻辑运算节点,以及最终的数据记录和广播输出。你可以在 App 里像搭乐高一样把它们组合起来,配置完一键下发,板子重启后就会按照你的配置运行。这个模式最大的价值不是“多了一些选项”,而是把板子的行为和你的业务逻辑直接挂钩。举个例子:你有一个场景需要监测设备是否被剧烈振动,而且要求在振动超过阈值时记录前后10秒的加速度数据。这个需求在入门模式里是无解的,但在专家模式里,你只需要配置好加速度计的量程和采样率,加上一个振动监测算法,再把阈值设好,开启数据记录,就搞定了。
1.2 一条流水线看懂专家模式的整体架构
我不喜欢一上来就甩概念,如果说专家模式只是一个“配置界面”,多少有点辜负了它的设计。我更愿意把它理解成一条“数据流水线”。
整个流水线从左到右有四个环节:
- 传感器采集:板载的加速度计、陀螺仪、磁力计、气压计、温湿度传感器、麦克风,都可以独立开关,每个传感器都有量程、采样率、功耗模式等参数可调。
- 算法处理:配置好传感器之后,你可以挂载若干个算法节点,比如四元数姿态解算、活动识别、计步器、运动强度、携带位置、手势识别、振动监测、接近度检测等等。每个算法节点会从指定的传感器源读取数据,然后输出自己的结论。
- 逻辑运算:算法输出的是连续数值或者分类标签,如果你想做“多条件组合判断”,比如“运动强度高 且 姿态变化大”,就需要用到逻辑运算节点,它可以把多个输入组合成一个自定义事件。
- 输出与存储:最终结果可以通过 BLE 实时通知到手机 App 显示,也可以写入板载 microSD 卡或内部 Flash 保存为 CSV 日志,方便事后分析。
这四个环节就是你在专家模式里能操作的全部内容。配置过程会生成一份 JSON 格式的配置文件,通过蓝牙下发板子,板子解析后按这个“图纸”运行。如果是一个熟悉 STM32 开发的工程师,看到这里应该能明白,这套东西本质上做了一层“配置化”封装,底层是 ST 的传感器驱动库和算法库,上层用 JSON 描述业务逻辑,代码量约等于零,但灵活度却高出几个量级。
1.3 哪些场景真正需要专家模式
很多人问我,专家模式到底有没有必要研究,是不是只是高级玩家炫技用的。我的回答是:如果只是玩玩,入门模式确实够了;但如果你想把这块板子放进一个真实的项目里,专家模式几乎是唯一的选择。
我自己接触到的典型场景大概有这么几类:
- 运动姿态相关:比如做一个人体姿态解算系统,需要输出欧拉角或者四元数,并且能实时看到姿态变化趋势。这个在入门模式里只能看到加速度曲线,得上专家模式挂四元数算法。
- 行为识别类:比如实现一个简单的“静止/走路/跑步/骑行”分类器,或者做一个“跌倒检测”原型。专家模式内置的活动识别算法可以直接用,如果还不够,MLC(机器学习核心)还能让你训练自己的分类器。
- 长时间环境记录:比如把板子扔在冷链箱里记录温度和气压变化,要求自动记录成 CSV 文件,手机不参与,也要用专家模式里的 DataLog 功能。
- 快速原型验证:比如你想验证一下“振动事件检测 + 数据记录”这个方案到底可不可行,用专家模式半小时内就能搭出来,不用写任何驱动代码。
所以结论很直接:专家模式适合的是那些明确知道自己要采集什么数据、需要什么算法结论、希望快速验证方案的人。如果你觉得入门模式已经满足需求,那可以不急着上专家模式;但只要你开始觉得“这个数据如果还能再处理一下就好了”,那就说明你该进专家模式了。
2. 专家模式四大核心模块,搞懂就算入门了
2.1 传感器层:量程和ODR怎么选才不会翻车
我在专家模式里最先做的事情,永远是配置传感器。因为算法虽然看起来酷炫,但它吃的就是传感器数据,前面数据采集出了问题,后面再怎么调算法都是白搭。
SensorTile.box 板载了多个传感器,最重要的几个是:
- LSM6DSOX:六轴惯性传感器(三轴加速度计 + 三轴陀螺仪),同时内部集成了 MLC 机器学习核心,这是整块板子最核心的传感器。
- LIS2DW12:低功耗三轴加速度计,适合对功耗要求极高的场景。
- LIS2MDL:三轴磁力计,用来修正航向角漂移。
- LPS22HH:气压计,可以换算海拔高度。
- HTS221:温湿度传感器。
- MP23ABS1:模拟麦克风。
专家模式配置界面里,每一个传感器都是独立节点,你要根据实际需求决定开哪个、关哪个,以及怎么设置参数。这里最容易踩坑的两个参数是量程(FS,Full Scale)和输出数据率(ODR,Output Data Rate)。
以加速度计 LSM6DSOX 为例,量程可选项是 ±2g、±4g、±8g、±16g。怎么选?如果你的目标是监测人手运动这种幅度比较小的动作,±2g 到 ±4g 就够了,分辨率更高;如果要把板子贴在快递包裹上测跌落,那冲击加速度很容易超过 4g,就得选 ±8g 甚至 ±16g。我自己做振动监测时,直接上 ±16g,虽然噪声会稍微大一点,但至少不会削顶。
ODR 的选择更有讲究。ODR 决定了传感器每秒采集多少组数据,它直接关系到功耗和数据量。LSM6DSOX 的加速度计最高可以到 6.66kHz,陀螺仪最高 6.66kHz,但千万不要无脑拉满。你算一笔账就明白了:如果加速度和陀螺仪同时以 1kHz 采样,每个采样点约 6 个轴,每个轴 2 字节,一秒钟就是 12KB,一分钟就是 720KB,十分钟下来日志文件就 7.2MB 了,SD 卡再大也扛不住长时间这样录。
我的习惯是分场景选择:
- 计步器、活动识别、携带位置这类人体活动监测,加速度计 ODR 设置在 26Hz 到 104Hz 之间完全够用。人的步频一般就是 1.5Hz 到 3Hz,高频分量超过 50Hz 的很少,104Hz 采样的点数已经足够涵盖步态特征了。
- 姿态解算、手势识别这类需要捕捉快速旋转变化的应用,陀螺仪和加速度计的 ODR 最好设置在 208Hz 以上,不然快速转腕瞬间的角速度会被采样漏掉。
- 振动监测就比较极端了,要看振动源的频率范围,电机轴振动一般几百Hz到几kHz,我建议直接 1kHz 起步。
注意,这只是一个“可以用”的配置。要得出严谨的参数,你需要知道信号带宽,然后根据奈奎斯特定理采样至少二倍带宽,实际操作中最好留 4 到 10 倍余量。比如人体步态信号带宽约 10Hz,选 104Hz 其实就是 10 倍以上的余量,完全没问题。
2.2 算法层:内置算法是怎么被“接线”的
传感器节点配置好之后,接下来就是“接线”算法。专家模式里算法节点非常多,我在 1.2 里列过一些,这里挑几个最常用的展开说说,它们也是我日常工作里真正用过的。
Pedometer(计步器)是最容易上手的算法之一。它接收加速度计数据,通过检测步态中的周期性峰值来计算步数。配置参数里有一个 Threshold(阈值)和 Sensitivity(灵敏度),阈值越小,检测越敏感,但也容易把抖动误判成步数。这个参数没有统一答案,如果你把板子放在裤兜里,阈值可以设小一点;如果放在背包里,运动传递到板子上的幅度会小很多,阈值设太小反而会漏步。我做过对比测试,阈值设成默认值的 1.5 倍,慢走场景下的漏计率会明显上升,所以除非你确切的测试场景有明确需求,否则别乱改。
Quaternion(四元数姿态解算)是另一个常用算法。它接收加速度计、陀螺仪,以及可选磁力计的输入,输出的是四元数 q0、q1、q2、q3,可以稳定描述板子当前的 3D 姿态。这个算法的好处是不存在万向锁问题,而且数据可以直接用来算欧拉角。配置它的关键是输入源别选错——如果你只想用惯性数据,那就把磁力计关掉;如果有磁力计参与,注意周围别有大块金属物体,否则航向角会漂。顺便说一句,多传感器融合这类算法对于初学者最友好的一点是:你只需要正确接线传感器输入,剩下的融合计算都是算法库内部完成的,不需要自己去调卡尔曼滤波参数。
Activity Recognition(活动识别)是内置分类算法中比较实用的一个,可以输出“静止、走路、跑步、骑行”等类别。它不像 MLC 那样能自定义分类器,而是 ST 预先训练好的一套模型,所以配置起来比较简单,选好加速度计输入就行。它的输出是一个带置信度的分类结果,你可以把它作为逻辑运算的输入,也可以直接写到日志里。对于大多数人体活动监测场景,这个算法已经能给到一个可用的基线结果。
Vibration Monitor(振动监测)或者 Motion Intensity(运动强度)这类算法更像是“事件触发器”。它们的输出是一个数值或者一个等级,比如有没有振动、振动强度是多少。你在做振动报警或者设备异常监测时,通常会把这类算法的输出和一个阈值比较,再触发后续逻辑。
配置算法节点时有个点要特别提醒:算法节点和传感器节点不是强制绑定的,你完全可以配一个加速度计,后面挂四个不同的算法节点,只要每个算法的输入源都指向同一个加速度计就行。多挂算法不会让传感器多采样,它只是把同一份数据多算几遍,功耗主要增加在 CPU 计算上,所以不用太担心“算法加多了会采集不过来”。
2.3 MLC:藏在传感器里的微型机器学习
如果说前面这些内置算法还不够塞牙缝,那 MLC(Machine Learning Core)就是真正的“大招”。
MLC 是 LSM6DSOX 这颗传感器内部集成的机器学习推理单元。注意,它是跑在传感器内部,不是跑在 STM32 主控里。也就是说,它可以实时处理来自同一颗芯片的加速度计和陀螺仪数据,在极低功耗下完成决策树推理,只把推理结果告诉 MCU。这种架构的好处太明显了:主控根本不用持续接收原始传感器数据,可以一直处在低功耗模式,需要响应的时候才被 MLC 的输出打断。对电池供电的 IoT 设备来说,这是非常重要的优势。
在专家模式里,你可以通过配置文件加载 MLC 模型。但一个容易被忽略的前提是:MLC 模型本身不是凭空生成的,你需要先在 PC 端的 Unicleo-GUI 工具里采集数据、训练决策树、生成配置文件,然后再把配置导入到专家模式中使用。训练数据从哪里来?最简单的方式就是真实场景采集。比如你想识别“摇晃”这个动作,就拿着板子模拟各种摇晃姿态,记录加速度和陀螺仪数据,然后导入训练工具,标注成不同类别,让工具自动生成决策树。这个过程有点像用一个简化版的 Weka 或者机器学习实验平台,不需要写代码,但需要你提供“有代表性”的数据。
我自己在配置 MLC 时踩过最大的坑,就是训练数据和实际运行场景不一致。我在办公桌上模拟了几天动作生成模型,觉得分类准确率挺高,结果把板子装到真实设备上一跑,准确率掉得很厉害。原因很简单:真实场景的噪声、振动模式、安装角度和桌面模拟完全不同。后来我学乖了,训练数据一定会从最终安装场景里去采集,至少要覆盖各种实际环境下可能出现的姿态变化,模型才有实用价值。
2.4 逻辑运算层:多个信号组合成一个自定义标签
传感器和算法都配置好了之后,最后一步就是把它们的输出组合成我们真正关心的事件。这一层在专家模式里叫 LogicOperator(逻辑运算),也是很多新玩家容易忽略的环节。
为什么需要逻辑运算?因为单个算法输出的实用性往往不够。举例来说:活动识别输出“走路”,但只是走路并不意味着需要上报;运动强度输出“高”,但如果只是原地快速挥手,运动强度也很高,却不一定是你关心的“异常事件”。把“运动强度高”和“姿态变化大”两个条件 AND 在一起,就能有效筛掉大多数误触发的情况。
专家模式里每个逻辑运算节点有多个输入和一个输出,可以配置运算类型,比如 AND、OR、NOT,也可以设置阈值比较。输入源可以是传感器原始值、算法输出,甚至另一个逻辑运算节点的输出。也就是说,逻辑运算节点是可以多级串联的,这让你能在不写代码的情况下实现相当复杂的判断逻辑。
我举一个实际做过的例子:监测一个设备是否发生了“剧烈翻转”。我在专家模式里配置了三个节点:
- 姿态解算算法,输出四元数,实时反映设备的朝向。
- 运动强度算法,输出运动激烈程度。
- 逻辑运算节点,输入是“姿态变化明显”和“运动强度高”,逻辑关系为 AND,输出一个二进制标签。
这样只要设备被剧烈翻转,日志里就会记下一个事件,而日常的轻微抖动、正常搬运都不会触发。后续如果还想做更复杂的“组合事件”,比如“翻转之后 5 秒内没有回正”,就需要外部 MCU 处理了,纯靠专家模式的逻辑运算层做时序判断会有点吃力。这个边界需要清楚:专家模式擅长的是空间维度的条件组合,时序维度的事件链还是得靠主控或者上位机去处理。
3. 实操:从零配置一个“活动识别 + 计步”应用
3.1 准备工作:固件、手机App和那块microSD卡
按照我的习惯,动手配置之前先花几分钟把环境确认好,免得配置到一半因为固件版本问题卡住。
首先确认板载固件版本。SensorTile.box 的固件已经升级过好几个版本,不同版本对专家模式的算法支持是有差异的。你可以在 ST BLE Sensor App 连接板子之后,在设备信息页面查看固件版本号。如果版本比较旧,建议先用 DFU(Device Firmware Update)功能升级到最新版。升级方法在 ST 官方的应用笔记里有,整体流程不复杂:下载固件包,在 App 里选择 DFU 功能,选择固件文件,等待上传完成,板子会自动重启。这一步很关键,旧固件可能会缺算法节点,你配置时会发现某些选项是灰的。
其次是手机 App。我用的是 Android 版的 ST BLE Sensor,iOS 版功能上基本一致。建议从官方应用商店下载,版本别太旧。进入 App 连接板子后,首页会看到两个模式入口:Demo Mode 和 Expert Mode,也就是基础模式和专家模式。点击 Expert Mode 进去,就是我们要操作的界面。
最后是 microSD 卡。如果你要做数据记录(DataLog),需要在板子背面的卡槽里插一张 microSD 卡。这里有几个硬性要求:
- 文件系统必须是 FAT32。
- 容量建议 2GB 到 32GB,太老的非标准卡或超大容量的 exFAT 卡有时会不识别。
- 读写速度建议 Class 10 以上,否则长时间高速录数据时可能会丢帧。
插卡的时候注意方向,金属触点朝里朝下,插到卡槽里听到咔哒声就位了。上电前插好,因为热插拔可能导致板子识别不到 SD 卡,这个小问题我踩过好几次。
3.2 传感器配置:先让数据流起来
进入 Expert Mode 之后,主界面下方通常会有几个标签页,其中最重要的就是 Configuration。点进去之后,你会看到一棵树状结构,左侧是传感器节点,右侧是功能节点,中间区域是当前配置的画布。
我们的第一个目标很明显,先把加速度计打开。在传感器列表中找到 LSM6DSOX 的加速度计节点,也就是 Acc,点击启用。启用之后,旁边会出现它的参数设置项:
- Full Scale(量程):这里我们选择 ±8g。因为我们后续要做活动识别和计步,人体运动范围一般不会超过 ±8g,这个量程在分辨率和抗削顶之间比较平衡。如果后面要做跌落测试,再改成 ±16g。
- Output Data Rate(输出数据率):选 104Hz。前面算过,人体活动的有效信号带宽通常在 10Hz 左右,104Hz 有十倍余量,足够覆盖步态特征,功耗和数据量也都在可控范围内。
如果你还需要陀螺仪,比如后续想挂四元数算法,那就把 Gyro 节点也打开,量程选 ±2000dps,ODR 选 208Hz 以上。这里要特别提醒:传感器节点一旦启用,你不一定要把它的原始数据直接写入日志。原始数据只作为算法输入时,可以不开数据记录,让日志更清爽。
传感器配置完后,我还建议打开 Notification 开关。这个开关的作用是让板子通过 BLE 实时往手机上报数据,方便你确认配置生效。如果不开,你只能通过日志文件查看结果,实时性就差很多了。但注意:打开的传感器和算法越多,BLE 上报的数据量越大,App 越容易卡顿。如果你只是长时间录数据,没必要开 Notification,关掉反而更稳定。
3.3 算法配置:添加活动识别和计步器
传感器节点已经就绪,现在开始挂算法节点。在算法节点列表里,找到 Activity Recognition 和 Pedometer,分别启用。
Activity Recognition 节点的输入必须从传感器节点那边拉线,也就是把 LSM6DSOX 的加速度计数据连接到这个算法节点上。连接方式在 App 里是通过画布拖拽完成的,点击节点之间空白的接口拖动即可。这个算法不需要额外的敏感参数,你用默认值就行。它输出的结果是几个类别(Stationary、Walking、Running、Biking 等)的置信度,你可以在界面上实时看到当前被判定为哪一类。
Pedometer 节点的输入同样是加速度计数据,但它有一个参数值得关注:Threshold(步数检测阈值)。这个阈值影响步态峰值检测的灵敏度。我在 2.2 里提过,这里实际操作一遍你就理解了。我建议先保持默认值,然后在现场走几十步,看看计步偏差大不大。如果实际步数比板子计出的少,说明阈值太敏感,应该调大;如果板子漏计明显,就应该调小。这个参数在 UI 里是可以直接改数值的,改完重新 Apply 配置即可。
两个算法节点同时挂在同一个加速度计数据源上,没有任何冲突,板子在每个采样周期都会把数据喂给这两个算法,互不干扰。这也是专家模式的一个优点:一次采集,多种分析。
3.4 数据记录与导出:CSV日志和Unicleo-GUI
配置完算法之后,是时候把数据落盘了。在 Configuration 界面里找到 DataLog 节点,启用它,然后把你想记录的数据源都拉线到 DataLog 的输入端。这里我有意识地只勾了 Pedometer 的步数输出、Activity Recognition 的分类结果,以及加速度计的原始 X、Y、Z 轴数据。没有勾陀螺仪,因为本场景不需要,勾了只是白白增加日志体积。
数据记录的开始和停止有两种方式:一种是在 App 界面上手动点击 Start Log / Stop Log;另一种是使能“开始条件”和“停止条件”,比如当某个逻辑运算节点输出有效时自动开始记录。手动方式简单直观,但确实容易忘记停止;有条件触发的方式更适合无人值守的长时间采集场景,可以先想清楚需求再选。
数据停止记录后,日志会以 CSV 格式保存在 SD 卡里,文件命名类似 st_log_xxxx.CSV。在板子上电状态或者拔出 SD 卡后,用电脑读卡器打开即可。CSV 每一行的时间戳和数据类型都排好了,结构大致是:
Timestamp,Acc_X,Acc_Y,Acc_Z,pedometer_steps,activity_class这里有个细节:时间戳是板子上电后的 tick 计数,不是绝对日期时间。如果你要做绝对时间对齐,建议在记录的同时用手机记录一个起始时刻,或者把板载 RTC 的配置也打开。不同固件版本对时间戳的支持不同,老版本可能只有 tick,新版本可以通过外部授时校准,具体看版本说明。
如果你想边采集边做数据处理,推荐用 ST 的 Unicleo-GUI 工具。把板子通过 USB 线连到电脑,Switch 拨到 USB 模式,打开 Unicleo-GUI 就可以读取 DataLog 数据、绘制实时曲线、甚至导入 MLC 训练数据。这个工具对数据分析的作用很大,它可以和你之前在 Expert Mode 里配置的模型无缝衔接,尤其是 MLC 的训练流程,几乎离不开它。
3.5 配置JSON长什么样(关键字段解释)
专家模式配置的底层是一份 JSON 文件。每次你在 App 里点击 Apply Configuration,其实就是在生成并下发这份 JSON。有些玩家喜欢直接用 PC 工具编辑 JSON 然后烧录,这确实是进阶玩法,但我更推荐先在 App 里配好一套能跑的配置,导出 JSON 后再对照修改,这样不容易出错。
这里展示我实际配置“活动识别 + 计步”时导出 JSON 的核心片段,字段名是简化后的,不同固件版本字段名会有所差异:
{ "sensor": [ { "id": "lsm6dsox_acc", "enable": true, "odr": 104.0, "full_scale": 8.0 }, { "id": "lsm6dsox_gyro", "enable": false } ], "algorithm": [ { "id": "pedometer", "input": ["lsm6dsox_acc"], "threshold": 1.5 }, { "id": "activity_recognition", "input": ["lsm6dsox_acc"] } ], "datalog": { "enable": true, "source": ["lsm6dsox_acc", "pedometer", "activity_recognition"] } }各字段大概的意思:
- odr:传感器输出数据率,单位 Hz。
- full_scale:量程范围,单位就是 ±8g 的 8。
- algorithm.input:算法节点挂载的数据源,必须和前面传感器节点配置的 id 一致。
- datalog.source:数据日志记录的通道列表,同样引用前面的节点 id。
改 JSON 最需要小心的就是 id 引用关系。像input、source这些字段都是靠 id 字符串关联节点的,任何一个 id 写错了,整个配置都会被拒绝。我在实际改微调阈值时,曾经因为把lsm6dsox_acc手滑写成了lsm6dsow_acc,配置下发之后板子完全没有按预期工作,排查了半天才发现是这种低级错误。所以建议是:先导出原始的、能用的 JSON,在此基础上用代码编辑器做字段级修改,然后再烧录,别手敲整个文件。
4. 常见问题与排查技巧
4.1 配置应用后蓝牙一直断连
这个问题几乎每个第一次用专家模式的人都会遇到。点击 Apply Configuration 下发配置之后,板子会重启,蓝牙连接会断开,手机 App 显示设备掉线。如果你以为出了问题,那是正常的。等待几秒钟到十几秒钟,板子重启完成后会自动被 App 重新发现并连接。
但如果等了很久都连不上,排查思路大概是这几步:
- 先看板子 LED 状态。正常重启后,LED 会闪一段时间然后变稳定,如果一直 RGB 乱跳或者熄灭,可能是配置 JSON 里有非法字段导致固件崩溃。这时只能重启板子,必要时按住 BOOT 按键重新进 DFU 恢复。
- 再在手机蓝牙设置里看看能不能扫描到板子设备。如果扫描不到,大概率是板子卡死在启动阶段,长按电源按键彻底断电再上电。
- 最后考虑 App 缓存问题。直接杀掉 App 进程,重新打开,不要直接连接,而是回到扫描界面重新建立连接。
配置前把板子上电时间留长一点、确保电量充足,也可以减少这类断连问题。电量偏低时,板子在重启瞬间因为功耗波动很容易起不来。
4.2 记录到的CSV数据全是NaN或者0
日志能录出来,但打开之后全是 0 或者 NaN,这种问题常见于你把一个算法节点拖进 DataLog 数据源,但实际没有把该算法需要的输入传感器数据拉线接好。
比如你启用了 Pedometer,然后把 Pedometer 的输出挂到了 DataLog,却忘了把加速度计数据接到 Pedometer 的输入。这个算法节点没有数据可吃,输出自然就是无效值。解决方法是回到 Algorithm 配置界面,把对应算法的输入源拉线接好,重新 Apply 配置。
另外,有些算法节点输出的是“类别标签”,对应到 CSV 里可能是一个枚举数字而不是直观的文字。比如活动识别输出的1可能代表 Walking,2可能代表 Running。不要看到数字就觉得是异常。我去查了 ST 算法库,不同版本类别映射还不太一样,建议在 Unicleo-GUI 里对照一下。
4.3 MLC输出始终为0或者某个class始终不出现
如果你在配置里启用了 MLC 模型,实时看结果时发现所有数据都落到同一个类别,或某个类别永远不出现,绝大多数情况下不是配置问题,而是模型本身的问题。
MLC 的决策树是基于训练数据生成的,如果训练时某个类别的样本极少、特征不丰富,决策树对这种类别的泛化能力就会很差。我遇到的典型案例是:只采集了正常姿态的“静止”和“走路”,没有采集“坐”和“站”这种近似静止但姿态不同的数据,结果模型把所有轻微移动都分类成了“走路”。后来我补充了大量不同视角、不同速度、不同位置的样本,重新训练之后,分类结果才靠谱起来。
另外还要注意特征归一化。LSM6DSOX 的 MLC 是直接在传感器上跑决策树,如果训练时用的是某个量程下采集的数据,部署时 MLC 量程设置要和训练一致。比如训练数据是 ±8g 下采集的,部署时配置成 ±16g,输入的数值范围完全变了,决策树阈值就全乱套了。
4.4 SD卡不认、录制自动终止
录制过程中日志戛然而止,或者板子压根没在 SD 卡上生成文件,多数情况是 FAT32 格式问题或者 SD 卡兼容性问题。
处理方式:
- 把 SD 卡插进读卡器,在电脑上右键格式化,文件系统选 FAT32,分配单元大小默认。
- 容量超过 32GB 的卡不好整,很多工具默认不支持格式化成 FAT32,建议直接换一张 32GB 以内的卡。虽然技术上有办法把大容量卡强行格式化成 FAT32,但 SensorTile.box 的兼容性实测并不乐观,不值得折腾。
- 插卡时一定要断电或者至少等板子空闲,别在录制时拔插 SD 卡,容易损坏文件分配表,导致整份日志无法读取。
我曾经在录制中碰了一下板子的 SD 卡槽,卡弹出来了,日志文件后半段全部变成乱码,前面一个小时的数据也基本废了。教训很深刻,录制过程中千万别碰卡。
4.5 配置JSON被“减配”了
我在 4.4 之外遇到一个很诡异的问题:同一个 JSON 配置文件,升级固件之后再下发,发现某些算法节点配置变成了默认值。排查到最后,发现是不同固件版本支持的算法参数数量不同。新版本加了一些参数,老版本就忽略了不认识的字段,而某些默认值又不一致,结果表现就变了。
这不算 bug,但确实是坑。应对办法很现实:升级固件前,先把当前正在用的配置在 App 里导出保存成文件,升级后重新下发,并且仔细核对一遍关键参数是否保留,特别是阈值、量程、ODR 这类直接影响运行效果的参数。不要以为配置导出就万事大吉,该核对还得核对。
结尾
篇幅不小了,最后聊几句实在的。我用 SensorTile.box 专家模式做过的项目里,印象最深的是一款“包裹振动监测”原型。我在专家模式里配好了振动监测算法、运动强度算法、DataLog 自动触发,把板子塞进快递箱里跑了一整个运输流程。回来后导出 CSV,几秒钟就定位到了哪个时间点、哪个环节产生了最大冲击。整个过程我没有写一行嵌入式代码,全靠在这块板子的专家模式里把传感器、算法、逻辑和数据记录一根根“接线”接起来。
从入门模式到专家模式,最大的转变不是学会了 App 里的几个配置项,而是思维方式的转变:要开始把数据采集当成一条流水线来思考,先明确最终要拿到什么结论,再倒推需要哪些传感器、哪些算法、哪些逻辑组合。以后再看到一块开发板,不会再执着于“它预设了什么功能”,而是会去想“我能不能把它改造成我想要的样子”。
如果你还在专家模式的门槛前犹豫,我的建议是:现在就打开 ST BLE Sensor App,进到 Expert Mode,随便配一个方案,哪怕只是加速度计加一个计步器,先让板子按照你定义的流水线跑起来再说。配置一遍、导出一次 JSON、录一段数据,这几个动作做完,你对这块板子的理解会完全不一样。