[LPWA] LoRaの通信距離を測定してみた

LPWA[^LPWA]規格の一つとして知られるLoRaですが、その通信距離は一般には10km程度と言われています。とは言え、そういった値は計算上のスペックで示されているまでで、実運用として使える距離はそれに満たないものと考えられます。今回は実運用でどこまで使えるかを確認するために、GPSモジュールを持ち歩きながら実際にLoRa通信が行えた場所を確認することにしました

# 使用したLoRaモジュール

測定には [株式会社アイ・ツー LRA1-EB-SMA](https://www.i2-ele.co.jp/LoRa.html) を使いました。以下の写真から分かるように技適マークが付いてます

![LRA1-EB-SMA](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/2e8d059c-5f56-d36b-f187-f4eaf55c119a.jpeg)

LoRaモジュールは海外製のものも多くありますが、920MHzの所謂Sub-GHz帯を使う物だとしても各国で使える周波数帯が微妙に異なるために、場所によって使用するチャンネルを考慮して通信する必要があります。もちろん外で使うならば技適認証が済んでいる前提ではありますが、正しいドライバソフトを使ってパラメータも間違えないように気を遣う必要があり、面倒な所があります

その点、このモジュールは日本国内で使う事を前提とした設計となっており、技適から外れる電波は出さないようにモジュール側できちんと制御されています。同じチャンネルの電波を検知したら送信を遅らせるキャリアセンスの処理もモジュール側で行ってますので、使う側は難しい事を考えずに通信を行うことができます

※ 本記事で扱う LoRa は送信側と受信側の2台のモジュール間の通信であり、 LoRa Network を使わないプライベートな LoRa 通信です

# 通信距離の測定

## 機器構成

測定には以下の機器を用意します

* 測定値記録用 Windows PC
* GPSモジュール
  * 本記事では [秋月電子通商 AE-GYSFDMAXB](http://akizukidenshi.com/catalog/g/gK-09991/) を使いました。PCとの接続には [UART-USB 変換モジュール](http://akizukidenshi.com/catalog/g/gK-01977/) を間に入れています
  * 基本的にNMEAデータを出力するモジュールであれば何でも良いと思います
* LoRaモジュール LRA1-EB-SMA
  * 送信用 1台、受信用 1台を用意します

## LoRaモジュールの準備

測定するために、LoRaモジュールにデータ通信に必要なパラメータ設定とプログラムの入力を行います

PCとLoRaモジュールをUSBケーブルで繋ぎ、TeraTermなどのターミナルソフトを使って LoRa モジュールのターミナルを開きます

シリアル通信の速度を `115200bps` にする以外はデフォルトの設定で繋がると思います

ターミナルの開き方ならびに、簡単な疎通確認の詳しい手順は [こちらの記事](https://qiita.com/suzutsuki0220/items/7c96d8d3ebd5404d1036) をご参照ください

### パラメータ(LoRa変数)の設定

LoRaモジュールにそれぞれ異なる `自局ID` を指定します。これはLoRa通信で送信元や受信先を区別するために割り当てる数字で `0～65534` の値が指定できます

ここでは例として、受信側に `Own = 6` 、送信側に `Own = 1` を設定しました

まずは **受信側** です。設定後は変更した値を書き込むために `SSAVE` コマンドを実行します

```shell:受信側の設定例
>Own = 6
OK
>SSAVE
OK
```

続いて **送信側** です。送信側はデータの送り先を指定する `Dst` パラメータも変更します

```shell:送信側の設定例
>Own = 1
OK
>Dst = 6
OK
>SSAVE
OK
```

他にもチャンネルや送信出力など通信距離に関係するパラメータもありますが、今回はモジュールの初期値から変更しないで確認しました。初期値は以下の通りです

| 名前 | パラメータ | 初期値 |
|------|-------|-------|
| チャンネル | Ch | 36 |
| 送信出力(Power) | Pwr | 13 (dbm) |
| 拡散率(Spreading Factor) | Sf | 10 |
| 帯域幅(Bandwidth) | Bw | 7 (125kHz) |
| 冗長率(Coding Rate) | Cr | 1 (4/5) |

それぞれのパラメータについては販売元ドキュメントの [LRA1 ソフトウェアリファレンスマニュアル](https://www.i2-ele.co.jp/LRA1_software.html) をご覧ください

### 送受信プログラムの入力

送信用と受信用それぞれのプログラムは [こちらの記事](https://qiita.com/suzutsuki0220/items/7ef19e38d5db80ef3b5d#4-2-%E5%8F%97%E4%BF%A1%E3%81%AErssi%E4%BF%A1%E5%8F%B7%E5%BC%B7%E5%BA%A6%E3%82%92lcd%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B) で紹介したコードを入力します。ここでは詳しい説明は省いていますので、必要に応じてご参照ください

入力前に `EDIT 1` を実行して、編集モードに切り替えてください。プロンプトが `>` から `>>` に切り替わります

```shell:編集モードに切り替える
>EDIT 1
OK
>>
```

送信側のプログラムを入れます

```vb:送信側のプログラム
10 DO
20 FOR S=4 To 1 STEP -1
30 LCLR:LPRINT "Wait ";S;"s"
40 DELAY 1000
50 NEXT
60 LCLR:LPRINT "Sending"
70 SEND "1234567890"
80 DELAY 1000
90 LOOP
```

プログラムを入れたら `PSAVE` コマンドで保存します。また、起動時に自動的に実行されるように `AUTO` 変数にプログラムの読み込みと実行のコマンドをセットします

```shell:プログラムの保存と自動実行の設定
>>PSAVE
OK
>>AUTO = "PLOAD:RUN"
OK
>>SSAVE
OK
```

受信側のプログラムを入れます。 `EDIT 1` を実行して編集モードに切り替えた後に以下のプログラムを入力します

```vb:受信側のプログラム
10 DO
20 RECV 6000
30 IF STAT=10 THEN
40 LCLR:LPRINT "Rssi";RSSI
50 PRINT "@"; RSSI; ","; Rxdw(2); "," ; RXD
60 ELSE
70 LCLR:LPRINT "ERROR ";STAT
80 ENDIF
90 LOOP
```

プログラムを入力したら保存と自動実行の設定(`PSAVE` `AUTO = "PLOAD:RUN"` `SSAVE` の3つを実行)します

※ LoRaモジュールで LRA1　の評価ボード以外(LCDが付かないモデル)をお使いの場合はLCD制御のコマンド (`LCLR` や `LPRINT`) が含まれると実行時にエラーになりますので、適宜省いてください

## 測定用PCツール

LRA1-tool というツールがありましたので、こちらを利用します
<https://github.com/TenFourth/LRA1-tool>

### セットアップ

[Releases](https://github.com/TenFourth/LRA1-tool/releases) にセットアップ用の exe がありますのでダウンロードします

ダウンロードした exe を実行すると、ネットからダウンロードしたアプリのためかSmartScreenの警告画面が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/90bf707b-5afe-6c4d-78c8-4d9e6c7b732e.png)

[詳細情報] をクリックして [実行] をクリックすればセットアップが開始されます (ユーザー責任でこのツールの発行元を信用します)

セットアップの仕方は普通のアプリと同じだと思いますので、詳しい手順は省略します

### 起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/5da39280-e74b-eccd-913b-69092ca323c4.png) 
セットアップが完了すると、デスクトップとスタートメニューに `lra1-tool` のアイコンが作られますので、そこからツールを起動できます

※ツールを起動する前にGPSモジュールとLoRaモジュール(受信側)をPCに繋いだ状態にしておきます

### 設定

最初の起動時は、まずモジュールのポート設定とログの保存先を指定する必要があります

[設定] をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/5ec6baa3-0ab4-2aac-27b4-cd2cba940cad.png)

設定画面でGPSモジュールとLoRaモジュールの COM Port、Baudrateを指定し、ログの出力先を指定して、[OK]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/3ac58461-3347-6c1d-903c-d81cb236ea80.png)

設定が正しければ、Preview欄にモジュールが出力した文字列が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/46c29b7d-7e26-3578-62d7-e0670c78a3ad.png)

* GPSモジュールは `$G` で始まるNMEA形式のデータが表示されます
* LoRaモジュールは `@` から始まる数字や `>>timeout` などのエラーメッセージ、バージョンやコマンドの文字列が表示されます

### 測定

Preview欄にモジュールから送信された文字列が正しく表示されている状態で外に持ち出してGPSが測位できるまで待ちます (数分程度)

※ GPSモジュールは部屋の中では測位できないので、必ず外(空が見える場所)で確認します

測位が出来ると `Location` 欄に `lat` と `lng` の値が出てきます。[ログ開始] のボタンをクリックすると記録が開始されます

出発点に送信側の LoRa モジュールを置いて動き回ります。ログは [ログ停止] ボタンで止められます

### 地理院地図で受信した電波強度を確認する

設定画面で指定した場所に、ログを開始した日時の名前で `csv` ファイルが出来上がっています。これを国土地理院が提供する地理院地図(<http://maps.gsi.go.jp/>)で表示できるように `GeoJSON` ファイルに変換します

LRA1 tool の [Convert] タブをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/c1d3e12e-a201-669c-1ff4-57c0f449e52b.png)

CSVファイルを指定して、[変換] をクリックすると、GeoJSONファイルの保存先が求められます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/8f6c9ced-b71c-5829-110c-8dca1408a589.png)

保存したい場所を選択して [保存] をクリックします

次に [地理院地図](http://maps.gsi.go.jp/) を開いて [ツール]-[作図・ファイル] をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/c449a162-0c87-bd7e-4779-2cc75bda0ae5.png)

[ファイルからデータを読込] をクリックして、先ほど変換した `geojson` ファイルを指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/fc30a8b1-4b14-4296-c623-cf1003623f61.png)

正常に読み込まれれば、移動した場所と受信できた時のRSSIが表示されます。印の色はRSSIによって変わります

| RSSI | 色 | 感度 |
|:----:|----|-----|
| 0 ～ -100 | 青の印 | 良好 |
| -101 ～ -120 | 緑の印 | 低下 |
| -121 ～ -137 | 赤の印 | 悪い |
| 受信に失敗 | × | |

※ 地図上に示される印の色の違いはツール作者の主観で決められた値なので、通信の品質を保証するものではないため、参考値として見るようにしてください

## 通信距離の測定

見通しのよい田んぼの農道を動き回ってみました

![2020-06-24 185914.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61404/7c1550cb-818d-1436-a7ae-841395d0bb73.jpeg)

地理院地図の [ツール]-[計測] をクリックすると任意の点の距離を求めることができます。今回の測定では最も距離の長い所で `1.071km` となってました

RSSIの低下具合を見ると、まだ余裕があるように見えましたが、家や木が周りに多くなってきた所で `timeout` が頻発するようになってしまいました。もう少し見通しの良くて広い場所で測定し直す必要がありそうです

## 結果

今回は通信距離の限界を見るまでには出来ませんでしたが、パラメータを変更しなくとも数km届くことは十分あり得ると思いました

とは言え、長距離を飛ばすには条件がありそうです

* 障害物が無いこと
  * 今回の測定で 1km を超えたあたりで `timeout` してましたが、周りに木や家が増えたことによる低下が大きいと思います
  * 送信側を自宅の部屋に置いた場合、400m程で `timeout` してしまいました。建物などの密集した場所であればさらに短くなりそうです
  * 2.4GHz帯と比べて障害物に強いと言われますが、遠くに飛ばしたいならばアンテナを高い場所に設置するなど、なるべく障害物に当たらないようにする必要がありそうです
* ノイズの影響を考慮すること
  * 受信側モジュールをPCに近づけた時に数センチの距離であっても RSSI が極端に低下するケースがありました(-20から-60程)。1GHzに近いのでCPUが発するノイズの影響があったのかもしれません
  * PCで測定する前に M5-Stack で位置情報とRSSIを記録しようとしてましたが、200m程で `timeout` が連発していました。もっと飛ぶはずと思って販売元の(株)アイ・ツーに問い合わせをして親切に対応頂きました。感謝!!

# 追記 (2020.11.25)

LRA1販売元のアイ・ツーからLoRaのGPSトラッカーが販売されているようで、こちらを使えばもっと簡単に通信距離を調べられそうです。このページのトラッカーではなくてもFirmwareの更新することで、LRA1とGPSモジュールを繋いでLoRaで位置情報を送ることも可能になるようなので、時間を見つけて試してみようと思います

LoRa-GPS - 株式会社アイ・ツー
https://i2-ele.com/lora-gps/

# 参考までに

LoRaの通信距離について言及しているURLを集めました

## LoRaの通信距離と信号強度 | AmbientData Inc.

概ね 2.5km が実用範囲なのかもしれません

https://ambidata.io/samples/network/lora/

> ・住宅地で、見通せる場所で4km、見通せない場所でも2.5kmの距離で通信可能だった。
> ・帯域幅が狭いほど、拡散率が大きいほど可能距離は長くなるが、通信時間も長くなるため、適切な帯域幅、拡散率を選択する必要がある。
> ・通信可能な距離、信号強度は帯域幅、拡散率の単純な関数ではなく、端末周辺の地形や建物の影響を強く受けるため、実際のIoTシステムでLoRa通信を使うためには、現地での実測が必要。

## LoRa無線　通信距離　琵琶湖大橋 | ハカル プラス 株式会社

見通しが良ければ 5.0km の通信も可能なようです

https://hakaru.jp/hakaru-tech/%E9%80%9A%E4%BF%A1/iot-lpwa/lora%E7%84%A1%E7%B7%9A%E3%80%80%E9%80%9A%E4%BF%A1%E8%B7%9D%E9%9B%A2.html

> この製品は 当社検証では琵琶大橋にて　見通し5.0kmの通信を確認しました。　　　　　　　　　　　（平均通信強度：-114dbm）
> また、LoRa無線機をアンテナを外だしせず制御盤内に設置した状態でも1.5kmの通信を達成しました。（平均通信強度：-106dbm）

## 性能実証 | センスウェイ株式会社

実証実験ですが 120km 超の通信も出来たようです。TX沿いから富士山が見える時もあるので障害物が無ければ届くのですね

https://www.senseway.net/technical-information/performance/

> 国内最大飛距離達成
> 富士山の五合目から千葉県柏市の柏の葉キャンパスの基地局まで 123.43km のデータ送信に成功しました。

## [Silicon Labs/ワイヤレス講座] Sub-GHz メリット/デメリット編 | Macnica, Inc.

雨が降ると通信距離が低下することもあるようです

https://www.macnica.co.jp/business/semiconductor/articles/silicon_labs/128913/

> 2.4GHzは水に吸収されやすい性質を持っていますので、雨が降ると通信距離が短くなってしまいます。
> 同じマイクロ波であるサブギガも水に吸収されますが、それでも2.4GHzに比べると水に吸収されにくく、天候の影響を受けづらい性質を持っています。
>
> 屋外での安定動作の観点でも、サブギガに分があると言えるでしょう。

[^LPWA]: Low Power, Wide Area (低い消費電力で遠くまで飛ばせる無線通信の総称)