Table of Contents
本記事のゴール
M5StackからSORACOMプラットフォームに接続し、データを送信します。送信に成功するとSORACOM Harvest Dataに以下のように送信データが表示されます。SORACOM Arcの提供しているバーチャルSIMを経由しており、物理的なSIMは使用していません。

加えて、本来SORACOM Arcを用いてSORACOMプラットフォームに接続する際、認証キーIDや認証シークレット等の接続情報を指定する必要があるのですが、お手元のスマートフォン経由で簡単に設定できるようにしています。

接続情報が変わってもプログラムを書き換える必要がありませんし、一度設定した接続情報はM5Stack内のEEPROMに書き込んでいるので、次回起動時はその設定を自動的に読み込んで接続します。毎回、認証キーIDを入力しなくて良いのでとても便利です。
前提
本記事は以下を満たしていることを前提に、手順を記載します。
- M5Stack Basicがお手元にあること
- こちらの記事 を参考にArduinoの開発環境が構築完了していること
ライブラリのインストール
今回作成したプログラムでは以下2つのライブラリを使用しています。
ciniml/WireGuard-ESP32-Arduino
VPN ClientであるWireGuardをESP32へ移植し、Arduinoライブラリ化したものです。SORACOM Arc の仕組みにも書かれている通り、SORACOM ArcはデバイスとSORACOMプラットフォームをVPN接続することで、SIMを使わずにSORACOMのサービスを利用できるようにしています。そのため、このライブラリをインストールしておきます。
tzapu/WiFiManager
スマートフォンからM5StackのWi-FiおよびVPN設定をするために利用します。古いバージョンはESP32に対応していなかったのですが、本記事執筆時点での最新版(v2.0.11-beta)はESP32に対応しているのでこれを利用します。
プログラムの書き込み
M5Stackに書き込むArduinoスケッチを以下に公開しています。こちらのリポジトリをcloneして、Arduino IDEなどを使用して main/main.ino
をコンパイル・書き込みしてください。
バーチャルSIMの登録
SORACOMコンソールにログインして、バーチャルSIMを作成します。 新しいSIM管理画面に切り替え後、「SIM 登録」をクリックします。

SIM登録のモーダルが表示されたらバーチャルSIMを登録します。Private Keyは登録直後の画面でしか表示されないので、忘れずにメモしておきましょう。


Private Key以外の情報はSIM詳細画面から確認ができます。

SIMグループの設定
先ほど登録したバーチャルSIMを任意のSIMグループに所属させ、そのSIMグループの設定で以下2点を設定します。
SORACOM Air for セルラー設定
バイナリパーサーを有効化しておきます。フォーマットはスクリーンショットと同様に設定してください。

バイナリパーサーのフォーマットについては以下ページを参照ください。
SORACOM Harvest Data 設定
SORACOM Harvest Dataを有効化して保存します。

接続
M5Stackの電源をONすると、LCDにアクセスポイント名が表示されます。

スマートフォン等を使用してこのアクセスポイントに接続すると、設定画面が自動的に立ち上がります。

バーチャルSIMのSIM詳細画面等を参考に接続情報を入力します。

入力を完了したら画面をスクロールしてSaveボタンをタップしましょう。

LCDに WireGuard started.
と表示されたら接続完了です。

SORACOM Harvest Dataを確認
SORACOMコンソールにログインし、Menu→データ収集・蓄積・可視化→SORACOM Harvest Dataの順にクリックします。リソースのプルダウンから使用しているバーチャルSIMを選択するとグラフが表示されます。

M5Stackからは5秒毎にデータを送信するようにしています。送信データはM5Stackの起動からの経過時間(今回は60秒で0秒にリセット)なので、このようなノコギリ型のグラフが表示されます。
物理的なSIMを使わずとも、SORACOMのサービスが利用できるのでIoTシステムを開発する際、気軽にSORACOMを使えるようになりましたね。
まとめ
以上のようにWireGuard-ESP32を利用して、M5StackからSORACOMプラットフォームに接続することができました。今回はSORACOM Harvest Dataのみの試行でしたが、今後SORACOM BeamやSORACOM Funnelを使ってAWSへのデータ転送ができるか確認予定です。
「SORACOMを使ってみたいけど物理的なSIMを扱うのはハードルが高いな」と思っていた人は、これを機にぜひSORACOM Arcを試してみましょう。