投稿日 2020-10-15

M5Stack用SigfoxモジュールをSORACOM Air for Sigfoxで利用する方法

Sigfoxの通信可能地域が日々広がっていると感じているソラコム “Max” 松下です。
※通信可能地域の大まかな確認は Coverage | Sigfox でご覧いただくことができます。私の家がある静岡県富士市でもつながります!

今回は先月(9/18)にスイッチサイエンスから販売が開始された「M5Stack用Sigfoxモジュール」をSORACOMで使用する方法をご紹介します。

M5Stack用Sigfoxモジュールとは?

M5Stackという液晶モニター付きプロトタイプ向けマイコンモジュールがあるのですが、名前の通り「スタック=重ねる」ことで機能拡張が可能です。M5Stack用Sigfoxモジュールは、M5Stackに重ねて取り付けることでSigfox通信が可能となるモジュールです。

M5Stack BasicにM5Stack用Sigfoxモジュールを取り付けた様子(下部の “COM.SigFox” とラベリングされている部分がモジュール)

詳細な仕様はKCCS / M5Stack COM.X Sigfoxの使い方をご覧ください。

Sigfoxについて

Sigfoxを少しだけご紹介すると、LPWA※1の一つで、日本では京セラコミュニケーションシステム(以下、KCCS)が2017年2月に商用サービスを開始しています。また、2017年10月には下り(クラウド側からデバイスに向けた通信)にも対応し、IoT向けの長距離無線通信として注目されています。

SORACOMでは、KCCSのSigfoxパートナーとして2017年5月に「SORACOM Air for Sigfox」の提供を開始しており、すでに日本瓦斯様の新型NCU※2「スペース蛍(ホタル)」へ採用いただくなど、その利用は広がり始めています。
LPWAを含めたIoT向け通信全般にご興味がある方はLPWA (LPWAN) とは?も合わせてご覧ください。

※1 Low Power Wide Area-networkの略です。LPWANとも称される省電力広域通信です。Sigfoxの他にはLoRaWANやLTEを基にしたLPWA “LTE-M” があります。
※2 Network Control Unitの略。ガスメーターの使用量データを電子的に読み取り、フォーマット変換の後に無線を使ってクラウドへ送信するIoT装置です。

M5Stack用SigfoxモジュールをSORACOM Air for Sigfoxで利用する方法

スイッチサイエンスの案内ではSigfox社提供の開発向けサービス「Sigfox Buy」を通じてSigfoxクラウドに登録することで利用する方法が案内されていますが、SORACOMでは他社で購入したSigfoxデバイスの持ち込み機能を提供しており、M5Stack用SigfoxモジュールがSORACOMでも利用が可能となっています!

ここからはその手順をご案内します。

準備

「SigfoxデバイスID」と「PAC(認証コード)」を入手する

まず、M5Stack用SigfoxモジュールをSORACOMに登録するために必要なSigfoxデバイスIDPAC(認証コード)を入手します。この情報はM5Stack用Sigfoxモジュール内部に書き込まれており、専用のスケッチ(プログラム)を起動することで確認できます。

手順自体はスイッチサイエンスのページに記載されている通りで、情報表示用のスケッチをM5Stackの開発環境が整ったパソコンからM5Stackに転送することでSigfoxデバイスIDとPACがシリアルモニターとM5StackのLCDそれぞれに表示されます。メモしておきましょう。

SigfoxデバイスIDとPACを入手したら、速やかにM5Stackの電源を切ることをお薦めします。これは先ほど紹介した情報表示用のスケッチが “00ffee” という値を10分間隔で送信するようになっていることから、意図しない通信が発生する事を防止するためです。

SORACOMに登録をする

手元にSigfoxデバイスIDとPACが揃ったら、SORACOMユーザーコンソールから登録できるようになります。

SOARCOMユーザーコンソールにログインをして左上の[Menu]から[Sigfoxデバイス管理]と進みます。

Sigfoxデバイス管理の画面から[デバイス登録]をクリックします。表示されたダイアログに「SigfoxデバイスID」と「PAC」を入力後、”プロトタイプ” にチェックを付けてから[登録]をクリックします。

