跳转至

传感器数据采集

当前接口的调用顺序

配置由 *_init(&config) 接收,传感器通过 *_set_sensor_handle(sensor) 绑定,*_start() 不接收配置参数。下面是独立的在线模式示例;MQTT 与传感器须先完成初始化。

#include "tiny_measurement.h"
#include "esp_err.h"

// sensor must point to an initialized ADXL355 handle.
esp_err_t start_online_example(adxl355_handle_t *sensor)
{
    online_sensing_config_t config = {
        .sampling_frequency_hz = 20.0f,
        .enable_mqtt = true,
        .enable_serial = true,
    };
    esp_err_t err = online_sensing_init(&config);
    if (err != ESP_OK) return err;
    err = online_sensing_set_sensor_handle(sensor);
    if (err != ESP_OK) return err;
    return online_sensing_start();
}

离线模式对应 offline_sensing_init、offline_sensing_set_sensor_handle、offline_sensing_start();最后一步会阻塞到该次采集结束。实时模式对应 rt_process_init、rt_process_set_sensor_handle、rt_process_start()。不能把三种模式示例同时启动,争用同一传感器。

下方频率范围描述使用场景,不作为采样吞吐或精度保证。以 Online 为例,当前初始化检查 0 < sampling_frequency_hz <= 300;能否持续运行还取决于传感器配置、读取耗时、传输和缓冲。微秒时间戳单位也不等于微秒响应或同步误差。

TinyMeasurement — SHM 节点的数据采集管道

从 ADXL355 加速度计读数到 MQTT 远程传输,覆盖三种采集模式和三种实时处理架构。整个系统通过 MQTT 命令远程驱动。


架构速览

  • Online Sensing 在线采集


    定时连续流式采样 (1~20 Hz)
    MQTT / 串口实时传输
    适合长期结构健康监测

    详情 →

  • Offline Sensing 离线采集


    高频批量采样 (100~4000 Hz)
    内存 / SD 卡存储
    采集结束后 MQTT 报告
    适合模态分析、锤击实验

    详情 →

  • RT Processing 实时处理


    编译期选择三种架构:
    环形缓冲区 / DMA 双缓冲 / 双核分工
    实时阈值检测触发
    适合在线损伤检测

    架构总览 →

  • Command Handler 命令控制


    MQTT 远程命令 → 控制采集
    SENSE,ONLINE / OFFLINE / RT
    支持定时和延时触发

    详情 →

  • WSN 时间同步 (FTSP)


    基于 ESP-NOW 的泛洪时间同步协议
    网关广播周期信标 + NTP 世界时间
    叶子节点通过线性回归校正时钟偏差
    RGB LED 同步可视化(跑马灯循环)
    微秒计时单位 · 漂移估计与补偿

    详情 →


场景索引

  • 长期结构健康监测

    → Online Sensing,低采样率 (1~20 Hz),MQTT 持续上传

  • 锤击实验 / 模态测试

    → Offline Sensing,高采样率 (100~4000 Hz),SD 卡存储

  • 实时冲击 / 损伤检测

    → RT Processing + 阈值触发,响应时延需按负载测量

  • 远程控制采集任务

    → Command Handler,MQTT 发送命令从远端起停采集


历史调用示例(保留供对照)

此旧示例的 start(&config) 调用与当前头文件不符,请使用上方初始化、绑定、启动的顺序。

展开旧示例
#include "tiny_measurement.h"

// === 在线采集(长期监测)===
online_sensing_config_t online_cfg = {
    .sampling_frequency_hz = 20.0f,
    .enable_mqtt = true,
    .enable_serial = true,
};
online_sensing_start(&online_cfg);  // 开始 20Hz 连续上传

// === 离线采集(模态测试)===
offline_sensing_config_t offline_cfg = {
    .sampling_frequency_hz = 100.0f,    // 100 Hz
    .sampling_duration_sec = 30.0f,     // 采集 30 秒
    .enable_memory = true,              // 存到内存
    .enable_sd = true,                  // 也存到 SD 卡
    .enable_mqtt_report = true,         // 采集完发报告
};
offline_sensing_start(&offline_cfg);

// === 实时处理(冲击检测)===
rt_process_config_t rt_cfg = {
    .sampling_frequency_hz = 100.0f,
    .enable_accel_detection = true,     // 启用阈值检测
};
rt_process_init(&rt_cfg);
rt_process_start();

三种采集模式对比

Online Offline RT Processing
采样率 1~20 Hz 100~4000 Hz 20~1000 Hz
持续时间 无限(不间断) 有限(秒级) 无限(循环采集)
输出 MQTT 流式 / 串口 内存 / SD / MQTT 报告 实时处理结果
典型场景 长期健康监测 模态分析试验 冲击/损伤在线检测
触发方式 MQTT 命令 MQTT 命令(支持延时) MQTT 命令 + 阈值自触发

依赖链

ADXL355 传感器 → tiny_measurement → MQTT / SD 卡 / 串口
                        ↑
                   tiny_ai (信号处理)

WSN 时间同步 (FTSP):
  网关: NTP (互联网) → tiny_toolbox/tiny_time → FTSP 信标 (ESP-NOW)
  叶子节点: FTSP 信标 → 线性回归 → 世界时间 @ µs 精度

代码结构

include/        tiny_measurement.h · tiny_measurement_config.h
online-sensing/     在线采集
offline-sensing/    离线采集
command/            MQTT 命令解析
real-time-process-arch/  实时处理架构(3 种)
wsn/                WSN 工具集
  time_sync/        FTSP 时间同步模块
    ftsp.h              统一入口头文件
    ftsp_config.h       编译期调参(信标间隔、表大小...)
    ftsp_types.h        信标数据包布局(16 B 基础 / 26 B 扩展)
    ftsp_gateway.h/.c   网关周期信标广播
    ftsp_leafnode.h/.c  叶子节点信标嗅探 + 线性回归
    ftsp_ntp.h/.c       NTP 同步记录 & 世界时间锚点
    ftsp_precision.h/.c 时钟漂移估计 & 补偿 (ppm)
    ftsp_sync_viz.h/.c  RGB LED 同步状态可视化
app/                应用示例