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