SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IoTをかじってみよう

IoTをかじってみよう(4)
~PHPアプリケーションをクラウド上のDockerコンテナで稼働させる

mbedアプリケーションの実行

 Bluemixから提供されたパブリックIPアドレスを、mbedアプリケーションのプログラムのURLのIPアドレス(XXX.XXX.XXX.XXXの部分)に記載してコンパイルします。

 念のため、プログラムを再度示します。

mbedアプリケーション
#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」のメッセージが次々に表示されます。

図13 mbedの実行結果画面
図13 mbedの実行結果画面

 サーバー側も確認してみましょう。ブラウザでhttp://XXX.XXX.XXX.XXX/readdb.phpへアクセスします。さきほどと同じようにmbedから受信したデータが表示されていればOKです。

図14 Bluemixの実行結果画面
図14 Bluemixの実行結果画面

 mbedアプリケーションの送信回数の制限を変更することによって、必要に応じて時系列で温度情報をDBへ取込むことができます。

第4回のまとめ

 今回は、第3回で作成したPHPアプリケーションとnginxとMySQLを導入したDockerイメージを、IBM Containers上のコンテナとして稼働させました。そして、mbedからインターネット経由で送信したデータが、ブラウザで表示できることを確かめました。

 次回は、オフライン開発ツール(IDE)をご紹介します。

補足

 今回のアプリケーションは機能の紹介が目的ですので、セキュリティ面で通信の暗号化の対策が入っていません。

 また、MySQLとnginxはそれぞれ別コンテナで稼働させる方が現実的ですが、コンテナ間連携についても今回は割愛しました。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
IoTをかじってみよう連載記事一覧

もっと読む

この記事の著者

谷口 督(日本アイ・ビー・エム株式会社)(タニグチ ススム)

2000年問題対応の時期にIT業界に入り、それ以来UNIX系のインフラ構築を担当。最近の関心事は、そろそろ出てきそうな画期的なテクノロジー探しや世の中が良くなるためのもの作りです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9186 2016/02/03 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー