将快速串行数据写入文件(csv 或 txt)

Writing fast serial data to a file (csv or txt)

有没有办法捕获非常快速的串行数据并将其写入文件?

我使用 32kSPS 外部 ADC 和 2000000 的波特率,同时以下列格式打印:adc_value(32 位)\t millis()

这导致每 1 毫秒打印约 15 次。不幸的是,我尝试过的每一个解决方案都无法捕获实时数据并将其存储到文件中。这包括:Processing sketches、TeraTerm、Serial Port Monitor、puTTY 和一些 Python 脚本。他们都无法实时记录数据。 另一方面,Arduino 串行监视器能够显示实时串行数据,但它无法将其记录到文件中,因为它缺少此功能。

这是带有传入数据的 Arduino 串行监视器的打印屏幕:

一个有问题的事情可能是您每次收到新记录时都尝试写入。那会浪费很多时间写数据。

而是尝试将数据收集到缓冲区中,当缓冲区即将溢出时,在单个尽可能低级别的写入调用中写入整个缓冲区。

为了不停止接收太多数据,您可以使用线程和双缓冲:在一个线程中接收数据,写入缓冲区。当缓冲区即将溢出时,向第二个线程发出信号并切换到第二个缓冲区。另一个线程获取已满缓冲区并将其写入磁盘,并等待下一个缓冲区变满。

在针对这个问题尝试了 10 多种可能的解决方案之后,包括专用串行捕获软件、python 脚本、Matlab 脚本和一些 C 项目替代方案,唯一对我有用的方法被证明是 MegunoLink Pro.

它没有达到 ADC 的全部 32kSPS 潜力,而是大约 12-15kSPS,但它仍然比我尝试过的任何东西都要好得多。

未达到完整的 32kSPS 也可能受到我用于将值打印到串行控制台的 Serial.print() 方法的限制。对了,我一直用的平台是ESP32

稍后编辑:不要忘记编辑 MegunoLink Pro 安装目录中的 MegunoLinkPro.exe.config 文件以添加更多波特率,例如 1000000 或 2000000。默认限制为 500000。