【问题标题】:Read Arduino data with shell script fast使用 shell 脚本快速读取 Arduino 数据
【发布时间】:2015-11-02 18:46:44
【问题描述】:

我的 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 发送数据一样快地记录数据?

【问题讨论】:

    标签: linux shell logging arduino


    【解决方案1】:

    也许tail -f 会起作用:

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

    【讨论】:

    • 那只给了我一个值。我认为目前的主要问题是每次我读取一个值时,我都会打开一个串行连接,这会重置 Arduino(我还读到我可以通过在 RST 和 GND 之间放置一个 10 uF 电容器来禁用它,但我'正在获取数据,所以我无法检查)。但是,无论如何,谢谢!
    • 我看到你解决了 - 有趣的解决方案 ;-) 你在使用“面包板”吗?是的,看起来tail 也可能会定期重新打开文件;我以为它只会等待select 的数据。
    【解决方案2】:

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

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

    sleep 0.1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 2013-12-27
      • 2011-01-11
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多