こんどは、サーバにアップしたテキストデータを読み込み、視覚化してみます。
読み込みは10秒ごとです。
テキストデータを表示
processingスケッチ
/*
webサーバにアップされたテキストデータ(日付時刻と温度)を
読み込み、加工表示する
*/
PFont font; // フォント情報
String dateTime; // 日付時刻
int Temp; // 温度
int Correction = 2; // 表示補正
// データファイルから1行づつ読み込むためのJAVAのクラス
BufferedReader reader;
void setup()
{
// 画面サイズ
size(245, 260);
// 四角形のモード
rectMode(CORNERS);
// フォントを読み込む
font = loadFont("FranklinGothic-Medium-12.vlw");
// dataフォルダからデータを読み込む
// ○○○○○○○○の部分は個々に設定
reader = createReader("http://www.○○○○○○○○/data/○○○○○○○○.txt");
}
void draw()
{
// エラーがない場合
try {
// 1行分読み込む
String line = reader.readLine();
// もし読み込んだ1行分のデータが存在するならば
if (line != null) {
// テキストデータを「|」で分割、配列に格納
// 例)
// columns[0] には'2009/06/21 00:03:20'などの日付時刻部分が格納される
// columns[1] には'015'などの温度データ部分が格納される
String[] columns = split(line, '|');
// 日付時刻部分のテキストデータを変数に格納
dateTime = columns[0];
// 温度部分のテキストデータを数値型に変換して変数に格納
Temp = int(columns[1]);
}
// なんらかのエラーがあった場合
} catch (IOException e) {
// エラーメッセージを出力
e.printStackTrace();
}
// 描画前にdraw()ループごとに一度画面全体をクリアする
background(255);
fill(255);
rect(30, 10, 230, 210);
stroke(200);
line(30, 30, 230, 30);
line(30, 50, 230, 50);
line(30, 70, 230, 70);
line(30, 90, 230, 90);
line(30, 110, 230, 110);
line(30, 130, 230, 130);
line(30, 150, 230, 150);
line(30, 170, 230, 170);
line(30, 190, 230, 190);
fill(255);
textFont(font, 12);
fill(0);
text("90", 10, 35);
text("80", 10, 55);
text("70", 10, 75);
text("60", 10, 95);
text("50", 10, 115);
text("40", 10, 135);
text("30", 10, 155);
text("20", 10, 175);
text("10", 10, 195);
text("(C)", 10, 215);
text("datetime : " + dateTime, 45, 230);
text("temp : " + Temp + " C", 45, 245);
// 棒グラフ
rect(125, (210 - (Temp * Correction)), 135, 210);
// 10秒間ストップ
delay(10000);
}
植物・農業・エレクトロニクス・音楽...。実験とプロジェクトのblog。 ▶ projects : Biotope |
便利そうです。
返信削除これはリアルタイムでできるようになったのでしょうか?
いまはarduinoからのデータアップ方法を試しているところです。このスケッチも正確に10秒ごとの更新ではないようだし、ひとつのファイル内で読み込みと書き出しがバッティングしてファイルのデータ自体が壊れてしまう可能性もあるので、何処かから正確な時刻情報を取得してprocessingでのデータの取得時刻とarduinoでのデータアップ時刻を同期させなくてはなりません。
返信削除ちょっと制約はあるようですが、ウェブでの表示は確認できたのであとはデータアップ方法を確率すれば、完全リアルタイムは無理ですがそれに近いことはできるのではないかと思っています。