RC3(日本)対応のArduino + Sigfoxボードとして台湾のMight Electric社がリリースしたMTDuinoを触ってみました。
MTDuino-SFM2CWW001
MTDuinoは、Atmel SAMD21 32-bit Cortex-M0コアとSigfoxモジュールを搭載したArduinoボードで、大きさは、67mm x 25mmとなっています。カタログはこちら(GitHub)からダウンロードしてください。対応周波数に920MHz帯は書かれていませんが、あります。(RC3を指定してもらうと良いかと)
microUSB端子が付いていますので、こちらからPCと接続して開発という感じになります。
Arduino IDEの設定
Arduino IDEのボードマネージャでArduino SAMD Boards(32-bits ARM Cortex-M0+)をインストールしてください。
MTDuinoとPCを接続、Arduino IDEで
- ボード:Arduino M0 Pro (Native USB Port)
- シリアルポート: COMx (Arduino M0 Pro (Native USB Port))
- 書込装置: Atmel-ICE
と設定します。
Arduinoプログラミング
ユーザーマニュアル及びサンプルコードはMight社がGitHubにアップしていますので、こちら(https://github.com/Mighty-Net/MTDuino)からダウンロードして使ってもらえばよいですが、そのままではSigfoxメッセージ送信コマンドでエラーになってしまう可能性があるので、その場合は下記コードをお試しください。
#include <Arduino.h> // 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進表記) |