はじめに
ラズパイ・ArduinoでIoT的なことをしたい場合wifiを使うことが多いと思います。しかし、屋外などで通信を行いたい場合の選択肢としてLTEがあると思いますが、モジュールが高価でハードルが高いのではないでしょうか?今回はLPWAの一種であるsigfoxを使って接続およびAWSとの連携までやってみたいと思います。
LPWA及びsigfoxとは?
一言でいうとLTE・4Gの逆の存在である通信規格です。大容量・高速がメインのLTEに対してLPWAは低容量・省エネのイメージです。
sigfoxはLPWAの一種で他の規格と比較しても、低消費電力・低価格が特徴です。
詳しくは→Sigfoxとは
Sigfoxモジュールについて
今回はSigfoxブレークアウトボード BRKWS01というモジュールを使用します
下記サイトにもある通り、sigfoxクラウドにてデバイス登録をしなければなりません。
sigfoxクラウドへのデバイス登録は上記の説明通りでできますが、注意点として下記画像内の赤線部分にはデバイスIDを入力してください
ESP32との接続方法
配線は簡単です。モジュールにピンがたくさんありますが、基本的に使うのはTX/RXです。
ESP32 | BRKWS01 |
---|---|
3.3V | vcc |
GND | GND |
TX | IO16 |
RX | IO17 |
ATコマンドよりアップリンクしてみる
配線及びsigfoxクラウドへの登録が済んだら、ATコマンドで通信してみましょう。
//ESP32+BRKWS01 ATコマンドコード
//ESP32 16→TX,17→RX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
Serial2.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// set the data rate for the SoftwareSerial port
Serial2.begin(9600);
Serial.println("Connect to the Sigfox Breakout board...");
Serial.println("AT$I=10 : get Device ID");
Serial.println("AT$I=11 : get PAC");
Serial.println("AT$T? : get Temperature");
Serial.println("AT$V? : get Voltages");
Serial.println("AT$P=unit : set Power mode (unit = 0:software reset 1:sleep 2:deep_sleep)");
Serial.println("AT$TR=unit : set Transmit repeat (unit = 0..2)");
Serial.println("AT$WR : save config");
Serial.println("AT$SF=[payload] : SEND SIGFOX MESSAGE");
Serial.print("Device ID : ");
Serial2.print("AT$I=10\r");
}
void loop() { // run over and over
if (Serial2.available()) {
Serial.write(Serial2.read());
}
if (Serial.available()) {
Serial2.write(Serial.read());
}
}
ATコマンドの使用例
シリアルにて
AT$I=10
を入力するとデバイスID
返ってきます。
sigfoxクラウドにメッセージを送信する場合は
AT$SF=0000
を送信し、通信が完了するとOK
が返ってきますので、さらにsigfoxクラウド(Device→MESSAGE)を確認すると下記のように確認できます。
送信したメッセージと大まかな位置がわかると思います。この時点では緯度経度の情報は見ることができません。Callbackの設定をすることでwebhookやAWSなどのエンドポイントを用意することで詳細の情報を受信することができます。
それらの方法はまた次回で。