LoRaWAN Shield for Arduino 使用方法
LoRaWAN Shield for Arduino は、現在販売を休止しております。
はじめに
「LoRaWAN Shield for Arduino」は、LoRaWAN検証用に用意されたモジュールです。
このマニュアルでは、モジュールの接続方法や、センスウェイLoRaWANサーバーとのデータ送受信設定について説明します。
LoRaシールドの使用法
<アンテナの取り付け>
アンテナとワイヤーを用意し、アンテナのソケットにワイヤーのねじ部分を奥まで回して取り付けます。
アンテナのソケットにワイヤーのねじ部分を奥までまわして取り付けます。
ワイヤーの端子をLoRaシールドのチップの端子に差し込みます。
Arduino とLoRaシールドの接続
Arduino UnoとLoRa シールドを用意します。
Arduino のピンソケット(1)にシールド裏面のピン(2)を差し込みます。シールド裏面のピンは折れやすいので注意して差し込んでください。
D11 | UART_TX |
D12 | UART_RX |
※通信速度デフォルト値:9600bps
LoRaシールドと Arduino との接続では、D11/D12ピンをUARTシリアルで使用しています。
Arduinoスケッチでは、SoftwareSerial 等を使って LoRaモジュールとの通信を行い、データの送受信等を行います。
センスウェイLoRaWANサーバーとのデータ送受信設定
Join(デバイス認証/暗号化キー交換)
モジュールがLoRaWANのデータ送受信を行うには、まず、センスウェイLoRaWANサーバーに対して「join」と呼ばれる「デバイス認証/暗号化キー交換処理」を行う必要があります。Arduino D11/12ピンへのUARTシリアル接続のコマンドラインへ、スケッチから「join」コマンドと引数を指定することで行います。
join の書式は下記の通りです。
<Mode>
otaa (over-the-air activation)」 と 「abp (activation by personalization)」 のどちらかを指定しますが、センスウェイLoRaWANサーバーでは、現在 otaa のみ使用可能です。
join の応答例は下記の通りです。
join は、周囲の電波状況やその他の理由により失敗する可能性もあります。状況にもよりますが、スケッチではループ等で成功するまで繰り返すようプログラムするほうがよいでしょう。また、一度 join に成功したステータスは、電源を切っても保持されています。
モジュールjoin時コマンド応答例
lorawan join otaa
> busy
> unsuccess
lorawan join otaa
> Ok
> accepted
Uplink データ送信 (モジュール→センスウェイLoRaWANサーバー)
モジュール(デバイス) からセンスウェイLoRaWANサーバーへのデータ送信は、Arduino D11/12ピンへのUARTシリアル接続のコマンドラインへ、スケッチから「tx」コマンドと引数を指定することで行います。
tx の書式は下記の通りです。
<Type>
ACKを確認する(confirmed)かどうかを、cnf / ucnf の文字列で指定します。
<PortNum>
アプリケーションを区別する等、ユーザが自由に使用可能な数値を1~223の間で指定します。例えば、弊社ではport = 11をGPS用途に割り当ててあり、地図へのマッピングアプリケーション等での判断に使用しています。
弊社使用例
0~10 = 予約
11 = GPS座標/高度
12 = 温度/湿度/(気圧)
13 = CPU温度(他機器温度)
14 = 数値カウント
15 = 距離
:
<Data>
送信するデータの16進数表記。エンコード方法の規定はなく、モジュール(デバイス)側でのエンコード方法とサーバー側アプリケーションでのデコード方法が一致していれば問題ありません。例えば、弊社では「GoogleMap表記の座標を100万倍したもの」と「高度」をそれぞれ16進表記して連結し、GPSのデータ領域として使用しています。
tx の応答例は下記の通りです。
lorawan tx ucnf 11 0220a5900854ac80001f
> Ok
> tx_ok
lorawan tx cnf 14 0011223344556677
> Ok
> err
DR値による送信可能データサイズ
DR値 | SF/BW | Payload(データ) サイズ(bytes) |
ビットレート (bit/s) |
---|---|---|---|
2 | SF10BW125 | 11 | 980 |
3 | SF9BW125 | 53 | 1760 |
4 | SF8BW125 | 125 | 3125 |
5 | SF7BW125 | 242 | 5470 |
LoRaモジュールは、SpreadingFactor(SF) と BandWidth(BW) の組み合わせで決まるDR値によって、送信可能なデータサイズと到達距離が変化します。DR値が低いほど到達距離は長く、送信可能データサイズは小さくなります。
モジュールのDR値の設定は、Arduino D11/12ピンへのUARTシリアル接続のコマンドラインへ、スケッチから「set_dr」コマンドと引数を指定することで行います。
set_dr の書式は下記の通りです。
lorawan set_dr
モジュールDR値設定応答例
DR値を指定します。
set_dr の応答例は下記の通りです。
lorawan set_dr 5
> Ok
Uplink データ送信 (センスウェイLoRaWANサーバー→PC/アプリケーションサーバーなど)
モジュールから送信したデータをPCやアプリケーションサーバーが受信するには、センスウェイLoRaWANサーバーを経由して、MQTTプロトコルの Subscribeを使用します。
MQTTのアクセス情報やtopicの指定方法については、「MQTT接続マニュアル」を参照してください。
Downlink データ受信 (PC/アプリケーションサーバーなど→センスウェイLoRaWANサーバー)
PCやアプリケーションサーバーからのデータをモジュールが受信する場合にも、MQTTプロトコルの Piblishを使用して、データはいったんセンスウェイLoRaWANサーバーが受信します。
モジュールはMQTTのアクセス情報やtopicの指定方法については、「MQTT接続マニュアル」を参照してください。
Downlink データ受信 (センスウェイLoRaWANサーバー→モジュール)
モジュールでは、センスウェイLoRaWANサーバーへのデータ送信時に、サーバーにPCやアプリケーションからのデータがある場合には、それを受信します。
Arduinoのスケッチ等でこれをバンドルする場合の「tx」コマンドの応答例は下記の通りです。
lorawan tx cnf 14 01020304
> Ok
> rx 14 00112233
> tx_ok
2018.04.17 Ver.01
2018.04.27 Ver.02
2018.09.27 Ver.03
2019.02.28 Ver.04
2019.08.23 Ver.05
2022.03.09 Ver.06