センサのデータを受信する

Fask で作った住所録アプリで下のような実験をしてみてください。

アプリの外からデータを送り込む実験

まず、住所録アプリを起動します。環境設定を行うコマンド等の説明は省略しています。

http://localhost:5000 をブラウザで表示するとこれまでに入力したデータが表示されているはずです。この状態で、別のターミナルウインドウ(WindowsならWSL、Macならターミナル)を開いて次のコマンドを実行してみてください。

ブラウザで開いていた http://localhost:5000 の表示はすぐには変わりませんが、画面を更新表示するとこの様になっているはずです。

これは何が起きたのか考えてみましょう。

住所録アプリの住所入力画面はHTMLのフォーム <form>〜</form> で記述されており、データは Python プログラムの def checkin() 関数内で受け取っていました。このとき POST メソッドによってデータ送信されます。ソースコードではこの部分です。

上の実験で実行した curl コマンドは、http://localhost:5000/checkin というURLに GET メソッドを使って name=TANAKA および address=UnitedStateOfAmerica というパラメータを送る命令です。Python プログラムには実は GET メソッドに対する処理も書いてあって、それはこの部分です。

以上の事実が意味することは、WEBアプリに対して、別のシステムやデバイスからネットワーク経由でデータを送ることができるということです。例えばその用途として、センサを持ったマイコンボードからデータを送信して、WEBアプリで受信し、データの処理・管理を行うというシステムが考えられます。

色々な用語が出てきて混乱したかもしれません。以下の内容に進む前に、ひとつづつ調べて疑問がないようにしてください。

センサ・データを受信するアプリ

  • app.py
現在時刻を得るために datetime というモジュールを最初に import しています。21行目でテーブルを定義していますが、管理用のID番号、日付・時刻、温度、湿度 の4項目のテーブルにしています。センサーデータを受信した時点のシステムの日付・時刻を、センサーデータと同時にデータベースに保存します。

  • index.html
<meta http-equiv=”refresh” content=”1; URL=”> の行は1秒毎にブラウザのページをリロードさせる命令です。センサーデータを受信するタイミングがわからないので、最新のデータを常に表示するためです。

以上のファイルでアプリは完成ですのでいつものように動作させて、ブラウザで http://localhost:5000 を参照してください。

  • senddata.sh

これはセンサーデータを送るためのシェル・スクリプトです。現時点ではまだセンサー・デバイスは実装していませんので、スクリプトを使ってテストします。

ファイルを作ったら実行権限を与えてください。
シェルスクリプトを実行します。
Enterキーを打つたびにWEBアプリにデータが送信されます。http://localhost:5000 を参照してください。

コメント