Sigfox Shield for Arduino (UnaShield)をATコマンドのみで動かす

技術情報

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が割り当てられています。

20200227-technical01.png

ですので、Arduino Unoであれば、SoftwareSerialを用いてATコマンドによる制御が可能になります。D4がUnaShield側の受信(RX)、Arduino側の送信(TX)となります。D5はその逆です。つまり、SoftwareSerial(5, 4)ですね。

サンプルコード

まずは、そのまま動くサンプルスケッチを載せておきます。

basic-at.c
#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コマンドで動かすためには、

  1. SoftwareSerialでD4/D5ポートを送受にしたシリアル通信とする
  2. AT$SFコマンドでSigfoxメッセージ送信

という2点だけです。是非、ロッカーの片隅にしまったUnaShieldを取り出し、試してみてください。