SHOEISHA iD

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

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

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

IoTをかじってみよう

IoTをかじってみよう(3)
~センサーのデータをWebサーバーに送付するmbedアプリケーションを作成する

mbedアプリケーションの開発

 オンラインのIDEを使用してmbedアプリケーションを開発します。第1話と同じように「IoTkajiCli」という名前の新しいプログラムを作成します。

図2 新しいプログラムの作成
図2 新しいプログラムの作成

 生成されたmain.cppを開いて、プログラムを記述して保存します。概要で述べたように今回のレシピは、デバイスID(deviceid)、温度(temperature)、メモ(memo)の3項目をWebサーバーへHTTPでPOST送信するアプリケーションです。

 処理の内容は次のようになります。

  • (1)液晶画面をクリアしてからDHCPから取得したIPアドレスを表示します。
  • (2)ここでは一旦、20回送信したら終了することにします。
  • (3)温度センサーの情報を取得します。
  • (4)POSTするためのデータを作成します。
  • (5)サーバーのURLを指定してPOSTします。サーバーのURLは、最終的にはIBM Containers上で割り当てられるものを使用しますが、ご自身の環境に合わせて記載してください。
  • (6)送信できていることの確認ができるように、POSTした返り値を温度と一緒に液晶画面に表示します。
  • (7)接続を切断します。
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();
}

 deviceidとmemoは、好きな値でかまいません。サーバーのURLは、最終的にはIBM Containers上で割り当てられるものを使用します。

ライブラリのインポート

 アプリケーションボードの液晶画面に情報を表示させたいので、C12832ライブラリをインポートしましょう。

 オンラインIDEのインポートボタンをクリックして、インポートウィザードを開きます。

図3 C12832のインポート
図3 C12832のインポート

 ダイアログボックスが表示されますので、updateにチェックを付けてインポートします。

図4 C12832のインポートダイアログ
図4 C12832のインポートダイアログ

 温度センサーを使用しますので、同様にLM75Bライブラリをインポートします。ただし、このときfeature complete driverのものを選びます。

図5 LM75Bのインポート
図5 LM75Bのインポート

 さらにサーバーとの通信のためEthernetInterfaceもインポートします。作成者がmbed officialのライブラリを選びます。

図6 EthernetInterfaceのインポート
図6 EthernetInterfaceのインポート

 EthernetInterfaceライブラリは、mbed-rtosライブラリを必要としますのでインポートします。作成者がmbed officialのライブラリを選びます。

図7 mbed-rtosのインポート
図7 mbed-rtosのインポート

 最後にサーバーとのHTTP通信のためにHTTPClientをインポートしますが、mbedのハンドブックから「TCP IP protocols and APIs」を開きます。表にあるHTTPClientをクリックします。

図8 HTTPClientの選択
図8 HTTPClientの選択

 HTTPClientのライブラリをインポートする画面が表示されますので、「Import this library」ボタンを押します。

図9 HTTPClientのインポート
図9 HTTPClientのインポート

 プログラムがコンパイルできることを確認します。コンパイルが成功すると実行ファイルが作成されてローカルPCへ保存するかどうかを確認されますのでOKを押します。

図10 コンパイル
図10 コンパイル

 以上でmbed側の開発は完了です。

次のページ
サーバー側開発環境の準備

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

IoTをかじってみよう連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9162 2016/01/27 14:00

イベント

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

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

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

メールバックナンバー