登録が正常に完了すると、以下のように “準備完了” 状態のSigfoxデバイスが追加されます。これでM5Stack用SigfoxモジュールをSORACOM上で利用する準備が整いました。
ステータスに表示されている準備完了とはSigfox通信が可能になった状態を表しています。一度でもSigfox通信が始まると使用中に切り替わります。

SigfoxデバイスIDやPACが合ってるはずなのに登録に失敗する場合は、以下をご確認ください。
他のSigfoxプラットフォームに登録済みの場合は、SORACOMへ登録いただくことができません。まず他のSigfoxプラットフォーム上で解約手続きを行っていただいた後に、SORACOMへご登録ください。
PACはSigfoxプラットフォームへの登録の都度更新され、一度利用したPACは再びご利用頂くことは出来ません。新たなPACは解約時のSigfoxプラットフォームで解約の際に入手できます。SORACOMへの登録の際には、その新たなPACを指定して登録ください。
また、SigfoxデバイスIDとPACは英数文字で構成されているので、オーとゼロといった似たような文字にご注意ください。
それでも登録に失敗する場合はサポートへの問い合わせ方法は?をご覧いただきながらお問い合わせください。

Sigfox通信をSORACOM Harvest Dataで確認してみる

登録したら動いている様子を確認したくなるものです。今回はM5Stackのボタンに応じてデータが送信されるスケッチを作成しました。

M5Stackのボタンの情報をSORACOM Harvest Dataに蓄積して確認する様子

データの可視化には一般的にはクラウドサービスの準備をすることになりますが、SORACOMのIoTのデータ収集・蓄積サービス「SORACOM Harvest」をご利用いただければSORACOM内でデータの確認ができるため、クラウドサービスの準備前のデータ確認に便利です。
その後でじっくりとクラウドサービスの準備や設定をしていただき、データ転送サービス「SORACOM Beam」やクラウドアダプタサービス「SORACOM Funnel」を利用して、クラウドでデータ活用していくことが可能です。

SORACOM Harvest Dataの設定

SORACOM Harvestには、IoTデータを蓄積するのに向いているSORACOM Harvest Dataと、いわゆるファイルの保存・配布に向いているSORACOM Harvest Filesの2種類があります。
今回はIoTデータに該当するので、SORACOM Harvest Dataを有効化して、M5Stackからのデータを確認してみます。

“グループ”の作成と設定

グループとは、SORACOM Harvest Dataをはじめとして、SORACOMサービスのほとんどがグループという単位に対して設定を行い、そしてSIMやSigfoxデバイスをグループに所属させることで、その中のSIMやSigfoxデバイスでSORACOMサービスが利用できる、間接的な仕組みをとっています。IoTを本格的に活用する場合、多くのSIMやSigfoxデバイスを扱うことになります。グループ化されていた方が、設定変更などの管理効率が良くなる効果があります。

それでは、まずグループの作成から行います。
SORACOMユーザーコンソールの左上の[Menu]から[Sigfoxデバイス管理]と進みます。

次の画面では[グループを作成する]をクリックし、表示されたダイアログで “グループ名” を入力します。今回は Sigfoxデータ確認 という名称にしました。後で見返したときにわかりやすい名前が良いでしょう。
名前を入力したら[グループ作成]をクリックします。

続いての画面でSORACOM Harvest Dataの設定を行います。
SORACOM Harvest Data設定の中にあるスイッチをクリックしてONにします。その後[保存]をクリックし、次に表示されるダイアログでも[OK]をクリックします。

以上でグループの作成から設定まで完了です。

グループへの所属

最後に、Sigfoxデバイスを先ほど作成したグループへ所属させます。こうすることで、SigfoxデバイスからSORACOM Harvest Dataが利用可能となります。

SORACOMユーザーコンソールの左上の[Menu]から[Sigfoxデバイス管理]と進みます。

Sigfoxデバイス管理の一覧から、M5Stack用Sigfoxモジュールとして登録したSigfoxデバイスにチェックを付けた後、[操作]をクリックしてから[所属グループ変更]をクリックします。

グループ変更で新しい所属グループをクリックするとグループ一覧が表示されます。その中から先ほど作成したグループを選択した後、[グループ変更]をクリックします。

対象のSigfoxデバイスの「グループ」に、先ほど設定したグループ名が表示されていれば成功です。

以上でM5StackからのデータをSORACOM Harvest Dataに蓄積する準備は完了です。

