竹本氏のWeb を参考に実験した。温度測定ができたので Mathematica を使って温度を読み取りクラフを描くことを行った。
1. スクリプト LM73.sh を利用してデータを読み込む
Mathematica ノートブックを次に示す。コマンドを実行した結果は ⇒ で示している。Wolfram Community の Reading Temperature Sensors in the Wolfram Language on the RPi を参考にした。
$MachineName
⇒ "raspberrypi"
Directory[ ] (* pwd *)
⇒ "/home/pi"
FileNames["work*"] (* ls *)
⇒ {"workLM73", "workmath"}
SetDirectory["./workLM73"] (* cd *)
⇒ "/home/pi/workLM73"
FileNames["*.sh"] (* ls *)
⇒ {"LM73.sh"}
Run["./LM73.sh > tmp.dat"]; FilePrint["tmp.dat"]
⇒ 11.6875
ftemp := (Run["./LM73.sh > tmp.dat"]; First[ReadList["tmp.dat", Number]])
ftemp
⇒ 11.6875
1秒ごとに10回の測定データを収集する。
Table[Pause[1]; ftemp, {10}]
2. 時間と温度を組にしたデータを DateListPlot を使ってグラフに描く
htemp := (Put[DateList[AbsoluteTime[]], "tmp.dat"];
Run["./LM73.sh >> tmp.dat"];
ToExpression[Import["tmp.dat", "Lines"]])
htemp
⇒ {{2014, 2, 22, 14, 36, 12.7951}, 11.9062}
1秒ごとに10回測定してプロットする。
data = Table[Pause[1]; htemp, {10}];
DateListPlot[data, PlotRange -> {10, 13}, PlotStyle -> PointSize[Large],
FrameLabel -> {Style["Time", 14], Style["Temperature", 14]}]
3. スケジュールに沿った温度測定の例
スケジュールに沿った測定に便利な「時間指定付き評価」がある。このチュートリアルの使用例が参考になる。10秒ごとに10回測定するスケジュール測定を行い途中結果をダイナミックに表示するプログラムが次です。
tt = {};
RunScheduledTask[(deg = htemp; AppendTo[tt, deg];), {10, 10}];
Dynamic[If[tt != {},
grf = DateListPlot[tt, PlotMarkers -> Automatic,
PlotRange -> {9.0, 13.0}, FrameLabel -> {"Time", "Temperature"},
PlotLabel -> StringTake[DateString[], 15]]] ]
ScheduleTaskObject が作られるので最後に削除するとよい。
RemoveScheduledTask[ScheduledTasks[]];
ScheduledTasks[ ]
まとめ
スクリプト LM73.sh を利用してデータを読み込んだ後は Mathematica の関数を使ってデータ処理かできた。