M5StackをIBM Watson IoT Platform (QuickStart) にデータ送信&可視化するメモです。
今回の仕組み
基本的にはNefryBTをIBM Watson IoT Platform (QuickStart) にデータ送信&可視化するときのナレッジを踏襲します。
実際にこのよう動きます。
#M5Stack で IBM Watson IoT Platform の QuickStart ひとまず、つながった!
A・B・Cボタン押すと値が送られてグラフが反応します。 #IBMCloud pic.twitter.com/Rbb39UHJdp— Tanaka Seigo (@1ft_seabass) April 12, 2018
ソースコード
上記でもいいのですがもう少し最近培ったナビゲーションを加えます。
このように接続状態がひと目で分かったり、
ボタンが押されたときに分かりやすく変化したりする機能を加えます。
対応したソースが以下です。
#include <M5Stack.h> #include <WiFiClient.h> #include <PubSubClient.h> // Wi-Fi SSID const char* ssid = "Wi-Fi SSID"; // Wi-Fi PASSWORD const char* password = "Wi-Fi PASSWORD"; //-------- Customise these values ----------- // 接続先のIBM Watson IoT Platform #define ORG "quickstart" // デバイスタイプはm5stackで #define DEVICE_TYPE "m5stack" // デバイスIDは以下で #define DEVICE_ID "M5Stack_123456789" // quickstartでは使わないが宣言はしておく #define TOKEN "<yourDeviceToken>" //-------- Customise the above values -------- // 実際の接続するための設定群 char server[] = ORG ".messaging.internetofthings.ibmcloud.com"; char topic[] = "iot-2/evt/status/fmt/json"; char authMethod[] = "use-token-auth"; char token[] = TOKEN; char clientId[] = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID; // WiFiClient準備 WiFiClient wifiClient; // 入力の状態記録 int sensorValueState = LOW; // ポート番号 const int port = 1883; // 今回センサーがつながったピン番号 D2 int PIN = 2; // MQTT接続のための準備 // QuickStartのため server , port だけ。あとはwifiClient紐付け。 PubSubClient client(server, port, wifiClient); void setup() { // initialize the M5Stack object M5.begin(); M5.Lcd.drawBitmap(0, 0, 320, 240, (uint16_t *)gImage_logoM5); delay(500); M5.Lcd.fillScreen(BLACK); // M5.Lcd.setCursor(10, 10); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(3); M5.Lcd.println("Send IBM Watson"); M5.Lcd.println("IoT Platform!!!"); M5.Lcd.println(""); pinMode(PIN,INPUT); Serial.begin(115200); Serial.println("Connecting to "); Serial.println(ssid); Serial.println(); if (strcmp (WiFi.SSID().c_str(), ssid) != 0) { WiFi.begin(ssid, password); } while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("WiFi connected, IP address: "); Serial.println(WiFi.localIP()); // WiFi Connected Serial.println("\nWiFi Connected."); M5.Lcd.println("WiFi Connected."); M5.Lcd.println(""); // INFO M5.Lcd.setTextSize(2); M5.Lcd.printf("ORG: "); M5.Lcd.println(ORG); M5.Lcd.printf("DEVICE_TYPE: "); M5.Lcd.println(DEVICE_TYPE); M5.Lcd.printf("DEVICE_ID: "); M5.Lcd.println(DEVICE_ID); } void loop() { String payload; // Serial.print("."); // MQTT再接続処理 if (!!!client.connected()) { Serial.print("Reconnecting client to "); Serial.println(server); while (!!!client.connect(clientId, authMethod, token)) { Serial.print("."); delay(500); } Serial.println(); } if(M5.BtnA.wasPressed()) { Serial.printf("wasPressed A \r\n"); M5.Lcd.setCursor(10, 100); M5.Lcd.fillScreen(RED); M5.Lcd.setTextColor(YELLOW); M5.Lcd.setTextSize(3); M5.Lcd.printf("Pressed "); M5.Lcd.setTextSize(10); M5.Lcd.printf("A"); payload = "{ \"d\" : {\"flag\":1} }"; // データ送信 Serial.print("Sending payload: "); Serial.println(payload); if (client.publish(topic, (char*) payload.c_str())) { Serial.println("Publish ok"); } else { Serial.println("Publish failed"); } delay(1000); } if(M5.BtnB.wasPressed()) { Serial.printf("wasPressed B \r\n"); M5.Lcd.setCursor(10, 100); M5.Lcd.fillScreen(BLUE); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(3); M5.Lcd.printf("Pressed "); M5.Lcd.setTextSize(10); M5.Lcd.printf("B"); payload = "{ \"d\" : {\"flag\":2} }"; // データ送信 Serial.print("Sending payload: "); Serial.println(payload); if (client.publish(topic, (char*) payload.c_str())) { Serial.println("Publish ok"); } else { Serial.println("Publish failed"); } delay(1000); } if(M5.BtnC.wasPressed()) { Serial.printf("wasPressed C \r\n"); M5.Lcd.setCursor(10, 100); M5.Lcd.fillScreen(GREEN); M5.Lcd.setTextColor(BLACK); M5.Lcd.setTextSize(3); M5.Lcd.printf("Pressed "); M5.Lcd.setTextSize(10); M5.Lcd.printf("C"); payload = "{ \"d\" : {\"flag\":3} }"; // データ送信 Serial.print("Sending payload: "); Serial.println(payload); if (client.publish(topic, (char*) payload.c_str())) { Serial.println("Publish ok"); } else { Serial.println("Publish failed"); } delay(1000); } M5.update(); }
動かしてみる
M5Stackに書き込んだら動かしてみます。
無事、接続状態も分かりやすく伝わって、ボタンを押すと演出とQuickStart上の可視化が連動しています!
これで、M5StackがIBMのサービスとも連携しやすくなりデータの蓄積や分析などにも展開できますね。
それでは、よきM5Stack & IBM Watson IoT Platform Lifeを!