技術情報
M5Stack COM.X Sigfoxの使い方
2020.09.18
お待たせしました。遂にM5Stack公式から、Sigfox通信用拡張モジュールCOM.X Sigfoxがリリースされました。M5StackにセルラーやLoRa通信等機能を追加するCOM.Xファミリーとしての製品です。スイッチサイエンスから販売されていますので、こちらからご購入下さい。

COM.X Sigfoxの仕様
COM.X Sigfoxは、SEONG JI(旧Wisol)SFM11R3を搭載した拡張ボードで、Sigfox ATコマンド(シリアル通信)でSigfox通信を制御することができます。
主な仕様は下記の通りです。
項目 | 仕様 |
---|---|
サイズ | 54.2 x 54.2 x 13.2 mm |
質量 | 27g |
付属アンテナ | ANT-916-CW-HWR-SMA |
対応RC | RC3(日本:ARIB T-108準拠) |
COM.X Sigfoxの公式ドキュメントには、RC5も記載されていますが、韓国向けのRadio Configurationですので、日本国内ではRC5を使わないようにしてください。
M5Stack COM.X Sigfoxユースケース
M5StackはArduino IDEやUIFlow、MicroPythonで開発可能であり、COM.X Sigfoxの位置づけは、Arduino UNO向けのSigfox Shield for Arduino(UnaShield)やArduino ZERO向けのUnaMKRのM5Stack版となります。
加え、M5Stackは、320 x 240のカラーLCDや3つのボタン、バッテリーベースが付いていますので、センシング情報をディスプレイに表示しながら、定期的ないし異常発生時に、そのデータをSigfoxで送信するというユースケースを簡単に構築することができます。
COM.X SigfoxはDevkit扱い
COM.X SigfoxはDevkit扱いとなっていますので、1年間の無償回線※1が付いています。こちら:Sigfox Devkit(開発キット)を1年間の無償回線で利用するを参考にSigfoxクラウドへデバイス登録してください。2年目以降は、同サイト(Sigfox Buy)から回線購入して、継続利用することも可能です。
※1 2022年7月1日をもって、Devkit対応デバイスのDevkit登録(無償回線利用)が終了いたしました。
Sigfox回線をご利用の際には、Sigfox Buyにて有償回線をご購入ください。
Sigfox Buy お申込みからご利用開始までの流れはこちら
COM.X Sigfoxモジュールの拡張
M5Stack、M5Core2ともに、拡張モジュールに対応していますが、M5Core2では、拡張モジュールを取り付けるため、2mm径の六角レンチが必要となります。
それぞれを取り付けたイメージは下のようになります。
M5Stack + COM.X Sigfox | M5Core2 + COM.X Sigfox |
---|---|
![]() |
![]() |
COM.X Sigfoxを拡張した場合、M5Stackは付属のバッテリーモジュールをそのまま取り付けられますが、M5Core2の場合は、本体にバッテリーが付いているため、バッテリーモジュールを追加する必要がありません。ただ、下の写真のように、背面がむき出しになるので、何らかのベースユニットを用意した方が見た目は綺麗ですね。

