LoRa通信ってどうやるの?LRA1でP2P送受信してみた!
この記事について
前回までは、「LPWA」や「LoRa」と「LoRaWAN」の違いや役割などについて紹介しましたが、
今回からは、実際にLoRaモジュールを使っての実践編です。
LRA1を使って、LoRaのP2P通信(プライベート/独自通信モード)を実際に体験してみましょう。
🎀 今日からいよいよ、実機でLoRaを動かしていくよ〜っ!
理屈はほどほどに、まずは触ってみたい人にぴったりな内容だよ〜🐬
実機でP2P通信を体験してみよう
LRA1を2台用意すれば、LoRa通信の送受信をすぐに試すことができます。
しかも専用アプリは不要、TeraTermなどのターミナルソフトがあればOK!
今回は「P2Pモード」を使って、シンプルな送受信の手順と基本的なコマンドを体験していきましょう。
🎀 LRA1は、ターミナルで直接しゃべりかけられるのがいいところ〜!
ちょっと昔のBASICみたいな感じで楽しいよ〜!」
LRA1を準備する
LRA1はモジュールなので、そのままでは利用できません。
ここでは LRA1の評価ボード(LRA1-EB) を使用します。
この評価ボードには、USB(UART)インタフェース、LCD、環境センサー、ピンヘッダーなどが搭載されていて、
今回のような実験にぴったり。
マルツ などの通販サイトでも入手できます。
🎀 テストするには送信側と受信側の 2台 必要だよ〜!
📒 今回の実験は送受信のみでLRA1-EBのLCDや環境センサーは使いません。
ドングル型(LRA1-DONGLE)などでも同様の実験ができます。
今回は気軽に楽しめる P2Pモード を使います。LRA1は出荷時のデフォルトがP2Pモードになっています。
⚠️ P2PモードとWANモードは同時に使うことはできません。モードを切り替えたら再起動が必要です。
接続とソフトの準備
- 評価ボードとPCをUSBケーブル(micro USB)で接続します。
- 電源はUSBから供給されます。
- ターミナルソフト(TeraTermなど)を準備します。
OSやターミナルソフトの種類は問いません。
USBからシリアル通信ができれば何でもOK!
🎀 ここではTeraTermを使って説明するね〜!
- ボーレートは 115200(デフォルト)です。
TeraTerm(Windows版)での設定例
💻 通常は、USBを接続するとOS標準のUSBドライバで自動的に認識され、そのまま使用できます。
ただし、環境によっては専用ドライバのインストールが必要になる場合があります。
その場合は、以下からCP210x用ドライバをダウンロードしてください。
👉 SILICON LABS – CP210x USB to UART Bridge VCP Drivers :
https://www.silabs.com/developer-tools/usb-to-uart-bridge-vcp-drivers?tab=downloads
🎀 ほとんどのPCなら、そのまま“ピコン♪”って認識されるけど、もし動かなかったらドライバを入れてね〜🐬
LRA1を起動する
TeraTermを起動して、LRA1-EBの左上にある RESETボタン を押すと、次のようなメッセージが表示されます:
i2-ele LRA1 Ver 1.26.a+ OK >
バージョンは出荷時期によって異なります。
>
はコマンド入力待ちのプロンプトで、ここから直接コマンドを入力できます。
この状態を「インタラクティブモード」と呼びます。
ここでは BASIC言語のコマンドが使えるようになっていて、昔の8bitパソコンのような感覚で操作できます。
🎀 BASICの `LIST` とか `PRINT` とか、あのころの感覚がよみがえるよね〜!
ターミナルで直接しゃべってる感じが新鮮かも〜!
#?
と入力すると、現在の設定状態が確認できます:
>#? Sn=101674 DevId="70b3d559e01d22d4" Wan_mode=0[P2P] Modem=1[LoRa] Pwr=13(dBm) Ch=36 Sf=10 Bw=7[125kHz] Cr=1[4/5] Gid=0 Own=1 Dst=0 AesKey="" Ctrl=$00000000 Echo=1[On] Xtal32k=0[int] Auto="" OK >
🎀 この画面が出たら、もう準備OKだよ〜!
LoRaのパケットを送信する
以下のコマンドを入力すると、LoRaのパケットが送信されます:
>send "ABCDEFG" OK >
基板上の 赤LED(PA18) が一瞬点灯し、OK
が表示されたら送信成功です。
🎀 たったこれだけで送信できちゃうの、すごくない〜!?
受信側を準備する
もう1台のLRA1-EBでも同様にTeraTermで起動します。
送信側と同じ設定だと、IDが衝突するので、受信側には別のIDを設定します。
そのために、own
に自分のID、dst
に宛先を指定します。
ここでは、次のように設定することにします。
送信側 → own=1
,dst=0
(デフォルトのまま)
受信側 → own=0
,dst=1
受信だけなら受信側のdstは何でもいいのですが、念のため設定します。
>own=0:dst=1 OK >? own,dst 0 1 OK >
これで、受信側のown(自己ID)とdst(宛先ID)が設定できました。
🎀 ? own,dst` って書いてあるけど、これは `PRINT` コマンドなんだよ〜!
昔BASICをやったことある人にはおなじみかも〜!
`PRINT own,dst` って書くこともできるよ〜!
受信してみよう!
recv
コマンドを入力すると、パケットを待ち受ける状態になります:
>recv
この状態で、送信側から再度 send
すると、受信側に次のように表示されます:
@-42,1,ABCDEFG
🎀 受信が表示されたらちょっとうれしいよね~。
@ の後ろは、RSSI(電波の強さ)、送信元ID、メッセージ内容の順だよ〜!
また、緑LED(PA19) が一瞬点灯し、パケット受信の視覚確認もできます。
受信コマンドは Ctrl-C
を押すことで終了できます。
グループID
own
は自己ID、dst
は宛先という説明をしましたが、
それに加えて、LRA1の通信には「gid(グループID)」という概念があります。
これはプロジェクトや通信単位ごとに「どのグループに属しているか?」を示すためのもので、
同じチャンネル(CH)を使っていても、gidが違えば通信できません。
逆に言えば、別のプロジェクトで同じCHを使っていても、gidを分けておけば干渉しないというわけです。
(※物理的な電波干渉がなくなるわけではないので注意)
また、宛先のDst
に 65535
を指定すると、ブロードキャスト送信になります。
この場合は、同じgidを持つすべてのデバイスがそのメッセージを受信します。
🎀 “あれ、CHもSFも同じなのに届かない〜!”ってときは、gidが違ってるかもだよっ💡
パラメーターを変えてみよう!
前回の記事でも説明したように、LoRaでは、SF(Spreading Factor)、CR(Coding Rate)、BW(Bandwidth)、PWR(Tx Power) の各パラメータを調整することで、通信距離や速度、信号の強度などの伝搬特性が大きく変化します。
まずは、SF (Spreading Factor) を変えてみましょう。
たとえば、こんな風にするとSFを変えることができます。
>sf=12 OK >
この状態で同じように send
→ recv
を使うと、通信が届く距離が伸びるかもしれません。
SF=7〜12の範囲で調整できます。
SFの数字が大きいほど、通信時間は長くなります。
でもそのぶん、弱い電波でもちゃんと届くようになります。
🎀 SFを変えて、どのくらい届くか実験してみるのも楽しいよ〜!
値が大きいいほどゆっくりだけど遠くまで届くんだよ〜!
SFだけでなく、BWやCR,PWRを変えてテストしてみるのも面白いと思います。
同じ環境(送信出力、受信感度、距離)が同じでも、SF/BW/CRのパラメーターが異なると通信できたりできなかったりが体感できると思います。
>sf=11:bw=6:cr=3:pwr=10 OK >send "XYZ" OK
なお、SF,BW,CR,CHは送信側と受信側で同じ値にしておく必要があります。
片方だけ変えても通信できないので注意してくださいね。
📒 SFだけでなく、BWとCRの設定も送信時間や受信感度に影響します。
パラメーターを保存する
IDやSF,BW,CR,PWRなどのパラメーターを設定したとき、そのままでは次にリセットや電源OFFで設定前の状態に戻ってしまいます。
次のようにssave
コマンドを使うことで、現在の設定値をモジュールに保存します。次回起動時はその保存された値が初期値となります。
>ssave OK
🎀 保存しないと、電源切ったときに全部消えちゃうから気をつけてね〜っ💦
設定値の保存関連には、以下のコマンドがあります。
– ssave
: 設定値をFlashに保存します。
– sload
: ssave
で保存した値を読み出します。設定値を色々と変えた後に、元に戻す時などに利用します。
– default
: 設定値をデフォルト(工場出荷時)にします。このコマンドだけではFlashに保存しなことに注意が必要です。
送信時間に注意しよう
温度環境に敏感
じゃあ、送信時間は多少かかるけど、SFを大きくすれば遠くまで届くからいいよね!って思いませんか?
でも、SFを大きくすると、通信時間が長くなるぶん、送信中の周波数の安定性が重要になる という罠があります。
LoRaは非常に狭帯域な変調方式のため、送信時間が長くなるほど、送信中に発振周波数のズレが問題になりやすくなります。
これは、デバイス内部の発振器(XTALなど)が温度変化などの影響を受けて、わずかに周波数が変動してしまうためです。
たとえば、送信中は回路がわずかに発熱することで温度が変化し、その影響で発振周波数がごく微妙にズレてしまうことがあります。
結果として、受信側がそのズレを追従できず、受信エラーになることもあるのです。
また、特に屋外や高低差のある環境では、送受信機の温度差によってこのズレが大きくなることも。
そのため、本格運用では温度補償付き水晶(TCXO)を使うことが推奨されます。
LRA1のようなXTAL(ふつうの水晶振動子)を使った一般的なLoRaモジュールで、SFを高く設定するときはそのことを考慮してくださいね。
温度差の大きな環境間の通信では、「SFを大きくしたら受信できなくなった~」ってなるかもです。
SFを大きくしたときは送信時間が長くなりやすいため、送信データを少なくするなどの工夫が必要になる場合もあります。
🎀 遠くに飛ばしたくてSFを上げたのに、届かないなんて…うっかりハマる落とし穴なんだよ~。
ちょっと神経質になっちゃうのがSFの高いときなんだよね〜💦
📒 TCXO(Temperature Compensated Crystal Oscillator)は、温度による周波数のズレを自動で補正してくれる高精度な発振器です。
🎀 “ティーシーエックスオー”ってちょっと言いにくいけど、温度変化に強い水晶発振器のことなんだよ〜📡
技適の制限
LoRaの送信時間には工学的な問題だけでなく、法的な制限があります。
特定小電力無線機器には、技適の規定により次のような制限があります。
- 1回の送信時間:最大4秒以内(Low帯:CH 24〜38)、または400ms以内(High帯:CH 39〜61)
- 送信休止時間:送信後、一定の休止時間を設ける必要があります(例:50ms以上)
- 1時間あたりの送信時間の総和:360秒(6分)以下
送信時間だけでなく、1時間あたりの送信時間総和が360秒以下の規定があるため、送信休止時間を送信時間の10倍となるように制御されます。つまり、送信時間が長くなると、それに比例して休止時間も長く設定され、結果として1時間あたりの送信時間の総和が360秒を超えないように制御されています。
LRA1など、技適の認証を受けているデバイスでは、この既定を超えた送信はできないようになっています。
そのため、設定やデータ量によってこれを超えてしまうと、send
コマンドがエラーになります。
「もっと長いデータを一気に送りたい」と思うかもしれませんが、日本国内では法令により送信時間に厳しい上限が定められており、LoRaでファイル転送のような用途を実現するのは現実的ではありません。
🎀 “たくさん送りたい”って気持ち、わかるけど…ここは法律の壁があるんだよ〜っ📡💦
📌 こんな設定だと、パケットのヘッダーすら送れません!
>ch=40:sf=12 OK >send "" *invalid_data_length OK >
これは、設定されたCH(High帯)とSF=12の組み合わせでは、空の文字列ですら送信時間が規定を超えてしまい、送信がブロックされている例です。
🎀 データが少ないのにエラーで送れない!?ってときは、チャネル帯とSFの組み合わせを見直してみてね〜!
📐 実際の送信時間は以下の計算ツールで確認できます:
🎀 Highチャネル帯の制限はけっこうシビアだから、送信前に計算しておくと安心だよ〜!
まとめ
- LRA1はP2Pモードで、すぐにLoRa送信テストができる!
- ターミナルソフトと2台のLRA1-EBがあればOK
send
/recv
だけで通信できるから、初心者にもやさしい♪- 状況に合わせてパラメーターを変えよう。
🎀 ここまで読んだあなたは、もうLoRa通信体験者だよ〜📡✨
— ここまでで、LRA1の超基本的な操作はマスター!
次回は…?
次回は、BASICスクリプトを使って送受信を自動化する方法を紹介します!
LRA1の真骨頂とも言える「かんたん組み込みプログラム」の世界へ🐬✨
🎀 1行書くだけで送信できるBASIC…楽しみにしててね〜!
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 お問い合わせ、大歓迎だよ〜
伝えにくいことでも、ろらたんがそっと聞いておくから安心してねっ🐬」
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬
コメント