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秒間隔でIoT Foundation[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にあります。ぜひ、下記の資料をご覧ください。(編集部)