使用 Arduino 将数据发布到 Pachube 时出现问题。Arduino 配置为在您发送“t”时返回温度的 JSON 数据,并在发送“l”时返回光照级别的 JSON 数据。这可以通过 Arduino 串行监视器完美运行。然后我创建了两个 bash 脚本。定期向 Arduino 发送“t”和“l”命令,并在每个请求之间等待 10 秒。
while true; do
echo -n t > /dev/ttyACM0
echo "$(date): Queried Arduino for temperature."
sleep 10
echo -n l > /dev/ttyACM0
echo "$(date): Queried Arduino for light."
sleep 10
done
这工作正常。我每 10 秒收到一条回显消息。另一个脚本从串口读取生成的 JSON(我基本上是从某个网页复制的)。
ARDUINO_PORT=/dev/ttyACM0
ARDUINO_SPEED=9600
API_KEY='MY_PACHUBE_KEY'
FEED_ID='MY_FEED_ID'
# Set speed for usb
stty -F $ARDUINO_PORT ispeed $ARDUINO_SPEED ospeed $ARDUINO_SPEED raw
exec 6<$ARDUINO_PORT
# Read data from Arduino
while read -u 6 f ;do
# Remove trailing carriage return character added
# by println to satisfy stupid MS-DOS Computers
f=${f:0:${#f} - 1}
curl --request PUT --header "X-PachubeApiKey: $API_KEY" --data-binary "{ \"version\":\"1.0.0\", \"datastreams\":[ $f ] }" "http://api.pachube.com/v2/feeds/MY_FEED_ID"
echo "$(date) $f was read."
done
不幸的是,这个脚本发疯了,回显消息每 10 秒告诉我几次它向 Pachube 发布数据,尽管它应该每 10 秒执行一次(当第一个脚本告诉 Arduino 创建 JSON 消息时)。我认为这可能是 Arduino 上缓冲消息的问题,但即使将其关闭再打开,问题仍然存在。有什么想法吗?提前致谢。