我正在做一个涉及树莓派和加速度计传感器 ADXL355 的项目。树莓派的职责是从传感器获取数据,仅过滤有用的数据并将其发布到云上的 thingsboard.io 实例。所有不同的设备都由电池供电,由太阳能电池板充电并由 Raspberry 监控。
到目前为止,这是我的设置:
此设置工作正常,但我想增加获取数据的可靠性。获取和处理每个数据点对我来说至关重要。这种设置不允许我在 linux 操作系统上安全操作而不可能干扰获取数据的过程。我希望能够在不丢失数据的情况下重新启动树莓派。
传感器提供先进先出缓冲功能:它将在内部缓冲区中保存多达 32 (xyz) 个数据点,但考虑到采样率可能高达 1KHz,这给我留下了 32 毫秒的缓冲区,这远远不够以维持可能的新固件部署或 Raspberry 操作系统的重启。
有时(即使我应用了RT 补丁)并将获取数据的程序的优先级设置为尽可能高,我看到在程序获取其上下文之前最多 18 毫秒的时间间隔(我假设来自某些内核中断例程?),我担心可能会发生间隔变得大于我拥有的 32 毫秒缓冲区并可能丢失数据的情况。
我想知道的是,将数据提取与所述数据的传输和处理分离的最佳实践是什么?
我想到的是将传感器移动到专用的 Arduino 板中,该板运行裸机固件,尽可能少地负责获取数据、分配时间戳、保存数据。
使用这种方法,我不知道在不干扰获取数据的程序的情况下访问缓冲区。是否有任何特定组件可以解决我的问题?就像某种可以被不同“用户”同时访问的内存组件?该缓冲区应该能够保存至少 1GB 的数据,以弥补可能的 24 小时停机时间窗口。