LoRaはIoT向けのLPWA(Low Power Wide Area:低消費電力広域)の無線通信の1つとして知られています。免許が不要で個人でも自由に使えて、通信事業者を使わずに数kmまでの通信を可能とする特徴はWi-Fiには無い新しい使い道が見えてくるのではないかと思います。
今回はLoRa通信のモジュールとして株式会社アイ・ツー 1 より販売2されているLRA1 を使ってみました。このモジュールは技適認定を取得しておりますので、日本国内で問題なく使用できます
この記事ではLRA1の簡単な使い方を紹介した後、最初のLoRa通信として2つのモジュール間で文字列の送受信を行うまでをやってみようと思います
モジュールのドキュメントなどは、http://www.i2-ele.co.jp/LoRa.html からダウンロードできます。参考までに主要なドキュメントのリンクを張っておきます
名前 | 説明 |
---|---|
ハードウェアマニュアル | モジュールの各種データが記載されています、電子部品の所謂スペックシート的な内容です |
ソフトウェアリファレンスマニュアル | ターミナルで実行するコマンドの詳しい説明です |
UART/BASICプログラムチュートリアル | ターミナルのつなぎ方とプログラムモードで動作するサンプルコードが含まれています |
LCD付き評価ボードマニュアル | 評価ボードのドキュメントです |
その他、最新のファームウェアやアップデートツール、3Dデータなどは上記のWebから取得してください
LRA1の使い方
ここでは、LRA1の評価ボードを2台使ってPCのターミナルからモジュールのインタプリタを操作します。PCにはTera Termなどのターミナルソフトを予め用意しておいて下さい
接続
評価ボードにはmicroUSBの端子が付いており、ここからPCとつなぐことができます。ターミナルソフトを立ち上げシリアルポートで接続します
シリアルポートの設定
シリアルポートは次の通りに設定してください
項目 | 値 |
---|---|
ボーレート | 115200bps |
データ | 8bit |
パリティ | none |
ストップビット | 1bit |
フロー制御 | none |
インタプリタの表示
PCにモジュールを繋いでターミナルを開くとプロンプトが表示されます
i2-ele LRA1
Ver 0.35.a
OK
>
文字が表示されなかったり、文字が化けた場合はシリアルポートの設定を見直してください
インタプリタの使い方
まず初めに、通信を行うための準備としてLoRa変数を設定します。設定内容や設定の保存の仕方を紹介します
LoRa変数
以下の表はLoRa通信に関係する設定値です。
変数名 | #? | R/W | 内容 | 初期値 |
---|---|---|---|---|
Modem | ● | R/W | モデム設定 (0:FSK/1:LoRa) | 1:LoRa |
Pwr | ● | R/W | 送信出力 (-4~13) | 13 |
Sf | ● | R/W | 拡散率 Spreading Factor (7~12) | 10 |
Bw | ● | R/W | 占有帯域幅 Bandwidth (6~9) [6:62.5kHz, 7:125kHz, 8:250kHz, 9:500kHz] | 7:125kHz |
Cr | ● | R/W | 冗長率 Cording Rate (1~4) | 1[4/5] |
Ch | ● | R/W | Channel (24~61) 下側バンド 24~38、上側バンド39~61 | 36 |
Frq | R | 周波数設定 (Hz 単位) | 923000000(Hz) | |
Gid | ● | R/W | グループ ID (0~65535) | 0 |
Own | ● | R/W | 自局 ID (0~65535) | 1 |
Dst | ● | R/W | 送信先 ID (0~65535) | 0 |
Aes | R/W | AES (128bit) 16 進数文字列(16byte) | 00000000000000000000000000000000 | |
Rssi | R | 最後に受信したフレームの RSSI 値 | 0 | |
Stat | R/W | 送受信状態、エラーコード [8:Timeout, 9:CRC-Error, 10:正常に受信した] | 0 | |
Ctrl | ● | R/W | コントロール(下記のビットの論理和を設定する) | $0000 |
-
#?
は#? コマンド
(後述します)で表示される変数を示します (Ver 0.35.a で確認) -
R/W
は読み書きの可能を示します。読込みのみできる変数はR
です - 詳しい説明はLRA1のソフトウェアリファレンスマニュアルをご覧ください
設定値の範囲について
- 範囲外の設定をしたり、書き込みできない変数に値を入れようとすると
Parameter error
が返ります
通信パラメータ(BW/CR/SF)について
- 帯域幅を広げると通信速度が上がります
- 冗長率を上げるとエラーに強くなります
- 拡散率を上げることでノイズに耐性が上がり、遠くにも電波が届くようになる半面スループットが低下します
チャンネルバンドについて
- 下側バンド(24~38) は多くのデータを短時間で送る用途向けです
- 送信時間4秒以下
- 休止時間50ms以上
- キャリアセンス受信時間5ms以上
- 上側バンド(39~61) は少ないデータを低消費電力で送る用途向けです
- 送信時間0.4s以下
- 休止時間 送信時間の10倍以上
- キャリアセンス受信時間128μs以上
- 通信速度の違いはハードウェアマニュアルをご参照ください
LoRa変数の設定・保存・確認
設定値の変更は 変数名 = 値
で行います
>Own = 5
変更した後は SSAVE
コマンドで保存します
>SSAVE
OK
保存をしないと、電源を切った時に変更が失われるのでご注意ください
保存した設定は電源を入れた時に自動的に読み込まれます
設定されたLoRa変数は #?
コマンドで確認できます
>#?
Sn=999999
Modem=1[LoRa]
Pwr=13(dBm)
Ch=36
Sf=10
Bw=7[125kHz]
Cr=1[4/5]
Gid=0
Own=1
Dst=0
Ctrl=$0000
Echo=1[On]
Auto=
OK
データ送受信
実際にデータを送ってみます。2台のモジュールをPCにつないでそれぞれターミナルを開いて、インタプリタの待ち受け状態にしておきます
OwnとDstの設定
通信の準備として、LoRa変数のOwnとDstを変更します。それ以外の変数は初期値のままで構いません
Own はモジュール自身に割り当てるIDでそれぞれのモジュールが異なる番号になるように設定します。ここでは、Ownを 5 と 6 に設定しています
' モジュールA
>Own = 5
' モジュールB
>Own = 6
Dst は通信の送り先を示します。ここではお互いのモジュールに割り当てたIDを指定してください
' モジュールA
>Dst = 6
' モジュールB
>Dst = 5
受信待ち受け
RECV
コマンドで受信データを待ち受けます
>RECV -1
データ送信側
SEND
コマンドでデータを送信します
>SEND "Hello"
受信待ち受けしたターミナルに送った文字が表示されます
>RECV -1
@-18,6,Hello
表示される文字は @RSSI(信号強度),送信側ID,受け取った文字列
です