M5Stackにスケッチを書き込む

Sigfox通信でボタンクリックの情報を送信するスケッチは以下の通りです。

#include <M5Stack.h>
#define TEXT_SIZE 2

#define CONSOLE Serial

/* for Sigfox module */
#define RX 16
#define TX 17
#define BAUDRATE 9600

#define UART_DEVICE Serial2

String sigfox_send(const char* upstream_payload) {
  char command[64];
  sprintf(command, "AT$SF=%s\r\n", upstream_payload);
  UART_DEVICE.write(command);
  while(!UART_DEVICE.available());
  String response = UART_DEVICE.readStringUntil('\n');
  return response;
}

void setup() {
  CONSOLE.begin(115200);
  M5.begin();
  M5.Power.begin();
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextSize(TEXT_SIZE);
  CONSOLE.println("Welcome to Sigfox module test sketch.");
  CONSOLE.println("Data will be sent when press the buttons.");
  M5.Lcd.println("Welcome to Sigfox module test sketch.");
  M5.Lcd.println("Data will be sent when press the buttons.");
  UART_DEVICE.begin(BAUDRATE, SERIAL_8N1, RX, TX);
}

void loop() {
  M5.update();
  int pressed_value = 0;
  if (M5.BtnA.wasReleased()) {
    pressed_value = 1;
  } else if (M5.BtnB.wasReleased()) {
    pressed_value = 2;
  } else if (M5.BtnC.wasReleased()) {
    pressed_value = 3;
  }
  if (pressed_value > 0) {
    char buf[64];
    sprintf(buf, "%02d", pressed_value);
    char str1[64];
    sprintf(str1, "sending(data=%s)...", buf);
    CONSOLE.print(str1);
    M5.Lcd.fillScreen(TFT_BLACK);
    M5.Lcd.setCursor(0, 4, TEXT_SIZE);
    M5.Lcd.println(str1);
    String response = sigfox_send(buf);
    char str2[64];
    sprintf(str2, "done.(res=%s)", response);
    CONSOLE.println(str2);
    M5.Lcd.println(str2);
  }
}

SORACOM Harvest Dataでのデータ確認

SORACOMユーザーコンソールの左上の[Menu]から[Sigfoxデバイス管理]と進みます。

Sigfoxデバイス管理の一覧から、データに確認をしたいSigfoxデバイスにチェックを付けた後、[操作]をクリックしてから[データを確認]をクリックします。

この画面がデータを確認できる画面となります。
新しいデータが蓄積されたら自動的にデータが表示されるように[自動更新]をONにしておきます。

この状態でM5Stackのボタンを押すと、冒頭の動画のように動作します。ButtonのA/B/Cはそれぞれデータの1/2/3として送信されます。

SORACOM Harvest Dataは標準で折れ線グラフになっています。また様々な情報が表示されるようになっているため、棒グラフに切り替えたり、不要なデータを表示しないようにもできます。

いろいろとお試しください!

SORACOM Harvest Dataは、有効にしたグループに所属する1デバイスあたり1日5円(税別)の従量課金サービスです。この課金を止める方法が「グループの削除」となります。継続的にご利用されない場合は、以下の手順でSigfoxグループの削除を実施してください。
【SORACOM ハンズオン】グループからの解除(資料はSIMが対象となっていますが、Sigfoxも同様の手順で解除・削除いただけます)

料金と解約/再登録

他社でご購入いただいたSigfoxデバイスをSORACOMに持ち込む場合の料金や、SORACOMサービスの料金適用についてはSigfox デバイスを購入、もしくは持ち込む場合に月々の支払いは発生しますか?をご覧ください。
Sigfox BuyにSigfox Devkitとして登録した場合の1年間無償回線は適用されませんのでご注意ください。

SORACOMからの解約や再登録もオンラインで行うことができます。具体的な手順については[Sigfoxデバイス] お客様自身でご用意したデバイスを登録することができるようになりました!をご覧ください。

SigfoxをSORACOMで使う利点

SORACOMにSigfoxデバイスを持ち込むことで、SORACOMプラットフォームが提供している様々なサービスが利用可能となります。

クラウド連携サービスの充実

