mbedにはHTTPClientのライブラリがあるため、HTTPプロトコルでPOSTリクエストをWebサーバーに対して送信するアプリケーションの開発が比較的容易にできます。POSTリクエストで送信されたセンサーの情報を受け付けるWebアプリケーションを、IBM Containers上にPHPで作成してみます。つまり、IoTのサーバーといっても、よくあるWebサーバーを構築すればよいのです。
今回のアプリケーションの概要
mbedのセンサーで測定した温度に簡単なテキストのメモを追加して、サーバーへPOSTリクエストのデータとして送信するアプリケーションを作成します。使用するデバイスは1台ですが、今後追加することを考慮しておきましょう。そのためにデバイスの識別のためのデバイスIDをそれぞれのmbedで持つようにします。
データ送信時にはデバイスIDを付与して送信してくるものとします。つまり、(1)mbedからの送信データはHTTPのPOSTリクエストで、デバイスID(deviceid)、温度(temperature)、メモ(memo)の3項目になります。
また、(2)送られてきたデータを時系列に管理したいので、サーバー側でデータをためる際には日時(datetime)を付与して記録します。
データベースのテーブルには、デバイスID(deviceid)、温度(temperature)、メモ(memo)に加えて日時(datetime)も持たせることにします。データベースはMySQLを使用して、varchar(8)、float、varchar(20)、timestampのデータ型で実装します。
(3)最後にデータベースに収集されたデータを表示するPHPアプリケーションも実装します。
データを受信するサーバーのPHPアプリケーションはwritedb.phpとし、受信したデータを表示するPHPアプリケーションをreaddb.phpとします。
Webサーバーは、最近利用者の増えている軽量Webサーバーであるnginxを使います。
以下に構成図を示します。
環境の準備
mbed用のアプリケーションは、前回までと同様にオンラインのIDEで開発します。サーバー側の開発環境のホストOSは、Linux(Ubuntu 14.04 LTS)を使うことにします。開発環境にはDockerおよびIBM Containers用Cloud Foundryプラグインを導入します。
サーバー側のアプリケーションとしては、開発環境でPHPアプリケーションと、それを実行するためのMySQL、nginx、PHP関連モジュールを導入したコンテナイメージを作成します。そして完成したコンテナイメージをIBM Containers用Cloud Foundryプラグインで、IBM Bluemix上のIBM Containersにデプロイするという流れになります。
なお、開発環境のホストOSで実行する場合のプロンプトを$、コンテナ上で実行する場合のプロンプトはContainer>とします。