初めての電子工作: Arduinoで6軸センサを動かしてみるの続き。
5000円ちょっとで売られているsakura.ioのβ版モジュールを使うと、Arduinoからsakura.ioへ簡単にデータを投げられる。
sakura.ioに送信したデータはWebSocketやMQTTなどいくつかの形で外部へ取り出すことが出来るので、ぼくのようなウェブ屋さんにはとても扱いやすい。6軸センサの値を取得してsakura.ioに送信し、WebSocketで取得するところまでトライしてみる。
前提
- さくらインターネットにアカウントを持っていること
準備
プロジェクトを作る
IoTプラットフォームの管理コンソールを開いて新しいプロジェクトを作ります。
名称はプロジェクト名称は適当でいいです(後から変更できます)。
モジュールを登録する
sakura.io LTEモジュールを登録します。基板の裏面のシールを剥がすと ID, PASS の記載があります。
プロジェクトの モジュール登録 を開いて…
登録用ID にモジュールの ID を、 登録用パスワード にモジュールの PASS を入力します。これでモジュールの登録は完了。
連携サービスの追加
WebSocketのエンドポイントを作成するため サービス追加 を開きます。
いくつかあるうちの WebSocket を開いて…
適当に名前をつけます(これも後から変更できます)。
トークンとWebSocketエンドポイントが作成されるので保存しておしまい。
WebSocketからデータを取得する
Golangで書かれたコマンドラインツールのsakuraio-cliを使うと簡単です。 XXXX と書かれた箇所は、サービス登録時に取得したトークンを入力します。
sakuraio-cli service websocket listen --token=XXXX
接続されるとキープアライブを行っていることがペイロードからわかります。ペイロードのシリアライズ方式はJSONなので人間が読みやすくていいですね。だいたい10秒に1回ほど接続維持のため通信を行うようです。タイムスタンプはISO8601形式です。
{"type":"keepalive","datetime":"2016-12-24T09:36:34.421300505Z"}
{"type":"keepalive","datetime":"2016-12-24T09:36:44.42129101Z"}
{"type":"keepalive","datetime":"2016-12-24T09:36:54.421342341Z"}
サンプルコードを実行してペイロードを確認する
さくらインターネットさんのgithubレポジトリにあるGY-521のサンプルを実行し、6軸センサの値をsakura.io LTEモジュールへ送信します。回路図やソースコードはレポジトリのファイルを見てください。
Arduinoにプログラムをロードしてしばらく待つと、sakura.io LTEモジュールがオンラインになったことがわかります。
{
"datetime": "2016-12-24T08:30:40.217788971Z",
"module": "XXXX",
"payload": {
"is_online": true
},
"type": "connection"
}
さらに少し待つと、6軸センサが取得した値が流れてきます。チャネル定義は次のようになっています。
- Channel 0: Temperature in celsius
- Channel 1: Accelerometer X (G)
- Channel 2: Accelerometer Y
- Channel 3: Accelerometer Z
- Channel 4: Gyro X (degrees / sec)
- Channel 5: Gyro Y
- Channel 6: Gyro Z
{
"datetime": "2016-12-24T09:53:03.514430413Z",
"module": "XXXX",
"payload": {
"channels": [
{
"channel": 0,
"datetime": "2016-12-24T09:53:03.429432065Z",
"type": "f",
"value": 29.07059
},
{
"channel": 1,
"datetime": "2016-12-24T09:53:03.443432065Z",
"type": "f",
"value": 0.10620117
},
{
"channel": 2,
"datetime": "2016-12-24T09:53:03.454432065Z",
"type": "f",
"value": -0.032958984
},
{
"channel": 3,
"datetime": "2016-12-24T09:53:03.466432065Z",
"type": "f",
"value": 0.96362305
},
{
"channel": 4,
"datetime": "2016-12-24T09:53:03.480432065Z",
"type": "f",
"value": -2.908397
},
{
"channel": 5,
"datetime": "2016-12-24T09:53:03.492432065Z",
"type": "f",
"value": -0.90076333
},
{
"channel": 6,
"datetime": "2016-12-24T09:53:03.504432065Z",
"type": "f",
"value": -0.47328246
}
]
},
"type": "channels"
}
というわけでデバイスのセンサ値をサクッとWebSocketで取得することが出来ました。便利ですね。