さくらのIoT Platformを試してみた

2016.06.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
さくらのIoT Platformは、さくらインターネットが提供する新しいIoTプラットフォームサービスです。2016年3月にαテストの公募があったので申し込んでみたところ、5月末にモジュールとサービスの利用案内が送られてきたので試してみた様子をレポートします。

この記事と同時にAWSと連携するエントリーも公開しました。こちらもどうぞ。

さくらのIoT Platformとは

さくらのIoT Platformは、さくらのIoT通信モジュールという専用デバイスから閉域網経由でIoTバックエンドまでを提供するサービスです。AWS IoTや他のクラウドが提供するIoT関連サービスは、インターネット経由を前提とし汎用のデバイスにSDKを組み込んで利用する形態が一般的なので、デバイスとネットワークの面での差別化が期待できます。バックエンドは他のクラウドサービスと連携することを想定しAPIが用意されています。現在はクローズαで、9月以降にβがリリースされる予定です。

image_screen_01

α版の同梱物

送られてきたα版のパッケージは、ロゴ入りのスチールボックスに以下が同梱されていました。

  • IoT通信モジュール SORACOM版 : 1個
  • IoT通信モジュール Softbank版 : 1個
  • 接続ケーブル : 2本
  • 棒形アンテナ : 2本
  • アンテナケーブル : 2本
  • 板型アンテナ : 1個
  • さくらのクラウド2万円分チケット : 1枚
  • シール : 1枚

IoT通信モジュールは、Cerevoとさくらインターネットのロゴがプリントされた「モデムモジュール」にABiTのロゴがプリントされた「さくらのデバイスモジュール」がマウントされ *1、Softbank版にのみmicroSDスロットがある以外は外見はほぼ同じ構成に見えました。どちらもSIMカードは装着済みで、付近の端子の配置から付け外しを想定した造りにはなっていません(分解しない限りSIMカードは外せなさそうです)。

モジュールの取り扱いとIoT Platformの簡単な使い方が開発者向けサイトの利用ガイドにあるので、こちらに沿って試してみました。

準備するもの

  • Arduino Uno R3: 1台
  • USBケーブル(Aコネクタ-Bコネクタ) : 1本
  • さくらインターネットのアカウント

IoT通信モジュールは5V電源で稼働し、通信インターフェース(SPI、I2C)が搭載されているので、ArduinoやIntel Edisonなどのマイコン/シングルボードコンピュータをベースとしてセンサー類と組み合わせて利用します。今回はサンプルスケッチが用意されているArduino Unoを利用します。

さくらインターネットのアカウントはIoT Platform専用のものではなく任意のアカウントでIoT Platformのコントロールパネルにアクセスできます。

通信モジュールの登録

IoT Platformのコントロールパネルの[モジュール登録]ボタンをクリックし、登録ダイアログを表示します。通信モジュールのシールに登録に必要な情報が記載されているので、[登録ID]に「ID」、[登録用パスワード]に「PASS」をそれぞれ入力、任意のモジュール名を入力して[追加する]をクリックします。

sakura-iot07

通信モジュールが一覧に登録されればOKです(IDは一意な値が自動で割り振られます)。

sakura-iot06

セットアップ

今回はSORACOM版を利用しました。まずは、通信モジュールにアンテナと接続ケーブルをセットし、Arduinoに接続します。

  1. 棒型アンテナをアンテナケーブルにセットし、アンテナケーブルCN2アンテナ端子に設置 *2
  2. 接続ケーブルをJ1端子にセットします。けっこう固くカチっというような手応えも無いので、ほどほどに刺さるところまでがんばります。
  3. 利用ガイド記載の信号定義を参考に、接続ケーブルをArduinoのピンに刺していきます。接続ケーブルは用途別に分かりやすく色分けされていて良いですね。Arduinoの基盤にプリントされている表記とは以下で対応させました。
    • UARTのTx/RxはArduinoとデバイスで逆(TxとRx、RxとTx)
    • GNDはどれでも構わない
    • SPI CSは、SS(DIGITAL 10)に対応

セットした様子が以下です。

sakura-iot08

この状態でArduinoのUSBケーブルをPCやモバイルバッテリーなどに接続すると電源が入り、通信モジュールが起動します。今回はこのあとMacbookからスケッチをモジュールに書き込むので、Macに接続します。D4のLEDが2回点滅から1回点滅に変わったら、モバイルネットワークの接続完了です。コントロールパネルをリロードして、モジュールの[接続]が「オンライン」に変わっていればIoT Platformから正常に認識されています。

sakura-iot05

このあとの動作確認のために、WebSocketサービスを追加しておきましょう。コントロールパネルの[サービス追加]から「WebSocket」をクリック、任意のサービス名(今回は「testwebsocket」)を入力して「作成する」ボタンをクリックします。一覧画面から作成されたWebSocketサービスをクリックすると、モジュールから送られてくるデータをリアルタイムに表示する画面になるので、置いておきましょう。

sakura-iot09

これでセットアップ完了です。

