用shell脚本快速读取Arduino数据

时间:2015-11-02 18:46:45

标签: linux shell logging arduino

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

Serial.print(temp);

命令,其中temp是保存温度数据的float。在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一样快地记录数据?

2 个答案:

答案 0 :(得分:1)

也许tail -f可行:

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

答案 1 :(得分:0)

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

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

sleep 0.1;