M5stackを利用してさくらのモノプラットフォームとhacobuneを使ってみました

さくらの[モノプラットフォーム](https://manual.sakura.ad.jp/cloud/iotpf-beta/about.html)という新しいサービスを試してみました。
現在βテストの段階ですが、申し込むと使用することができます。
（申し込むにあたって多少の条件はあります）

モノプラットフォームは、さくらインターネットが用意してたIoT向けのプラットファームサービスになります。
自分の場合はM5stackでLTE通信を使用することができたら便利だろうと考え、試してみることにしました。

####今回試してみたこと
センシングしたデータをLTEを利用して送信して可視化するところまで

#####通信の確認
M5stackにそのままスタックできる基板とサンプルコマンドも用意されていますので、非常に簡単に使用することができます。
![LTEモジュール.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/9abab036-9aca-a40b-4249-a955443e2b0e.jpeg)

このようにM5stackにスタックするだけで準備ができます。
サンプルスケッチも用意されていますので、基本的には書き込むだけで使用できるようになります。
サンプルスケッチは[ここ](https://github.com/sakura-internet/sipf-std-client_sample_m5stack)に用意されています。

さくらのクラウドのアカウントも必要になるのですが、
モノプラットフォームのβテストを行うためのテストアカウントを用意してもらえて、通信料も含めて無料でテストすることができます。（凄くありがたい）

通信についてなのですが、上り、下り、双方向の通信ができるようになっています。
上りに関してはM5stackから送信したいデータをLTEでモノプラットフォームに送信します。
モノプラットフォームにあるデータを自分のサーバーでwebsocktを利用して受信するというイメージです。
下りに関しては、自分のサーバーからwebsocktでモノプラットフォームに送信します。
モノプラットフォームにスタックされているデータをM5stackから見に行くというイメージになります。
~~下りの通信に関してはpush通知ではないので、M5stackから受信コマンドを送信するということが必要になります。~~
（webhookが新しく実装されましたが、まだ試せていないので詳しいことはわかりません）

まずはサンプルスケッチから試していきます。
サンプルスケッチを書き込むとこのような感じになります。
![通信確認.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/1e5a01d8-340a-beae-37d2-ec9d829f9f30.jpeg)
通信の確認も含めてファームウェアの書き換え行いました。
公式の資料を見てもらえるとわかるので、詳しい説明は省きますがシリアルコンソールからコマンドをたたくだけで行えるようになっています。
基本的にはこの2つのコマンドをたたくだけです。

```
$$UNLOCK UNLOCK
$$UPDATE UPDATE
```
ファームウェアのダウンロードが始まります。
![ファームウェアアップデート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/c87d3900-1453-a5c0-a52c-0b4f6c12140f.png)

インストールが終わったら自動でリブートされます。

#####実際にやってみたこと（本題）
ファームウェアのアップデートが終わったらセンサーを接続します。
![センサー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/2ebe7041-6d48-8302-950e-a300df2e9fef.jpeg)
今回はI2CのCO2センサーを接続しています。
今回はSCD30センサーを利用して、CO2、温度、湿度を測定して、さくらのモノのプラットフォームに送信することにしました。

データのフォーマットについては考慮する必要がありますが、今回は測定した値を16進数に変換して文字列として送信することにしました。こうすることによって、複数のデータを同時に送信することができます。
（現在は複数オブジェクトを同時に送信することができるようですので、このような工夫は不要かもしれません）

送信ができているかどうかを確認するために、モノプラットフォームのコントロールパネルで見てみます。
このようにデータが上がってきているのが見えるので、通信していることは一目瞭然です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/7e184b68-4c00-50e7-a4cb-6afaac3eac24.png)
上がってきたデータを自分のサーバーに取り込む必要があります。
サーバーとして、さくらのhacobuneを用意しました。この中でnode-redを使用して受信します。
hacobuneでnode-redを使用する方法については[こちら](https://qiita.com/YuukiNishida/items/38f8cc2cf9076da05d5c)を見てください。
手前味噌ですが[こちら](https://qiita.com/shinfrom/items/6680983daa09885867d6)も参考にしてみてください。

実際に作成したフローです
![モノプラnodered.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/3b22d149-4170-dca0-22ab-ba369030ee6c.png)

node-redではwebsocketノードが用意されていますので、利用します。
websocketノードからはkeepaliveも入ってきて面倒ですので、スイッチノードを利用してはじきます。

LTEの受信データはJSONで入ってきますので、必要な部分（データ部）を取り出します。
16進数にエンコードしたデータをでコードします。
取り出したデータは、ambientなどに送信して可視化することができます。
node-redのdashboard機能を利用しての可視化も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244155/80f2354c-99db-8cd9-29a6-32fe012b1018.png)


#####考察と感想
さくらのモノプラットフォームを利用することにより、LTEの通信を比較的手間をかけずに試すことができました。
これは、IoTのラストワンマイルの問題への取っ掛かりになりそうな気がします。
通信プロトコルとしてHTTPSが採用されているとのことで、通信には若干時間がかかっているように感じます。
MQTTのように気軽に双方向通信が行えるわけではないので、状況に応じて使い分ける必要がありそうです。
次のアップデートも予定されているようですので、アップデートとサービス開始が楽しみです。

#####※12月のアップデート分についてはまだ試せていませんので少し情報が古くなっている可能性があります。

#####参考情報
[モノプラットフォーム公式ドキュメント](https://manual.sakura.ad.jp/cloud/manual-iotpf-beta.html)
[さくらインターネットのHacobuneでNode-REDの公式イメージを動かしてみる。](https://qiita.com/YuukiNishida/items/38f8cc2cf9076da05d5c)
[さくらのHacobuneとnode-redを利用してIoT用のwebUIのプロトタイプ](https://qiita.com/shinfrom/items/6680983daa09885867d6)
[さくらのIoTブログ](https://iot.sakura.ad.jp/blog/category/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%A2%E3%83%8E%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0/)