4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5Stack COM.X Sigfoxの使い方

Last updated at Posted at 2020-12-11

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

#COM.X Sigfoxの仕様
COM.X Sigfoxは、SEONG JI(旧Wisol)SFM11R3を搭載した拡張ボードで、Sigfox ATコマンド(シリアル通信)でSigfox通信を制御することができます。
主な仕様は下記の通りです。

項目 仕様
サイズ 54.2 x 54.2 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.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年間の無料回線が付いています。こちら: Sigfox Devkit(開発キット)を1年間の無償回線で利用するを参考にSigfoxクラウドへデバイス登録してください。2年目以降は、同サイト(Sigfox Buy)から回線購入して、継続利用することも可能です。

#COM.X Sigfoxモジュールの拡張
M5Stack、M5Core2ともに、拡張モジュールに対応していますが、M5Core2では、拡張モジュールを取り付けるため、2mm径の六角レンチが必要となります。
それぞれを取り付けたイメージは下のようになります。

M5Stack + COM.X Sigfox M5Core2 + COM.X Sigfox
IMG_5261.jpg IMG_5257.jpg

COM.X Sigfoxを拡張した場合、M5Stackは付属のバッテリーモジュールを、そのまま取り付けられますが、M5Core2の場合は、本体にバッテリーが付いているため、バッテリーモジュールを追加する必要がありません。ただ、下の写真のように、背面がむき出しになるので、何らかのベースユニットを用意した方が見た目は綺麗ですね。
IMG_5136 (1).jpg

#M5Stackの開発準備
ここでは、M5Stack及びM5SCore2を使ったCOM.X Sigfoxの使用方法について説明します。

  1. Arduino IDEのインストール (M5Stack/M5Core2共通)
  2. USBシリアルドライバーのインストール (M5Stack/M5Core2共通)
  3. ボード定義のインストール(M5Stack/M5Core2)
  4. ライブラリのインストール(M5Stack/M5Core2)

##USBシリアルドライバーのインストール (共通)
M5StackをPCと接続するため、USBシリアルドライバーをインストールします。

###Windows の場合

  1. M5Stack の Web サイトからWindows用の CP210X Driverをダウンロードします。
  2. ダウンロードした CP210x_VCP_Windows.zipを展開します。
  3. CP210xVCPInstaller_x64_v6.7.0.0 をダブルクリックしてインストールします。
  4. 付属のUSB Type-Cケーブル(Core2には付属されていません)を使用して PC と接続します。[デバイスマネージャ] を開き [ポート (COM と LPT)] で Silicon LabsCP210x USB to UART Bridge (COMxx)が表示されることを確認してください。

###macOS の場合

  1. M5Stack の Web サイトからmacOS用の CP210X Driverをダウンロードします。
  2. ダウンロードしたCP210x_VCP_MacOS.zipを展開します。
  3. SiLabsUSBDriverDisk.dmgをダブルクリックしてマウントします。
  4. FinderでマウントされたSilicon Labs VCP Driver Install Diskが開かれますので Silicon Labs VCP Driver.pkgをダブルクリックしてインストールします。
  5. 付属のUSB Type-Cケーブル(Core2には付属されていません)を使用して PC と接続します。
  6. [システム環境設定] > [セキュリティとプライバシー] でドライバーのロードを承認します。

##ボード定義のインストール(M5Stack/M5Core2)
M5Stack、M5Core2をArduino IDEで扱うためボード定義をインストールします。

  1. Arduino IDEを起動します。
  2. メニューから [ファイル] > [環境設定] を選択します。
  3. [設定タブ] の [追加のボードマネージャの URL:] へ以下の URL を入力して [保存] をクリックします。 https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
  4. Arduino IDEの [ツール] > [ボード] > [ボードマネージャ] を選択します。
  5. 一覧の中からM5Stack by M5Stack officialを選択 (M5Stackで検索すると見つけやすいです)しインストールをクリックします。
  6. Arduino IDEの [ツール] > [ボード] メニューから、接続するM5に合わせて、ボードを選択します。
  • 【M5Stackの場合】Arduino IDEの [ツール] > [ボード] > [M5Stack Arduino] > [M5Stack-Core-ESP32] を選択します。
  • image.png
  • 【M5Core2の場合】Arduino IDEの [ツール] > [ボード] > [M5Stack Arduino] > [M5Stack-Core2] を選択します。
  • image.png

##ライブラリのインストール(M5Stack/M5Core2)
開発において、M5ライブラリを使用できるようにライブラリをインストールします。

  1. Arduino IDEを起動します。
  2. Arduino IDEの [スケッチ] > [ライブラリをインクルード] > [ライブラリを管理…] を選択します。
  3. 使用するM5に合わせ、一覧の中からライブラリをインストールします。
  • 【M5Stackの場合】M5Stack by M5Stackを選択。
  • 【M5Core2の場合】M5Core2 by M5Stackを選択。

#M5Stackで開発をする
M5Stack、M5Core2で開発する場合、各ライブラリをインクルードします。

  • M5Stack用ライブラリをインストールした場合、#include <M5Stack.h>がインクルードされます。
  • M5Core2用ライブラリをインストールした場合、#include <M5Core2.h>がインクルードされます。

#サンプルスケッチ
ボタンクリックに応じ、①UPLINK(上り)メッセージのSigfox送信、②DOWNLINK(下り)要求付メッセージのSigfox送信、③ID/PAC情報の取得を行うサンプルスケッチをM5Stack、M5Core2用に用意しました。
##M5Stack用サンプルスケッチ

m5stask-sigfox.c
#include <M5Stack.h>
 
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 <M5Core2.h>

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 <= 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]ボタンクリックとなります。
image.png

#番外編(アンテナを変えてみる)
COM.SigfoxのPCBには、u.FL (IPEX)コネクタがあり、通常は、そこから外部のSMAコネクタにケーブルアウトされています。
ですので、下の写真のようにu.FL (IPEX)タイプのアンテナも利用可能です。
IMG_5276.jpg
SFM11R3の技適取得済みアンテナリストは、Seongji(Wisol)社のサポートサイトでダウンロード可能です。

image.png

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?