Arduino M0ベースのSigfoxモジュールを触ってみた

技術情報

RC3(日本)対応のArduino + Sigfoxボードとして台湾のMight Electric社がリリースしたMTDuinoを触ってみました。

MTDuino-SFM2CWW001

MTDuinoは、Atmel SAMD21 32-bit Cortex-M0コアとSigfoxモジュールを搭載したArduinoボードで、大きさは、67mm x 25mmとなっています。カタログはこちら(GitHub)からダウンロードしてください。対応周波数に920MHz帯は書かれていませんが、あります。(RC3を指定してもらうと良いかと)

tech-181023-1.jpg

microUSB端子が付いていますので、こちらからPCと接続して開発という感じになります。

Arduino IDEの設定

Arduino IDEのボードマネージャでArduino SAMD Boards(32-bits ARM Cortex-M0+)をインストールしてください。

tech-181023-2.png

MTDuinoとPCを接続、Arduino IDEで
- ボード:Arduino M0 Pro (Native USB Port)
- シリアルポート: COMx (Arduino M0 Pro (Native USB Port))
- 書込装置: Atmel-ICE
と設定します。

tech-181023-3.png

Arduinoプログラミング

ユーザーマニュアル及びサンプルコードはMight社がGitHubにアップしていますので、こちら(https://github.com/Mighty-Net/MTDuino)からダウンロードして使ってもらえばよいですが、そのままではSigfoxメッセージ送信コマンドでエラーになってしまう可能性があるので、その場合は下記コードをお試しください。

SIGFOX_Send_initial_RF.ino
#include  // required before wiring_private.h #include "wiring_private.h" // pinPeripheral() function int LED_POW=3; // sigfox status LED pin D3 int RF_PWEN=5; // sigfox power control pin D5 unsigned long previousMillis = 0; // Time Counter const long interval = 2000; // Unit: ms. void setup() { SerialUSB.begin(9600); // Set Terminal Baudrate: 9600bps Serial1.begin(9600); // Set sigfox Baudrate:9600bps pinMode(LED_POW,OUTPUT); // Set LED_POW pin as output pinMode(RF_PWEN,OUTPUT); // Set RF_PWEN pin as output digitalWrite(LED_POW,HIGH); // Set LED_POW to High digitalWrite(RF_PWEN,HIGH); // Set RF_PWEN to High, and Sigfox module power ON delay(3000); sigfox_atcommand_tx("AT$O=1,3\r"); delay(100); } void loop() { unsigned long currentMillis = millis(); //sigfox AT Command if (currentMillis - previousMillis >= interval) { sigfox_atcommand_tx("AT$RCZ?\r"); //sigfox AT Command: get RCZ sigfox_atcommand_tx("AT$ID?\r"); //sigfox AT Command: Get ID sigfox_atcommand_tx("AT$PAC?\r"); //sigfox AT Command: Get PAC delay(100); previousMillis = currentMillis; sigfox_atcommand_tx("AT$SF=1234AB\r"); // Send Data to backend function } } void sigfox_atcommand_tx(char *wBuffer) { Serial1.print(wBuffer); // Send Data to backend sigfox_atcommand_rx(); // Get feedback and show on Terminal function } void sigfox_atcommand_rx() { char temp; while(Serial1.available() <= 0="" while="" serial1="" available=""> 0) { temp = Serial1.read(); SerialUSB.print(temp); delay(10); } } 

最後に、使用しているSigfox ATコマンドを説明しておきます。

ATコマンド説明
AT$RCZ? モジュールのRC確認(日本ではRC3)
AT$ID? SigfoxデバイスIDの確認
AT$PAC? Sigfox PACコードの確認(工場出荷時の情報であり、一度でもSigfoxクラウドにデバイス登録するとPACは切り替わります
AT$SF=... データ送信(最大12バイトを16進表記)