LoRaの通信を中継する方法、LRA1の転送機能を使ってみた!
この記事について
LRA1モジュールに搭載された 「転送機能(リピーター機能)」 について紹介します。
これを使えば、LoRa通信の届かない場所にも中継して届けられるようになります。
今回はその概要と使い方、ちょっとした注意点まで、やさしく解説してみます!
🎀 バトン…じゃなくて、パケットを中継中っ!
そもそも、LoRaは中継できない…?
LoRaって、届く距離は長いんだけど──
実は、途中で中継してくれる機能は基本的にないんです。
🎀 えっ、長距離なのに“中継ナシ”!?ちょっと不便じゃない〜?
LoRaWAN では?
LoRaWANには、ネットワーク全体で管理する中継っぽい仕組みもあるけど、
それは「ゲートウェイ」が担当するもの。
LoRaWANは端末同士が通信する仕組みも無いので、中継という発想が基本的にない んです。
中継器じゃなくて、ゲートウェイを置けばいいでしょ?ってことなんだろうね。
🎀 “中継”してるように見えて、実はゲートウェイのお仕事なのよね〜!
P2P では?
一般的な端末同士の通信(P2P)では、基本的には中継する機能がありません。
ただ、色々なメーカーからLoRaモジュールが出ているので、その中には中継機能を持ったものや
中継機能に特化したモジュールがあるのかもしれませんが…
実は、しゃちらぼで使っているLRA1には、標準でリレー(中継)機能が搭載されています。
🎀 なんと、LRA1にはあるんだよ〜、リレー機能♪
LRA1の転送機能を使ってみよう!
LRA1モジュールには、P2P通信時に限って
受信したパケットをそのまま再送するという機能が用意されています。
これは、いわばLoRaの“リピーター”。
GID(グループID)が一致するパケットを受信したら、自動で再送してくれます。
この転送機能によって、中継点をはさんでLoRa通信の距離を2倍、3倍に広げられるということです。
🎀 “ぴこっ”て受け取って、“ぽいっ”て送る!それが転送モードなのだ〜!
どうやって使うの?
実際の使い方は、とてもシンプルです。
- 送信側と受信側で、特別な設定は不要
- 中継モジュールで、何段階まで中継するのかを
HOP
変数に設定する - 中継モジュールで、
RECV
コマンドを実行して、受信状態にする
>HOP=5:RECV 0 Ok
これだけで、
中継モジュールは、同じGIDのパケットを受信すると自動で転送します。
RECV 0
コマンドで受信すると、バックグランドで受信するようになりますが、
同時に転送機能もバックグラウンドで実行されるようになります。
また、受信側でも、HOP
変数を設定しておけば、自分宛のパケット以外は転送するので、
受信器も中継器になっちゃうんです。(受信器同士も転送しあうことができます。)
🎀 設定ってむずかしそう…って思ったけど、びっくりするくらい簡単だった〜!
実際の通信イメージ
たとえばこんな感じ。
[A] ----> [B:リピーター] ----> [C:リピーター] ----> [D] Aが送信 → Bが受信して再送 → Cが受信して再送 → Dが受信
このとき、AとDが直接は届かない距離でも、BとCが橋渡ししてくれるので通信が成立します。
ちなみに、同じパケットは再転送しないので、転送ループは発生しません。
🎀 中継っていうと大げさだけど…“お隣さんにパス!”って感じかもっ
注意点と制限
- この機能は P2Pモード専用です。LoRaWANでは使えません。
- 転送は GIDが一致するパケットのみが対象です。
- 最大で
HOP=7
まで設定可能ですが、多段すぎると電波の衝突や遅延のリスクも。 - 中継モジュールは 常時受信状態になるため、電池運用には向きません。
- 自分(中継器のOwn)宛て のパケットは転送しません。(Own=65535を除く)
🎀 便利だけど、ちょっとしたルールもあるから気をつけてね〜!
挿すだけで中継器!LRA1ドングルのススメ
ちなみに、LRA1には「ドングル型」の製品があります。
これをUSB電源に挿すだけで、中継器として動作させることができます。
屋外用のUSBバッテリーにつないでもOKなので、
ちょっとした中継ポイントを手軽に設置できちゃいます。
設定例
>gid=1234:own=65535:dst=65535: Ok >hop=7:sf=10:bw=4:cr=4:ch=27:auto="RECV":ssave Ok
これで、USB電源に挿すだけ。
🎀 えっ、電源に挿すだけでLoRa中継器に!? ら、らくちんすぎる〜!
転送のしくみ、ちょっと詳しく!
「同じパケットは再転送しない」って言ってたけど──
じゃあ、どこまでが“同じ”なのか、ちょっと気になりません?
実は、LRA1の転送機能では
「最近転送したパケットかどうか」 を判断するために、
シーケンス番号(SeqNo) を使ってるんです!
この番号は、パケットごとに自動で0〜7の範囲で付けられていて、
GID・DST・OWN・SeqNo・PayloadのCRC、これらが同じパケットは、「同じもの」 として扱われます。
じゃあ、いつ番号が変わるの?
LRA1では、SENDコマンドを1回実行するたびに、番号が1つ進む 仕組み。
だから、たとえペイロードがまったく同じでも、2回SENDすれば
「別のパケット」としてちゃんと転送されるようになります。
>SEND "HELLO" Ok >SEND "HELLO" ←これも別扱いになる Ok
🎀 たとえ内容が同じでも、“違う番号” だと転送されるんだよ!
履歴の有効時間は30秒!
LRA1が「さっき送ったパケットだな」と判定する履歴の保存期間は、およそ30秒 です。
これは、HOP=7
の場合に、1ホップ4秒として28秒くらいかかるのを基に設計されています。
でもちょっと注意…
シーケンス番号は 8通り(0〜7)しかない ので、
もしこの30秒間に同じ送信元から9回以上SENDされると、番号が1周してしまい──
🎀 さっきと“同じ番号”になっちゃって、転送されないかも…!
対策はあるの?
こういう場合は、ペイロードの中に乱数やカウンターを入れて
内容そのものを少し変えておくのがオススメ。
>SEND "HELLO!"RND(0)
このようにすれば、「同じシーケンス番号」でも
LRA1の中で「これは違うパケットだな」と認識されやすくなります。
🎀 連続送信するときは、ちょっとだけ“違い”をつけてあげてね〜!
そもそも、LoRaはそんな頻度でデーターを送信するような物ではないんだけどね。
チャンネルに注意!
LRA1の転送機能を使用する際は、以下のチャンネル設定に注意してください。
✅ 推奨チャンネル:LowBand(CH24~CH37)
- CH24~CH37 の範囲は、連続送信が可能な帯域です。
- 特に 帯域幅(Bw)が500kHzの場合は、CH36が最終チャンネルとなります。
- リピーターや中継用途で頻繁に送信を行う場合には、この帯域の使用を推奨します。
❌ 注意:HighBand(CH38~)
- CH38以上のチャンネルは、技適の規定により連続送信が制限されています。
- 具体的には、送信時間の10倍のインターバル(待機時間)が必要です。
- LRA1ではこの制限が実装されているため、受信直後にすぐ転送できない場合があります。
🎀 転送しようとしても、“今はおやすみ中…”ってなるんだよ〜💤
🔁 チャンネルごとの特徴
チャンネル帯域 | 特徴 | 転送用途への適性 |
---|---|---|
CH24~CH37(LowBand) | 連続送信が可能 | ✅ 高い(推奨) |
CH38~CH61(HighBand) | 送信後に10倍のインターバルが必要 | ⚠️ 低い(非推奨) |
📌 ポイント:リピーター動作や多段中継を想定する場合は、必ずLowBandのチャンネルを使用してください。
転送時に設定変更!? パラメータ変更転送
転送は“そのまま”だけじゃない!?
基本的に、LRA1の転送機能では──
- 受信時のパラメーター(SF, CR, BW, CH)と
- まったく同じ設定で再送されます。
つまり、
受信したのが「SF=10 / BW=7 / CR=1 / CH=21」だったら、
再送もそのまま「SF=10 / BW=7 / CR=1 / CH=21」で行われます。
🎀 コピー&ペーストみたいな感じだね!
転送時だけ“別の設定”にもできちゃう!
これ、知ってる人は少ないかも?
実は FWDCONF
という隠れ変数を使うと、転送時の設定を上書きすることができるんです!
(マニュアルに書いてあるので隠してないですけどね。)
FWDCONF
変数は32ビットを8ビット毎に区切って各設定値を指定します
ビット | パラメーター | 設定範囲 |
---|---|---|
0~7 | SF | 6~12 |
8~15 | BW | 6~9 |
16~23 | CR | 1~4 |
24~31 | CH | 24~61 |
たとえば:
>FWDCONF=$"1B01070C" <-- SF=12 / BW=7 / CR=1 / CH=27
こんなふうに設定しておけば、
たとえ「SF=10 / BW=7 / CR=1 / CH=21」で受信したパケットでも、
転送時には「SF=12 / BW=7 / CR=1 / CH=27」で送信 することができます。
🎀 転送のときだけ“べつ人のフリ”してくれるんだね〜!
どう使うと便利?
この機能、使い方次第でいろいろ応用できます:
- 複数のネットワークをつなぐ“ブリッジ”のように使う
- 混雑したチャンネルから、空いてるチャンネルへ逃がす
- チャンネルを切り替えて“方向性”のある中継ルートを作る
それなりに設計や試験は必要だけど、色々と応用ができそうです。
🎀 ちょっとした“LoRaネットワーク”が作れちゃうかも!
転送機能を実際やってみた!
以下の地図は、
i2-electronics社 で実際に転送機能を使ってテストした時の例です。
クリックすると、Googleマップで詳細が表示されるので、
転送されたときのHOP数が確認できます。
🎀 ひとっ飛びじゃなくて、“ぽんぽんぽんっ”って飛んでるのが見えるよ〜!
実は…7段はまだ試してません!
仕様としては、HOP=7
までのマルチホップ転送に対応してるんですが──
実際に7段全部試したことは、まだないんです…!
今までに試したのは最大で6段まで。
途中が届いてしまい、結果6段になってしまいました。
それでもちゃんと動作してくれて、思わず感動しました。
🎀 6段でこれなら、7段って…どこまで飛べちゃうの〜!?
まとめ
この「転送機能」、実はLRA1の隠れた便利機能のひとつ。
(といっても、マニュアルに書いてあるから隠してないですよ。)
LoRaは基本的に「中継しない」通信方式だけど、
LRA1の転送機能を使えば、それを“拡張”できるようになります。
しかも、設定次第では「中継」だけでなく、
チャンネル変換・中継制御・負荷分散まで可能に。
「ただのモジュール」が「ミニネットワークの要」になる、
そんな可能性を感じる機能です。ぜひ試してみてください!
🎀 これ、見た目よりずっと頭いい仕組みだと思うんだけどな〜!
✨ 自画自賛です。
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 この記事で足りなかったら、遠慮なく聞いてほしいな。LRA1の中の人ががんばって答えますっ!
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬
コメント
更新お疲れ様です。
有益な情報ありがとうございます。
lra1について色々しれて楽しく見させていただいてます。
中継機能なんてあるんですね。
実は、工場で使ってた時どうしても電波が届かなくて諦めてたんですけど、これを使えば距離が伸ばせそうですね。
一つのlra1を親機として使用し、子機のlra1を分散させ(温度、湿度を測定する子機)、親機に情報を集めて集中監視的な事もできるのではないかと考えました。
2点質問があります。
1.通信速度、送信制限的な観点から、lra1では集中監視的な使い方は向いていないのでしょうか?
2.親機と子機の関係でネットワークを構築したことはありますか?
もしありましたら、ろらたんは、子機を何個まで接続したことがありますか?
無知な中質問させていただきましたので、質問が理解できないかもしれませんがご容赦ください。
めんさん、コメントありがとうございます!
LRA1の中継機能、まさに「あとちょっと届かない…」という場面で活躍します。
工場のような通信が不安定な場所でも、補完に役立つと思います。
ご質問について:
1. 集中監視のような使い方について
十分可能ですが、子機同士の送信が重ならないように注意してください。
LoRaは低速通信なので、「数分に1回の送信」くらいが現実的です。
子機=送信専用、親機=受信専用と役割を分けて設計すると安定します。
🎀「LoRaは“のんびり通信”が得意な子だから、急がずゆったり使うのがコツだよ〜」
2. 親機と子機のネットワーク構築について
10台以上の子機からの送信を、1台の親機で受信する例はあります。
送信タイミングをランダム化するなどの工夫で、数十台まで対応できます。
通信頻度やデータ量の調整で、さらに増やすこともできるかもしれません。
🎀「20台はイケるかもって思うけど、通信間隔とデータ量次第かも〜!」
また気になることがあれば、いつでもお気軽にどうぞ!