说明¶
Offline Sensing — 高频批量采集,存储到本地
以较高采样率(默认 100 Hz)采集一段时间(默认 10 秒)的数据,存到内存和/或 SD 卡,采集结束后发送 MQTT 报告。适合锤击实验、模态测试等需要高频率数据的场景。
算法直觉¶
为什么离线能比在线频率高?¶
在线是"边采边发",带宽受限。离线是"先采后发",采集时全力冲刺:
- 数据先写入本地缓冲区(内存或 SD 卡)
- 采集任务完成后才发 MQTT 报告
- 不受网络传输速度的约束
内存预算¶
默认 10 秒 100 Hz 只需 12 KB,ESP32 的 SRAM 完全够用。若设到 4000 Hz × 60 秒,则需约 2.8 MB——此时建议用 PSRAM 或 SD 卡。
数据流¶
MQTT 命令 "SENSE,OFFLINE,F=100,D=10"
↓
初始化内存 / SD 卡缓冲区
↓
ESP 定时器每 10 ms (100 Hz) 触发中断
↓
读取 ADXL355 → 写入内存缓冲区 / SD 卡
↓
计时到 → 停止采集
↓
MQTT 报告(统计信息:采样数、时长、文件路径等)
API 参考¶
typedef struct {
float sampling_frequency_hz; // 采样率 (Hz),默认 100.0
float sampling_duration_sec; // 采集时长 (秒),默认 10.0
bool enable_memory; // 启用内存存储
bool enable_sd; // 启用 SD 卡存储
bool enable_mqtt_report; // 启用 MQTT 报告
const char *sd_file_path; // SD 卡文件路径(NULL = 自动生成)
const char *mqtt_report_topic; // MQTT 报告主题(NULL = 默认)
} offline_sensing_config_t;
esp_err_t offline_sensing_start(const offline_sensing_config_t *config);
esp_err_t offline_sensing_stop(void);
bool offline_sensing_is_running(void);
注意事项¶
最大采样率 4000 Hz 受 ADXL355 硬件限制
这是传感器 ODR(Output Data Rate)的物理上限。再高也读不到更多数据。
SD 卡适合长时间采集
内存缓冲有限,SD 卡可以存更多数据。但 SD 卡写入速度慢于内存,高采样率+长时长建议两者同时用。
采集完成后自动生成文件名
SD 卡文件路径未指定时,自动按 sensor_YYMMDD_HHMMSS.csv 格式生成,包含时间戳防止覆盖。