スケッチの書き込みと動作確認

  1. サンプルスケッチgit cloneなどでローカルにダウンロードします。
  2. Arduino IDEを開きます。
  3. ヘッダファイルsrc/SakuraAlpha.hを読み込めるように、[スケッチ] - [ライブラリをインクルード] - [.ZIP形式のライブラリをインストール...]から、srcディレクトリを追加し、再度[スケッチ] - [ライブラリをインクルード]から、追加された[SakuraAlpha_I2C]を選択します。
  4. examples/SakuraAlpha_I2C/SakuraAlpha_I2C.inoファイルを開き、[→]ボタンでコンパイル、マイコンに書き込むを実行します。

手元で確認したときには、Arduino IDEのコンソールにavrdude: stk500_getsync() attempt 1 of 10: not in sync:というエラーが頻発したため、以下の記事を参考にリセットして対応しました。

[ツール] - [シリアルモニタ]を選択し、以下のように送信ログが出力されていればOKです。

sakura-iot01

コントロールパネルのWebSocketサービス画面にも、受信データ(3チャネルにカウントアップする整数データ)が表示されてきます。

sakura-iot02

通信モジュールからIoT Platformに、正常にデータが送信されていますね。

連携サービスの確認

IoT Platformのα版では、以下3つの連携サービスが提供されます。

  • Incoming Webhook : 特定のサーバーからデータを受信(6/6現在未実装)
  • Outgoing Webhook : 特定のサーバーにデータを送信
  • WebSocket : 双方向

WebSocketサービスはコントロールパネルで受信データを確認する他に、ページ記載のエンドポイントに任意のWebSocketクライアントで接続し、データを受信することができます。今回はGolang製のwesoで接続してみました。

$ weso wss://secure.sakura.ad.jp/iot-alpha/ws/<Token文字列>
<< {"module":"1234567890ab","type":"channels","datetime":"2016-06-06T07:43:55.024301691Z","payload":{"channels":[{"channel":0,"type":"I","value":2},{"channel":1,"type":"I","value":2},{"channel":2,"type":"I","value":2}]}}
<< {"module":"1234567890ab","type":"channels","datetime":"2016-06-06T07:43:56.754328578Z","payload":{"channels":[{"channel":0,"type":"I","value":3},{"channel":1,"type":"I","value":3},{"channel":2,"type":"I","value":3}]}}
<< {"module":"1234567890ab","type":"channels","datetime":"2016-06-06T07:43:58.574686092Z","payload":{"channels":[{"channel":0,"type":"I","value":4},{"channel":1,"type":"I","value":4},{"channel":2,"type":"I","value":4}]}}
<< {"module":"1234567890ab","type":"channels","datetime":"2016-06-06T07:44:00.294506092Z","payload":{"channels":[{"channel":0,"type":"I","value":5},{"channel":1,"type":"I","value":5},{"channel":2,"type":"I","value":5}]}}
<< {"module":"1234567890ab","type":"channels","datetime":"2016-06-06T07:44:02.114708605Z","payload":{"channels":[{"channel":0,"type":"I","value":6},{"channel":1,"type":"I","value":6},{"channel":2,"type":"I","value":6}]}}
^C
$

良い感じですね。データはIoT PlatformによってJSON形式に整形され、payload要素に含まれることがわかります。

Outgoing Webhookについても適当なホストを登録しホストでnetcatを実行、Webhookのリクエストを受信してみました。

$ while :  ; do nc -l 0.0.0.0 8080; done
POST / HTTP/1.1
Host: XXXXXXXX.ap.ngrok.io
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.10.0
X-Sakura-Signature: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Content-Type: application/json
Content-Length: 245
X-Forwarded-For: XX.XX.XX.XX

{"payload": {"channels": [{"channel": 0, "value": 27, "type": "I"}, {"channel": 1, "value": 27, "type": "I"}, {"channel": 2, "value": 27, "type": "I"}]}, "module": "1234567890ab", "datetime": "2016-06-06T07:53:07.257754759Z", "type": "channels"}^C
$

POSTで、こちらもapplication/jsonに整形されて飛んでくるのがわかりました。

まとめ

さくらのIoT Platform α版の様子をレポートしました。スケッチではI2C/SPIインターフェースに書き込む処理を記述するだけで動き、通信モジュールからIoT Platformへのネットワーク通信処理は完全に隠蔽されています。逆に言えば、開発者はネットワークの構成やIoT Platformまでのネットワークセキュリティを意識する必要が無いため、センサーとの連携などスケッチの開発に集中することができ、IoTシステムの新しい開発モデルとして捉えることができるのではないでしょうか。

SORACOMモデルとSoftbankモデルの2つがありますが、SORACOM Beamをはじめとする付加サービスはSORACOMのコンソール/APIにアクセスできないため利用できません。そのため現時点では2つのモデルは単純にキャリア(DOCOMO網 or Softbank網)の選択になってしまっているのは残念ですね。付加機能がモデル毎に提供されることを期待します。

さて、私の本業はクラウド連携の部分なので、次はAWSとの連携を試してみたいと思います! →こちら

参考URL

脚注

  1. 基盤の大小からこう書きましたが、マウント関係は逆かもしれませんw
  2. 基盤のデータシートにあるCN1は未実装でした