使用 shell 脚本快速读取 Arduino 数据

Read Arduino data with shell script fast

我的 Arduino 正在记录温度数据(数据类型为浮点数),我正在尝试将其登录到我的 Linux 机器上。最大的问题是这种记录的速度。 Arduino 使用 DS1822 读取温度,之后我使用

Serial.print(temp);

命令,其中 temp 是保存温度数据的浮点数。在 Linux 机器上,我使用以下 shell 脚本来收集数据:

#!/bin/sh
while [ 1 ]; do
val=$(cat /dev/ttyUSB0);
echo "$val,$(date "+%Y-%m-%d %H:%M:%S")" >> ~test.txt;
sleep 10;
done

这样做的主要问题是睡眠(延迟)必须非常大;如果我使用sleep 1;,电脑收不到任何数据。 当我使用 screen /dev/ttyUSB0 时,我可以看到数据接收速度相当快。 使用我当前的脚本,Arduino 似乎在发送数据时以某种方式冻结。我还尝试通过电阻测量构建一个更简单的脚本(因为 DS1822 数据转换也需要一些时间),但是当我如上所述使用 shell 脚本时,这也花费了很多时间。

因此我的问题是:如何优化我的 Arduino/shell 脚本以便记录数据的速度与 Arduino 发送数据的速度一样快?

也许 tail -f 会起作用:

tail -f /dev/ttyUSB0 | bash -c 'cat; date "+%Y-%m-%d %H:%M:%S"'

我通过禁用 Arduino 在建立新串行连接时执行的自动重置找到了解决方案。为此,我在 RST 和 GND 之间放置了一个 10 uF 电容器。请注意,在将代码上传到您的 Arduino 之前,必须移除此电容器!

进行此修改后,我能够从我的 Arduino 读取 10 Hz 的电阻数据。为此,我唯一修改的是 bash 脚本上的睡眠命令,现在是

sleep 0.1;