M5Stackの開発準備
ここでは、M5Stack及びM5Core2を使ったCOM.X Sigfoxの使用方法について説明します。
- Arduino IDEのインストール(M5Stack / M5Core2共通)
- USBシリアルドライバーのインストール(M5Stack / M5Core2共通)
- ボード定義のインストール(M5Stack / M5Core2)
- ライブラリのインストール(M5Stack / M5Core2)
USBシリアルドライバーのインストール(共通)
M5StackをPCと接続するため、USBシリアルドライバーをインストールします。
Windows の場合
- M5Stack の Web サイトからWindows用の CP210X Driverをダウンロードします。
- ダウンロードした CP210x_VCP_Windows.zipを展開します。
- CP210xVCPInstaller_x64_v6.7.0.0 をダブルクリックしてインストールします。
- 付属のUSB Type-Cケーブル(Core2には付属されていません)を使用して PC と接続します。[デバイスマネージャ] を開き [ポート(COM と LPT)] で Silicon LabsCP210x USB to UART Bridge (COMxx)が表示されることを確認してください。
macOS の場合
- M5Stack の Web サイトからmacOS用の CP210X Driverをダウンロードします。
- ダウンロードしたCP210x_VCP_MacOS.zipを展開します。
- SiLabsUSBDriverDisk.dmgをダブルクリックしてマウントします。
- FinderでマウントされたSilicon Labs VCP Driver Install Diskが開かれますので Silicon Labs VCP Driver.pkgをダブルクリックしてインストールします。
- 付属のUSB Type-Cケーブル(Core2には付属されていません)を使用して PC と接続します。
- [システム環境設定] > [セキュリティとプライバシー] でドライバーのロードを承認します。
ボード定義のインストール(M5Stack / M5Core2)
M5Stack、M5Core2をArduino IDEで扱うためボード定義をインストールします。
- Arduino IDEを起動します。
- メニューから [ファイル] > [環境設定] を選択します。
- [設定タブ] の [追加のボードマネージャの URL:] へ以下の URL を入力して [保存] をクリックします。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json - Arduino IDEの [ツール] > [ボード] > [ボードマネージャ] を選択します。
- 一覧の中からM5Stack by M5Stack officialを選択 (M5Stackで検索すると見つけやすいです)しインストールをクリックします。
- Arduino IDEの [ツール] > [ボード] メニューから、接続するM5に合わせて、ボードを選択します。
- M5Stackの場合Arduino IDEの [ツール] > [ボード] > [M5Stack Arduino] > [M5Stack-Core-ESP32] を選択します。
-
- M5Core2の場合Arduino IDEの [ツール] > [ボード] > [M5Stack Arduino] > [M5Stack-Core2] を選択します。
-
ライブラリのインストール(M5Stack / M5Core2)
開発において、M5ライブラリを使用できるようにライブラリをインストールします。
- Arduino IDEを起動します。
- Arduino IDEの [スケッチ] > [ライブラリをインクルード] > [ライブラリを管理…] を選択します。
- 使用するM5に合わせ、一覧の中からライブラリをインストールします。
- M5Stackの場合M5Stack by M5Stackを選択。
- M5Core2の場合M5Core2 by M5Stackを選択。
M5Stackで開発をする
M5Stack、M5Core2で開発する場合、各ライブラリをインクルードします。
- M5Stack用ライブラリをインストールした場合、#includeがインクルードされます。
- M5Core2用ライブラリをインストールした場合、#includeがインクルードされます。
サンプルスケッチ
ボタンクリックに応じ、①UPLINK(上り)メッセージのSigfox送信、②DOWNLINK(下り)要求付メッセージのSigfox送信、③ID / PAC情報の取得を行うサンプルスケッチをM5Stack、M5Core2用に用意しました。
M5Stack用サンプルスケッチ
#include void setup() { M5.begin(true, false, true); Serial2.begin(9600, SERIAL_8N1, 16, 17); showTempl(); } void loop() { if (Serial2.available()) { displayResults(Serial2.readString()); } M5.update(); if (M5.BtnA.wasReleased()) { showTempl(); M5.Lcd.println("Send Message."); Serial2.println("AT$SF=CAFE"); } else if (M5.BtnB.wasReleased()) { showTempl(); M5.Lcd.println("Send Message with Ack."); Serial2.println("AT$SF=C0FFEE,1"); } else if (M5.BtnC.wasReleased()) { showTempl(); M5.Lcd.println("Device ID&PAC: "); Serial2.println("AT$I=10"); Serial2.println("AT$I=11"); } } void showTempl() { M5.Lcd.clear(BLACK); M5.Lcd.setTextColor(WHITE); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(10, 10); M5.Lcd.println("M5Stack COM.Sigfox"); M5.Lcd.setCursor(30, 220); M5.Lcd.print("UP"); M5.Lcd.setCursor(129, 220); M5.Lcd.print("DOWN"); M5.Lcd.setCursor(238, 220); M5.Lcd.print("ID/PAC"); M5.Lcd.setTextColor(BLUE); M5.Lcd.setCursor(0, 35); } void displayResults(String ack) { M5.Lcd.println(ack); int i = ack.indexOf("RX="); if (i >= 0) { ack.replace(" ", ""); String bs = ack.substring(i + 6, i + 11); String rs = ack.substring(i + 15); signed int rssi = (int16_t)(strtol(rs.c_str(), NULL, 16)); M5.Lcd.print("BSID: "); M5.Lcd.println(bs); M5.Lcd.print("RSSI: "); M5.Lcd.println(rssi); } }
M5Core2サンプルスケッチ
M5Core2では、①物理ボタンの廃止、②シリアルポートの違いがあり、M5Stack用のスケッチそのままでは動きません。物理ボタンの代わりにタッチポイントによる動作、シリアルポート番号の変更を行っています。
m5core2-sigfox.c
#include
void setup() {
M5.begin(true, false, true);
Serial2.begin(9600, SERIAL_8N1, 13, 14);
showTempl();
}
void loop() {
if (Serial2.available()) {
displayResults(Serial2.readString());
}
TouchPoint_t pos = M5.Touch.getPressPoint();
char btn = btnPressed(pos);
if (btn != 0) {
showTempl();
if (btn == 'A') {
M5.Lcd.println("Send Message.");
Serial2.println("AT$SF=CAFE");
} else if (btn == 'B') {
M5.Lcd.println("Send Message with Ack.");
Serial2.println("AT$SF=C0FFEE,1");
} else if (btn == 'C') {
M5.Lcd.println("Device ID&PAC: ");
Serial2.println("AT$I=10");
Serial2.println("AT$I=11");
}
delay(1000);
}
}
char btnPressed(TouchPoint_t pos)
{
char btn = 0;
if (pos.y > 240) {
if (pos.x < 109) btn = 'A';
else if(pos.x >= 109 && pos.x <= span=""> 218) btn = 'B';
else if(pos.x > 218) btn = 'C';
}
return btn;
}
void showTempl()
{
M5.Lcd.clear(BLACK);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 10);
M5.Lcd.println("M5Stack Core2 COM.Sigfox");
M5.Lcd.setCursor(30, 220);
M5.Lcd.print("UP");
M5.Lcd.setCursor(129, 220);
M5.Lcd.print("DOWN");
M5.Lcd.setCursor(238, 220);
M5.Lcd.print("ID/PAC");
M5.Lcd.setTextColor(BLUE);
M5.Lcd.setCursor(0, 35);
}
void displayResults(String ack)
{
M5.Lcd.println(ack);
int i = ack.indexOf("RX=");
if (i >= 0)
{
ack.replace(" ", "");
String bs = ack.substring(i + 6, i + 11);
String rs = ack.substring(i + 15);
signed int rssi = (int16_t)(strtol(rs.c_str(), NULL, 16));
M5.Lcd.print("BSID: ");
M5.Lcd.println(bs);
M5.Lcd.print("RSSI: ");
M5.Lcd.println(rssi);
}
}
補足:DOWNLINK設定
上記サンプルスケッチで、DOWNLINK(下り要求メッセージ)に対応するためには、SigfoxクラウドのDeviceType設定で、Downlink dataの設定を行う必要があります。
上記サンプルは、Downlink modeをDIRECT、つまり、Sigfoxクラウドから直接下りメッセージ応答を返すようにしています。その際には、下りメッセージをDownlink data in hex項目で設定する必要があり、数の通り、{tapId}0000{rssi}とし、受信基地局IDとRSSIをダウンリンクで返す設定としています。
この設定画面へは、Sigfoxクラウドログイン後、上部の[DEVICE TYPE]タブを選択 > 該当のDevice Type Nameを選択 > 右上の[Edit]ボタンクリックとなります。

番外編(アンテナを変えてみる)
COM.X SigfoxのPCBには、u.FL(IPEX)コネクタがあり、通常は、そこから外部のSMAコネクタにケーブルアウトされています。
ですので、下の写真のようにu.FL(IPEX)タイプのアンテナも利用可能です。

SFM11R3の技適取得済みアンテナリストは、Seongji(Wisol)社のサポートサイトでダウンロード可能です。
本記事で利用するDevkitはこちら