Sigfoxからのデータは今回使用したSORACOM Harvest Dataだけではなく、データ転送サービス「SORACOM Beam」やクラウドアダプタサービス「SORACOM Funnel」、そしてクラウドファンクションサービス「SORACOM Funk」を通して、クラウドサービスに連携が可能です。
例えばデータを処理するためにAWS Lambdaというクラウドサービスを利用する場合、SORACOM Funkを経由すると[M5Stack用Sigfoxモジュール] > [SORACOM Funk] > [AWS Lambda] といった構成になり、一般的に必要とされるAmazon API Gatewayの準備をせずとも実現が可能となります。
すなわち、つなげる部分の開発が不要となり、堅牢かつ迅速にシステム構築ができるわけです。

Sigfox以外の通信と合わせて利用できる

IoTにとって通信は欠かせないものですが、気になるのが「通信可能なエリア」です。多くの方に使ってもらうために範囲が広い通信を選ぶのも一つの手ですが、複数の通信技術を補完的に使うことができれば、より大きな通信可能なエリアが手に入ります
SORACOMはSigfox以外にも3G/LTEといったセルラー通信(モバイル通信)を扱っており、まさに「複数の通信技術を相互補完的に利用できる」IoTプラットフォームです。例えば日本瓦斯(ニチガス)様は、ガスメーターの検針にSigfoxとLTE-Mを併用することで、通信エリアのカバーを広く確保し多くのガスメーターの情報を得ています。

ニチガスのガスメーターをオンライン化するIoTデバイス「スペース蛍」。Sigfoxを利用し、LTE-M版も視野に。

それ以外にもクラウド開発の工程削減を実現していますが、その様子はSORACOM 導入事例:日本瓦斯株式会社をご覧ください!

技術的につながるだけでなく、その先の活用までもサポートするのがSigfoxでSORACOMを使う利点となります。

ちなみに その1:M5Stack向けの3G拡張ボード

今回はスイッチサイエンスから販売が開始されたSigfoxモジュールを紹介しましたが、M5Stackではスマートフォンの通信である3Gが利用可能なモジュールがあり、こちらもスイッチサイエンスでお取り扱いいただいている他、SORACOMでも販売しています。

また、SORACOMオリジナルのモデルとして、上記のボードとM5Stack BasicがセットになったM5Stack Basic 3G 拡張ボード セットも販売中です。
ニチガス様の例のように、M5StackでSigfoxと3Gのハイブリッドな仕組みを自分の手で作ることも可能です。

ちなみに その2:Arduino用Sigfoxシールド(Sigfox Shield for Arduino (UnaShield V2S)

ソラコムではIoTで良く利用されるマイコンボードArduino向けのSigfoxシールド(拡張ボード)もご用意しております。M5Stackと共にご利用を検討してみてはいかがでしょうか。
※Arduino UNO本体は別途お求めいただくことになります。

Appendix: 技術情報

ここでは検証に利用した技術的な情報を掲載しておきます。

シリアルコンソールからATコマンドを直接入力するスケッチ

#define CONSOLE Serial

/* for Sigfox module */
#define RX 16
#define TX 17
#define BAUDRATE 9600

#define UART_DEVICE Serial2

void setup() {
  CONSOLE.begin(115200);
  CONSOLE.println("Welcome to Serial bridge");
  UART_DEVICE.begin(BAUDRATE, SERIAL_8N1, RX, TX);
}
void loop() {
  while (UART_DEVICE.available()) CONSOLE.write(UART_DEVICE.read());
  while (CONSOLE.available()) UART_DEVICE.write(CONSOLE.read());
}

ATコマンドのリファレンスはSEONG JI(旧Wisol)のSFM11R3の仕様書をご覧ください。

M5Stack用スケッチの解説

String sigfox_send(const char* upstream_payload)がデータ送信部分です。引き渡されたcharを AT$SF=に引き渡し、その実行結果をStringで返却します。
※アップストリーム(上り通信)のみの対応です。
※ATコマンドをラップするライブラリやATコマンドparserが見つけられなかったため、sprintfで構築してSerial2に直接writeする実装となっています。良いライブラリをご存知な方は是非ご連絡を。

あとがき

いろんな場所、いろんな方法でIoT通信できる、そんな時代が来たなと感じています。みなさんも是非お試しください!

ソラコム “Max” 松下