Arduino を使用してデータを Pachube に投稿するときに問題が発生します。Arduino は、「t」を送信すると温度の JSON データを返し、「l」を送信すると光レベルの JSON データを返すように構成されています。これは、Arduino シリアル モニターを介して完全に機能します。次に、2 つの bash スクリプトを作成しました。1 つは定期的に 't' および 'l' コマンドを Arduino に送信し、各要求の間に 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 秒ごとにエコー メッセージが表示されます。もう 1 つのスクリプトは、生成された JSON をシリアル ポートから読み取ります (基本的には、Web ページからコピーしました)。
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 にデータを投稿したことを伝えるエコー メッセージでおかしくなります (最初のスクリプトが Arduino に JSON メッセージを作成するように指示したときはいつでも)。Arduinoのバッファリングされたメッセージに問題があるのではないかと思いましたが、電源を切って入れ直しても問題は残ります。何かご意見は?前もって感謝します。