Arduino YUN側プログラムのコンパイル・ダウンロード
Arduino系列のマイコンボードは、Arduino IDEを使ってArduino系列ボード上のプログラムを開発・コンパイルし、ダウンロードすることができます。開発にはSketchという独自言語を使う必要がありますが、Publisherとしてのプログラムを作成する場合、長いソースコードを記述することはまれです。
今回は「PubSubClientライブラリ」を使ったサンプルコードを全行掲載しています。開発経験の少ない方でも、動作確認まで作業することができるとおもいます。
最初にPubSubClientライブラリをダウンロードします。ブラウザを起動し、
「http://pubsubclient.knolleary.net/」を開きます。
Downloadセクションの「GitHub」リンクを押します。
最新バージョンのSource Code(Zip)リンクを押し、Zipファイルをダウンロードします。ダウンロードが終わったらそのファイルを展開し、Arduino IDE展開先ディレクトリ内のlibrariesディレクトリ内に配置します。
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中央部分のコードに貼り付けます。
#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 IDE上に「マイコンボードへの書き込みが完了しました。」と表示されたら、[ツール]>[シリアルモニタ]を選択してシリアルモニタ画面を開きます。
シリアルモニタ画面上に「successfully sent」という文字列が表示されるまで待機します。
Quickstart上で受信確認
次に、Quickstart側で受信していることを確認します。
ブラウザを起動し、「Quickstart」を開きます。
デバイスID入力欄にサンプルソース上にMACアドレスとして記述した文字列をそのまま入力し、進むボタンを押します。
しばらくすると、デバイスID入力欄の下にグラフが表示され、約5秒間隔でデータが1件ずつ追加されていることがわかります。
IoTを始めたい方も・本格導入を検討中の方も:おすすめソリューションのご紹介
ビジネスのパフォーマンスを高めようとさまざまな業種・企業で、IoT活用を前提とするプロジェクトが動き始めています。ただし、検討を始めて最初に出てくるのは、こんな要望ではないでしょうか。
「最初は実験的にスタートしたいから、小さく簡単に素早く始めたい」
「実運用に移ったときには10万・100万単位のセンサ/デバイスに対応できるスケーラビリティも確保したい」
これにお応えできるサービス・製品がIBMにあります。ぜひ、下記の資料をご覧ください。(編集部)