SHOEISHA iD

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

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

Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発(AD)

やっぱりモノをつなげて体験しよう! Arduino YUNとBluemixではじめるIoT入門

Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発 【第1回】

  • このエントリーをはてなブックマークに追加

Arduino YUN側プログラムのコンパイル・ダウンロード

Arduino系列のマイコンボードは、Arduino IDEを使ってArduino系列ボード上のプログラムを開発・コンパイルし、ダウンロードすることができます。開発にはSketchという独自言語を使う必要がありますが、Publisherとしてのプログラムを作成する場合、長いソースコードを記述することはまれです。

今回は「PubSubClientライブラリ」を使ったサンプルコードを全行掲載しています。開発経験の少ない方でも、動作確認まで作業することができるとおもいます。

最初にPubSubClientライブラリをダウンロードします。ブラウザを起動し、
http://pubsubclient.knolleary.net/」を開きます。

PubSubClient GitHubリンクを選択
PubSubClient GitHubリンクを選択

Downloadセクションの「GitHub」リンクを押します。

PubSubClient GitHub source codeリンクを選択
PubSubClient GitHub source codeリンクを選択

最新バージョンのSource Code(Zip)リンクを押し、Zipファイルをダウンロードします。ダウンロードが終わったらそのファイルを展開し、Arduino IDE展開先ディレクトリ内のlibrariesディレクトリ内に配置します。

PubSubClientライブラリの配置
PubSubClientライブラリの配置

PCとArduino YUNとの間のケーブルをいったん外し、再度接続します。

Arduino YUNを再度PCが認識したら、IDEの展開先ディレクトリ内にあるarduino.exeを実行し、Arduino IDE開発画面を開きます。それから、Arduino IDE開発画面の[ツール]>[ボード]>[Arduino YUN]を選択します。

ボードの選択
ボードの選択

続いて、[ツール]>[ポート]を開き、Arduino YUNが接続されたシリアルポート番号を選択します。シリアルポート番号は接続ごとに変わる可能性があります。PCと接続済みの場合、次のようにどのポートに接続しているかがわかるように表示されます。

ポートの選択
ポートの選択

そして、いよいよプログラムです。次のサンプルプログラムは、5秒間隔でWatson IoT Platform[Quickstart]へダミーデータを送信しており、送信に成功すると、シリアルモニタ画面に「successfully sent」というメッセージを表示するというものです。

次のソースコードを、Arduino IDE中央部分のコードに貼り付けます。

pub_sample.ino
#include <SPI.h>
#include <Bridge.h>
#include <Console.h>
#include <YunClient.h>
#include <PubSubClient.h>
//#include <DHT.h>

// MAC アドレス/デバイスID(要書き換え)
char macstr[] = "xxxxxxxxxxxx";

// 環境系データ(ダミー)
float temp = 15.0;
float humid = 40.0;

// ネットワーククライアント(YUN専用)
YunClient c;

// MQTTブローカエンドポイント
char serverName[]="quickstart.messaging.internetofthings.ibmcloud.com";
// クライアントID
String clientName = String("d:quickstart:arduino:") + macstr;
// トピック
String topicName = String("iot-2/evt/status/fmt/json");

// PubSubClient
PubSubClient client(serverName, 1883, 0, c);

//#define DHTPIN A0
//#define DHTTYPE DHT22
//DHT dht(DHTPIN, DHTTYPE);

// 初期化処理
void setup() {
  // シリアルモニタ準備
  Serial.begin(9600);
  while (!Serial);
  Serial.println("start serial");

  // ネットワーク準備(YUN)
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);
  Bridge.begin();
  Serial.println("start bridge");
  delay(2000);
  digitalWrite(13, LOW);

 //dht.begin();
}

