スケッチ解説
ma2shita/grove-ultrasonic-ranger_soracom-harvest.inoについて、概要を解説いたします。このスケッチは「センサー制御」と「LTEモデム制御」に2つから構成されています。
センサー制御
Groveの超音波測距センサーはライブラリ化されているためSeeed-Studio/Grove_Ultrasonic_Rangerから入手したライブラリをArduino IDEにインストールすることで簡単に利用が可能になります。
このライブラリを利用するために必要な初期処理は以下の通りです。
#include <Ultrasonic.h> // Grove 超音波測距センサーのライブラリの読み込み #define ULTRASONIC_PIN (WIOLTE_D38) // Wio LTEの D38 に接続している超音波測距センサーを対象とする Ultrasonic UltrasonicRanger(ULTRASONIC_PIN); // Ultrasonicインスタンスを作成
また、loop()の中でUltrasonicのメソッドごとに距離が取得できます。
long distance = UltrasonicRanger.MeasureInCentimeters();
単位をcmではなくinchで取得することも可能です。詳しくはUltrasonic.hでpublicと指定されているメソッドを確認してください。
LTEモデム制御
Wio LTEのLTEモデム制御は前回インストールした「Wio LTE for Arduino」というライブラリで行うことになります。このライブラリを利用するために必要な初期処理は以下の通りです。
#include <WioLTEforArduino.h> // Wio LTEを利用するためのライブラリの読み込み
WioLTE Wio; // WioLTEインスタンスを作成
// 以下は主に setup() の中で実行されることが多い
Wio.Init(); // Wio LTEを利用するための初期化を行う
Wio.PowerSupplyLTE(true); // モデムの電源をON
Wio.TurnOnOrReset(); // モデムのリセット
Wio.Activate("soracom.io", "sora", "sora"); // APNを指定して回線を開く
あとはloop()の中でWioインスタンスのメソッドを実行していきます。
// 可視化サービス「SORACOM Harvest」へUDPを利用してデータを送る
int connectId;
connectId = Wio.SocketOpen("harvest.soracom.io", 8514, WIOLTE_UDP);
char data[128];
Wio.SocketSend(connectId, data);
// サーバからのレスポンスを受け取る
int len;
char res[128];
len = Wio.SocketReceive(connectId, res, sizeof (res), 3000); // 3秒でタイムアウトするようにしている
SerialUSB.println(res); // サーバからのレスポンスをシリアルモニターへ表示
Wio.SocketClose(connectId); // ソケットのクローズ
// 後処理関係 (これらを実行したら、状態に応じて再度 Activate() や PowerSupplyLTE(true) を行ってください)
Wio.Deactivate(); // 回線の切断
Wio.PowerSupplyLTE(false); // LTEモデムの電源OFF
以上の処理の流れを覚えておけば、どのセンサーが取り付けられたとしても容易にデータを送信することができるでしょう。
クラウド連携について
前章で紹介したSORACOM Harvestはあくまでも「IoT開発の初期段階における課題」を解決するサービスであることは、先にも解説した通りです。本格的にIoT開発を進めるにあたって避けられないのがクラウドへのデータ収集となります。
なぜIoTとクラウドは一緒に登場するのか?
筆者はエバンジェリストという仕事柄、さまざまな地域でお客さまの声を直接いただくことがあります。中でも「IoTをやるためにはクラウドを使わないとダメなのでしょうか?」といった質問を、特にハードウェアメーカーの方や製造業の方からお寄せいただくことが多いです。この背景には「他者が提供するサービスのセキュリティや品質、費用に対する不安」といったものがあるようです。
こうした質問に対して筆者は「クラウドは必須ではありませんよ」と答えています。しかし、IoTにおいてはジックリ練ったプランを年単位で実現することよりも、小さく始めつつ週単位で改善しながら実現していくことがとても重要だとも説いています。
この実現には既存の資産を活かすのが最良です。既存の資産には、データセンターやオンプレミス環境も含まれます。これらが即時、そして自由に使えるのであれば、クラウドは必須ではありません。
IoTはいわば新しいプロジェクトです。この場合、利用可能な資産がない、もしくは持っていても他部門が利用させてくれないことが往々にしてあります。そうなるとリソースの調達速度でオンプレに勝るクラウドを活用せざるを得なくなるため、IoTとクラウドは一緒に登場することが多いのです。
一方、クラウドに対する「他者が提供するサービスのセキュリティや品質、費用に対する不安」の面を払拭することは正直大変です。そこで以下のように考えてみる、もしくは説得してみるのはいかがでしょうか。
- IoTシステムを「小さく・素早く実現するための手段」としてのクラウドの活用
- 小さく実現した後の「改善の過程で」オンプレミス環境に移行するシナリオ
クラウドは「小さく始めて早く実現する」ための手段であり、クラウドの利用が目的ではないことを理解してもらえれば、実際に移行するか否かは重要でないこともお分かりになるかと思います。
IoTで活用すべき「クラウド」は「PaaS」や「SaaS」
一般的にクラウドというとIaaS(Infrastructure as a Service;仮想サーバなどのインフラを模したサービス群)を思い浮かべるかと思います。しかし結論から言うと、IaaSでは小さく・素早く始められないのです。仮想サーバのスペック決めやセットアップなどの準備だけでなく、アクセス数増加時のサーバの台数を増やすといった運用や管理はユーザが行う必要があり、手間はオンプレやデータセンターとそれほど変わらないのです。
これからはPaaS(Platform as a Service)やSaaS(Software as a Service)といわれる「フルマネージド・サービス」、すなわち準備から運用、管理といったことはすべてクラウドベンダー側が行ってくれるサービスを利用しましょう。これらの活用が小さく・素早く始めるコツです。
特にIoTにおいては「大量データ処理基盤」といった分類のPaaSやSaaSを活用することになります。代表的なサービスを以下に挙げます。
- AWS IoT Core
- Amazon Kinesis Data Streams
- Azure IoT Hub
- Azure Event Hubs
- Google Cloud IoT Core
- Google Cloud Pub/Sub
これらのサービスの特徴は、デバイスが1台でも数千でも、同じ仕組みで処理できることです。これにより、技術的なメリットは検証の段階から本番と同等の環境と品質で開発できるうえ、検証時や本番の区別をすることなく利用に見合った費用だけで済むと、ビジネス面でも有利です。
