mbedアプリケーションの実行
Bluemixから提供されたパブリックIPアドレスを、mbedアプリケーションのプログラムのURLのIPアドレス(XXX.XXX.XXX.XXXの部分)に記載してコンパイルします。
念のため、プログラムを再度示します。
#include "mbed.h"
#include "LM75B.h"
#include "C12832.h"
#include "EthernetInterface.h"
#include "HTTPClient.h"
LM75B sensor(p28,p27);
C12832 lcd(p5, p7, p6, p8, p11);
HTTPClient http;
int main() {
EthernetInterface _eth;
_eth.init();
_eth.connect();
char _tstr[512];
char _temp[7];
int _res;
int index=0;
// (1)液晶画面をクリアしてからDHCPから取得したIPアドレスを表示します。
lcd.cls();
lcd.locate(0,3);
lcd.printf("IP Address is %s\n", _eth.getIPAddress());
// (2)ここでは一旦、20回送信したら終了することにします。
while(index<20){
lcd.locate(0,4);
// (3)温度センサーの情報を取得します。
if (sensor.open()) {
sprintf(_temp,"%6.3f",(float)sensor); // 温度情報をfloat型へ変換します。
} else {
error("Device not detected!\n");
}
// (4)POSTするためのデータを作成します。
HTTPMap _map;
HTTPText _text(_tstr, 512);
_map.put("deviceid","MBED1234"); // POSTで送信するためdeviceidの値をセットします。
_map.put("temperature",_temp); // POSTで送信するためtemperatureとして計測した温度の値をセットします。
_map.put("memo","mbed iotkaji"); // メモとしてテストであることを書いておきます。
// (5)サーバーのURLを指定してPOSTします。URLはご自身の環境に合わせて記載してください。
_res = http.post("http://XXX.XXX.XXX.XXX/writedb.php", _map, &_text);
// (6)POSTした返り値を温度と一緒に液晶画面に表示します。
lcd.cls();
lcd.locate(0,3);
lcd.printf("Temp = %s/Return code is %d\n",_temp,_res);
wait(1.0); // 送信は1秒に1回に制限します。もっと高頻度で送信できますが、室温なのでまあいいでしょう。
index++;
}
// (7)接続を切断します。
_eth.disconnect();
ダウンロードされたアプリケーションをmbedにロードします。このとき、EthernetにLANケーブルが接続されていることを確認してください。LCDにIPアドレスが表示された後、温度と「Return code is 0」のメッセージが次々に表示されます。
サーバー側も確認してみましょう。ブラウザでhttp://XXX.XXX.XXX.XXX/readdb.phpへアクセスします。さきほどと同じようにmbedから受信したデータが表示されていればOKです。
mbedアプリケーションの送信回数の制限を変更することによって、必要に応じて時系列で温度情報をDBへ取込むことができます。
第4回のまとめ
今回は、第3回で作成したPHPアプリケーションとnginxとMySQLを導入したDockerイメージを、IBM Containers上のコンテナとして稼働させました。そして、mbedからインターネット経由で送信したデータが、ブラウザで表示できることを確かめました。
次回は、オフライン開発ツール(IDE)をご紹介します。
補足
今回のアプリケーションは機能の紹介が目的ですので、セキュリティ面で通信の暗号化の対策が入っていません。
また、MySQLとnginxはそれぞれ別コンテナで稼働させる方が現実的ですが、コンテナ間連携についても今回は割愛しました。
