Sigfox Shield for Arduino (UnaShield)は、Sigfoxモジュールを搭載し、Arduino Uno互換をもった開発ボードであり、基本的な使い方は、こちらで説明していますが、ArduinoからATコマンドのみでメッセージを送信することもできます。
シンプルにSigfox ATコマンドを使ってみたいという方向けにサンプルコードを用いて説明します。
準備
Sigfox Shield for Arduino (UnaShield)とArduino(Uno)を入手し、無償回線契約(Sigfox Buy)を済ませておいてください。
ATコマンドで動かす
UnaShieldは、ArduinoピンのD4とD5に、通信モジュールとのUARTが割り当てられています。
ですので、Arduino Unoであれば、SoftwareSerialを用いてATコマンドによる制御が可能になります。D4がUnaShield側の受信(RX)、Arduino側の送信(TX)となります。D5はその逆です。つまり、SoftwareSerial(5, 4)
ですね。
サンプルコード
まずは、そのまま動くサンプルスケッチを載せておきます。
# include <SoftwareSerial.h>
# define rxPin 5
# define txPin 4
SoftwareSerial Sigfox = SoftwareSerial(rxPin, txPin);
void setup() {
Serial.begin(9600);
// open Softserial Communication
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
Sigfox.begin(9600);
delay(100);
sendCommand("AT$I=10", "Sigfox Device ID:");
sendCommand("AT$IF=923200000", "UL Frequency set: ");
sendCommand("AT$DR=922200000", "DL Frequency set: ");
sendCommand("ATS410=0" ,"Public key: ");
sendCommand("AT$WR", "Save config: ");
sendCommand("AT$T?", "Get module temperature: ");
}
void loop() {
// put your main code here, to run repeatedly:
sendMessage("AT$SF=1234567890abcdef\r", "Send Message: ");
}
//Send Sigfox Command
String sendCommand(String cmd, String display){
Sigfox.print(cmd);
Sigfox.print("\r");
delay(100);
return displayStatus(display + cmd);
}
//Send Sigfox Message
String sendMessage(String cmd, String display) {
sendCommand(cmd, display);
while (true) {
String status = displayStatus("");
if (status.length()) {
delay(60000);
break;
}
delay(100);
}
}
String displayStatus(String message) {
String status = "";
char output;
while(Sigfox.available()){
output = (char)Sigfox.read();
status += output;
delay(10);
}
if (message.length()) Serial.println(message);
if (status.length()) Serial.println(status);
return status;
}
delay入れまくってますが、本当は避けるべきですね。
Sigfox ATコマンド
先程のサンプルコードで、setup()関数内にあったコマンド群は、出荷時に日本向けに設定済みのものですので、実際には必要ありません。
何を意味するかだけを書いておきます。
ATコマンド | 内容 |
---|---|
AT$I=10 | デバイスIDを取得 |
AT$I=11 | デバイスPACを取得 *注1 |
AT$IF | 上り送信信号の中心周波数(日本では923.2MHz) |
AT$DR | 下り受信信号の中心周波数(日本では922.2MHz) |
ATS410 | パブリックモード(1)とプライベートモード(0)の切り替え *注2 |
AT$WR | 変更値をモジュール内に保存 |
AT$SF | メッセージ送信 |
注1: デバイスのPACというのは、Sigfoxを一意に識別するための認証コードで、Sigfoxクラウド内での認証に使われます。ただし、このコードはワンタイムコードですので、デバイスをSigfoxクラウドに登録したりすると、AT$I=11コマンドから取得できるPACコードは無効になっており、最新のコードはSigfoxクラウド内のDevice Informationで確認してください。 | |
注2: パブリックモードとは、Sigfox基地局及びクラウドに接続するモードです。プライベートモードにするとSigfoxオペレータが運用する基地局には接続しないモードとなります。 |
まとめ
いろいろと書きましたが、UnaShieldをATコマンドで動かすためには、
- SoftwareSrialでD4/D5ポートを送受にしたシリアル通信とする
- AT$SFコマンドでSigfoxメッセージ送信
という2点だけです。是非、ロッカーの片隅にしまったUnaShieldを取り出し、試してみてください。