LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-24

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が割り当てられています。
image.png
ですので、Arduino Unoであれば、SoftwareSerialを用いてATコマンドによる制御が可能になります。D4がUnaShield側の受信(RX)、Arduino側の送信(TX)となります。D5はその逆です。つまり、SoftwareSerial(5, 4)ですね。

サンプルコード

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

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

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

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

Sigfox Japan KCCS
Twitter @ghibi

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1