// ループ処理
void loop() {
  // char配列化
  char clientStr[34];
  clientName.toCharArray(clientStr,34);
  char topicStr[26];
  topicName.toCharArray(topicStr,26);

  // センサデータ取得
  getData();

  // MQTTブローカへ接続
  if (!client.connected()) {
    Serial.print("Trying to connect to: ");
    Serial.println(clientStr);
    client.connect(clientStr);
  }

  // メッセージ送信
  if (client.connected() ) {
    // メッセージ作成
    String json = buildJson();
    char jsonStr[300];
    json.toCharArray(jsonStr,300);

    // MQTTブローカへメッセージ送信
    boolean pubresult = client.publish(topicStr, jsonStr);
    Serial.print("attempt to send ");
    Serial.println(jsonStr);
    Serial.print("to ");
    Serial.println(topicStr);
    if (pubresult)
      Serial.println("successfully sent");
    else
      Serial.println("unsuccessfully sent");
  }

  // 5秒待機
  delay(5000);
}

// メッセージ用文字列作成処理
String buildJson() {
  String data = "{";
  data+="\n";
  data+= "\"d\": {";
  data+="\n";
  data+="\"myName\": \"Arduino YUN\",";
  data+="\n";
  data+="\"temp\": ";
  data+= (int)temp;
  data+= ",";
  data+="\n";
  data+="\"humid\": ";
  data+=(int)humid;
  data+="\n";
  data+="}";
  data+="\n";
  data+="}";
  return data;
}

// センサデータ取得
void getData() {
  //humid = dht.readHumidity();
  //temp = dht.readTemperature(false);
}

サンプルコード上の「xxxxxxxxxxxx」部分は、Arduino YUNのMACアドレスに変更してください。MACアドレスが「A1:B2:C3:D4:E5:F6」であれば、次のように変更します。

// MAC アドレス/デバイスID(要書き換え)
char macstr[] = "a1b2c3d4e5f6";

[→]ボタンを押し、プログラムをArduino YUNへ書き込みます。

Arduino YUNへの書き込み
Arduino YUNへの書き込み

Arduino IDE上に「マイコンボードへの書き込みが完了しました。」と表示されたら、[ツール]>[シリアルモニタ]を選択してシリアルモニタ画面を開きます。

シリアルモニタ画面上に「successfully sent」という文字列が表示されるまで待機します。

シリアルモニタによる動作確認
シリアルモニタによる動作確認

Quickstart上で受信確認

次に、Quickstart側で受信していることを確認します。

ブラウザを起動し、「Quickstart」を開きます。

デバイスID入力欄にサンプルソース上にMACアドレスとして記述した文字列をそのまま入力し、進むボタンを押します。

Quickstart MACアドレスの入力
Quickstart MACアドレスの入力

しばらくすると、デバイスID入力欄の下にグラフが表示され、約5秒間隔でデータが1件ずつ追加されていることがわかります。

Quickstart Arduino YUNデータのグラフ表示
Quickstart Arduino YUNデータのグラフ表示

IoTを始めたい方も・本格導入を検討中の方も:おすすめソリューションのご紹介

ビジネスのパフォーマンスを高めようとさまざまな業種・企業で、IoT活用を前提とするプロジェクトが動き始めています。ただし、検討を始めて最初に出てくるのは、こんな要望ではないでしょうか。

「最初は実験的にスタートしたいから、小さく簡単に素早く始めたい」
「実運用に移ったときには10万・100万単位のセンサ/デバイスに対応できるスケーラビリティも確保したい」

これにお応えできるサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)

次のページ
サンプルコードの動作

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

  • このエントリーをはてなブックマークに追加
Bluemixではじめてみよう! 「IoT→クラウド」データ活用アプリケーション開発連載記事一覧

もっと読む

この記事の著者

堀 扶(ホリ タスク)

株式会社エクサ所属、シニアITアーキテクト。おもに製造業、金融業向けのビジネスシステムの提案、設計、開発、テスト、保守に従事。その後、技術部門へ異動し、技術支援、全社標準化、先進技術調査を担当。IBM Bluemix Challenge 2015にてBluemix賞を受賞。情報処理学会、プロジェクト...

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9233 2016/03/16 20:38

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング