LoRa通信の中継機（リピーター）を作って、通信距離を延長してみる

# これまでのお話

1. [LoRaでIoTプラットフォーム（ThingSpeak）にデータを上げる方法](http://qiita.com/openwave-co-jp/items/fc4695f6de36fc9cd398)
2. [LoRaWANでIoTプラットフォーム（The Things Network）にデータを上げる方法](http://qiita.com/openwave-co-jp/items/7edb3661ab5703e38e7c)
3. [LoRaにGPSを付けて、会社の周りを歩いてみた（Google Earthで位置情報をプロットする）](http://qiita.com/openwave-co-jp/items/8dae802638cf6ac62650)
4. [複数のLoRaノードをゲートウェイにアクセスさせるときに気を付けること](http://qiita.com/openwave-co-jp/items/80f86e61d538d78ee6bb)
5. [LoRa機器の受信強度（RSSI）の取得方法](http://qiita.com/openwave-co-jp/items/c8634ef311ac29c506cd)
6. [LoRaと法律の関係について](http://qiita.com/openwave-co-jp/items/e8126105f0f6473929c2)
7. [LoRaWANでIoTプラットフォーム（The Things Network）にデータを上げる方法 その２](https://qiita.com/openwave-co-jp/items/d1f7aad54a5bba7b81cd)
8. [LoRa miniを電池駆動させる方法](https://qiita.com/openwave-co-jp/items/64d8fbddf134f12b36de)

# イントロダクション
[前回](https://qiita.com/openwave-co-jp/items/64d8fbddf134f12b36de)は電池駆動のお話で、それに対応するプログラムを投稿しようと考えておりましたが、電池駆動のプログラムには人感センサーの扱いが難しすぎるという問題があり、現在保留にしております。

今回は全く別の視点になります。
LoRaの通信でよくある問題として、「A地点までは届くのに、B地点までは届かないんだよな・・・」というものがあります。

どうすればこの問題を解消できるのか？
→通信を中継すればいいじゃない。

ということで、今回はLoRaの通信を中継する装置を作ってみます。
中継するという考え方は、ベーシックな通信だと割と一般的なのではないでしょうか。
ルータを何ホップさせるとか、光ケーブルは何100m毎にリピータを置いてノイズを修正して距離を伸ばしているとか、基本情報技術者試験にも出てきたと思います。（少なくとも10年前は）


# 全体像
中継機による距離の延長というタイトルなので、直感的にはこういった場合を想定しています。（黄色い円が電波が届く範囲です）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/6cb6e08c-7f32-c801-5ec0-eb69897147b6.png)

これで延長ができれば、次のような障害物の迂回でも対応できますね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/4d0dfdca-e30c-a62d-ba9d-3eb3a4e8bdff.png)

装置の構成は次のようにしました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/db631113-07f4-ad92-a514-f8ac997317e3.png)


ちょっと懐かしい「右から左へ受け流す、左から右へは受け流さない」という形です。
今回は弊社で使用しているサーバにデータをアップロードしています。
今回はゲートウェイの受け手として使い、どこまで飛んだかを確認するために使いました。

## 前提
* 今回は中継機のお話なので、サーバ、ゲートウェイ、ノードの説明は省きます。
* 経験則上、SF10の設定が距離が出やすく、その設定の前提で作られています。
    * SF10で送信できるデータ量として19バイトの固定長のみ対応しています。

## 使用ハードウェア
- Dragino社のLoRa IoT スターターキット：
    - Dragino LG01-JP：LoRaゲートウェイ
    - Dragino LoRa mini Dev-JP×2：中継機

- デバイス：LoRa mini Dev-JP（スターターキットだけでは足らないのでもう一つ追加）
- 電源：
    - スマホ充電用のバッテリー2つ（今回使用したものと全く同じというわけではないですが、[こちらが同等の製品](https://amzn.to/2smKumL)かと思います※未確認）
- 道具：
    - [ジャンパー線](https://amzn.to/2sxCv5z)


# 手順

## プログラムの書込み
受信用のLoRa miniと送信用のLoRa miniを繋げる形になります。
予めどちらが受信か送信か決めておき、それぞれに別のプログラムを書き込みます。
下記のGithubからソースを取得してください。
https://github.com/openwave-co-jp/LoRaHopExample

受信用ソース：WanaHopperRx1
送信用ソース：WanaHopperTx1

ソース上に、送受信の周波数を定義しているので、こちらをゲートウェイの周波数とノードの周波数に合わせ適宜変更する形になります。（以下の記述です）

```
float frequencyRx = 923.6;
float frequencyTx = 920.6;
```

同じ値にしてしまうと、自身の送信したものを受信して無限ループする可能性が考えられるので、別の周波数を指定することが前提です。

ソース名にナンバリングしているのは、2段ホップや3段ホップも行うことが考えられるからです。（その都度周波数指定は必要ですが）

## 回路
LoRa miniの画像ですが、接続端子は同じです。
電池はイメージです。USBのバッテリーを繋ぐことと同義としてとらえてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/3f8d6fee-1d90-1177-3d5d-ebe7285455b1.png)

| LoRa mini1| LoRa mini2|
|-----------|-----------|
| 3V3       | 3V3       |
| GND       | GND       |
| A0        | A1        |
| A1        | A0        |

| LoRa mini2| 電池 |
|-----------|------|
| 3V3       | ＋   |
| GND       | －   |

配線的にはGNDと3.3Vを繋いで、USBバッテリに対して並列繋ぎをしていることになります。
A0をシリアル送信（TX）、A1をシリアル受信（RX）としており、LoRa mini同士を繋げる際に配線が交差する形になります。

# 実験
これまで、弊社から1km弱のベンチマークにしているポイントがあります。（ここより少し離れると受信できなくなるポイントです）
そこに、中継機を設置します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/a20d6ea4-a3d6-33db-e0b6-957e882640ec.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/469cc2f0-e115-1fa7-81cf-9cb128f7ffa6.png)
矢印の方向約1km先にゲートウェイがあります。

そして、通信できた場所についてですが、確かに通信距離を延ばすことに成功しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169302/134adad4-2178-74e7-443c-e1919687ef21.png)

本来は2倍に距離を延ばすことを想定していましたが、緑の線は398m、オレンジの線は433mと1.4倍にとどまりました。
次の原因を考えています。

* 送信側ノードが、建物（障害物）の多い場所になってきたので、遮蔽されて到達できなくなった
    * 特にこれを体感したのはオレンジの線を確認している際、高速道路の下を潜る場合と潜らない場合で違いが出たことでした。
* 中継機の設置場所が受信しにくい場所だった
    * 陸橋の欄干に設置しましたが、ポールなどで高い位置にアンテナを付けれていればもう少し結果が変わったのではないかと考えています。




# 最後に

今回はかなり簡単な仕組みで中継機を作成しました。
送受信で周波数が異なるので、必ず中継機を通さないと通信できないので、エリアを広げたというよりは、道を付け加えた形に近いかと思います。
この特性上、エリア内を動くものではなく定点観測のものに利用が限定されるかと思いますがご参考になれば幸いです。

# 注意

こちらの回路はLoRa miniを使った回路ですので、他のハードで同じように使えるかは保証しかねます。

[株式会社オープンウェーブ](http://www.openwave.co.jp/)