技術情報
Sigfox Shield for Arduino(UnaShield)をATコマンドのみで動かす
2020.03.03
Sigfox Shield for Arduino(UnaShield)は、Sigfoxモジュールを搭載し、Arduino Uno互換をもった開発ボードであり、基本的な使い方はこちらで説明していますが、ArduinoからATコマンドのみでメッセージを送信することもできます。
シンプルにSigfox ATコマンドを使ってみたいという方向けにサンプルコードを用いて説明します。
準備
Sigfox Shield for Arduino(UnaShield)とArduino(Uno)を入手し、無償回線契約※1 (Sigfox Buy)を済ませておいてください。
※1 2022年7月1日をもって、Devkit対応デバイスのDevkit登録(無償回線利用)が終了いたしました。
Sigfox回線をご利用の際には、Sigfox Buyにて有償回線をご購入ください。
Sigfox Buy お申込みからご利用開始までの流れはこちら
ATコマンドで動かす
UnaShieldは、ArduinoピンのD4とD5に、通信モジュールとのUARTが割り当てられています。

ですので、Arduino Unoであれば、SoftwareSerialを用いてATコマンドによる制御が可能になります。D4がUnaShield側の受信(RX)、Arduino側の送信(TX)となります。D5はその逆です。つまり、SoftwareSerial(5, 4)ですね。
サンプルコード
まずは、そのまま動くサンプルスケッチを載せておきます。
#include #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=1" ,"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コマンドで動かすためには、
- SoftwareSerialでD4 / D5ポートを送受にしたシリアル通信とする
- AT$SFコマンドでSigfoxメッセージ送信
という2点だけです。是非、ロッカーの片隅にしまったUnaShieldを取り出し、試してみてください。