LoRa評価ボードのLRA1-EBにはキャラクターディスプレイと環境センサー(BME280)が搭載されており、これだけでLoRa通信を使った実験を行うことができます。この記事ではこれらの機能を使うための手順を紹介します
評価ボードについて
現在、評価ボードにはSMAアンテナ版とワイヤアンテナ版の2種類があります。電波感度を評価したいならSMAアンテナ版、ケースに入れて動かしたいならワイヤアンテナ版を選ぶのが良いでしょう
LoRa/FSKモジュール評価ボード SMAアンテナ(2台セット) LRA1-EB-SMA-2|電子部品・半導体通販のマルツ
https://www.marutsu.co.jp/pc/i/1633699/
LoRa/FSKモジュール評価ボード ワイヤアンテナ(2台セット) LRA1-EB-M1-2|電子部品・半導体通販のマルツ
https://www.marutsu.co.jp/pc/i/1633698/
本記事ではSMAアンテナ版を使っていますが、ワイヤアンテナ版でも電波感度以外の違いは無いと思います1
1. 準備
PCと評価ボードをUSBケーブルで繋ぎ、TeraTermなどのターミナルを開きます。詳しい手順は 前の記事 をご覧ください
2. 環境センサー(BME280)
評価ボードに搭載されている環境センサー(BME280)から温度、湿度、気圧を取得してみます
センサーからの取得には BMEコマンド
を使います。引数に格納する変数を 温度
湿度
気圧
の順に入れます
>BME T,H,P
OK
格納した値を PRINTコマンド
で表示します
>PRINT T
250
OK
>PRINT H
531
OK
>PRINT P
10017
OK
Tには温度、Hには湿度、Pには気圧が入っていますが、そのまま表示すると10倍された値になってます。1/10にして正しい値に直したいのですが、LRA1のBASICは小数の値を扱うことが出来ない為、10で割った整数部分と余りの部分で分けて文字列化します
文字列の連結には ;(セミコロン)
を使います。BASICの文法では変数の型は気にしませんので、PRINTコマンドの引数にそのまま計算式を入れても良いです
>PRINT T/10;".";T%10
25.0
OK
>PRINT H/10;".";H%10
53.1
OK
>PRINT P/10;".";P%10
1001.7
OK
これで温度、湿度、気圧が正しく表示できました
3. キャラクターディスプレイ(LCD)を使う
評価ボード上にあるLCDには 8文字×2行
の半角英数字が表示できます2
3-1. コマンド
LCDに使用するコマンドは次の3つを押さえておきましょう
コマンド | 動作 |
---|---|
LCLR | LCDの表示を消去します |
LPRINT [Message] | 引数に指定された文字をLCDに表示します |
LPOS [表示位置] | LCDの表示位置を指定します |
表示位置について
LCDの表示位置と LPOSコマンド
に指定する値は次のように対応しています
1文字目 | 2文字目 | 3文字目 | 4文字目 | 5文字目 | 6文字目 | 7文字目 | 8文字目 | |
---|---|---|---|---|---|---|---|---|
1行目 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2行目 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
初期状態または、 LCLRコマンド
でクリアした時は 0
になります
まず LPRINT "1234"
と入れるとLCDには左から "1234" が表示されます。その後 LPRINT "5678"
と入れると、 "12345678" となり、最初に入れた "1234" に続けて "5678" が表示されます
これは、LCDモジュール内部で保持している表示位置が文字を表示する度に +1
でズレていくためです。表示位置がLCDに表示できる範囲を超えてしまうと LPRINTコマンド
を実行しても表示されなくなります。一度表示した文字を置き換えるには LCLRコマンド
で消去するか、 LPOSコマンド
で書き換えたい文字の位置を指定して上書きします
3-2. 実行例
LCDの1行目(上)に "Hello!" 2行目(下) "LoRa" を表示させてみます
>LCLR
OK
>LPOS=1
OK
>LPRINT "Hello!"
OK
>LPOS=66
OK
>LPRINT "LoRa"
OK
4. 活用編
評価ボードの使い方が分かったところで、少し実践的なことをやってみます
4-1. 環境センサーで取得した値をLCDに表示する
販売元のWeb の写真のように評価ボードのLCDに温度湿度、気圧を表示させてみます。以下のプログラムを入力して実行します。コピーペーストでまとめてターミナルに貼ってしまうと文字が抜けてエラーになる事があるので、面倒でも一行ずつ渡してください
BME T,H,P
LCLR:LPRINT T/10;".";T%10;" ";H/10;"%"
LPOS=64:LPRINT P/10;".";P%10;"hP"
- 表示できる文字が不足するため、湿度は妥協して整数部分だけ表示しています
- LCDの2行目は表示位置を64にセットして気圧を表示しています
プログラムで繰り返しセンサー値を取得する
BASICプログラムを入れて繰り返し取得するようにしてみます。簡単な補足は入れていますが、不安な方は この前のLチカする記事 で復習するといいでしょう
プログラムを入れる時は EDIT 1
を入れて編集モードに切り替えて、 NEWコマンド
を実行して前に入力したプログラムや変数を消去しましょう
>EDIT 1
OK
>>NEW
OK
>>
プロンプトが >
から >>
に変われば準備は完了です
繰り返し取得してLCDに表示する
先ほど実行したプログラムを DO-LOOP文
で繰り返し実行するようにします。以下のプログラムを入力します
10 DO
20 BME T,H,P
30 LCLR:LPRINT T/10;".";T%10;" ";H/10;"%"
40 LPOS=64:LPRINT P/10;".";P%10;"hP"
50 DELAY 1000
60 LOOP
- ループの間に
DELAY 1000
を挟み、1秒待ってから次の取得を行ってます
入れ終えたら RUNコマンド
でプログラムを実行します。1秒間隔で値が更新されていきます
4-2. 受信のrssi(信号強度)をLCDに表示する
準備
予め、受信側のLoRa変数 OWN
を決めておき、その値を送信側のLoRa変数 DST
に設定しておきます。ここでは例として 6
をセットしていますが、0~65534 の間で任意に選ぶことができます
>OWN=6
>DST=6
受信側を待ち受け状態にして、送信側で任意のメッセージを送ります
>RECV
>SEND "hello"
受信側でメッセージが受信出来たら Ctrl + C
で待ち受けを止めてください
LCDにrssiの値を表示する
受信側で RSSI変数
の値を確認すると、最後に受信したデータのrssiが入っています。これを LPRINTコマンド
に与えればLCDにrssiの数値が表示されます
>LCLR:LPRINT "Rssi";RSSI
プログラムで繰り返しデータを受信してrssiをLCDに表示する
BASICプログラムを入れて繰り返し受信するようにしてみます。プログラムを入れる時は EDIT 1
を入れて編集モードに切り替えて、 NEWコマンド
を実行して前に入力したプログラムや変数を消去しましょう
>EDIT 1
OK
>>NEW
OK
>>
プロンプトが >
から >>
に変われば準備は完了です
受信側のプログラム
以下のプログラムを入力します
10 DO
20 RECV 6000
30 IF STAT=10 THEN
40 LCLR:LPRINT "Rssi";RSSI
50 ELSE
60 LCLR:LPRINT "ERROR ";STAT
70 ENDIF
80 LOOP
- 単に
RECVコマンド
を実行してしまうと、常に待ち受け状態となってブロックしてしまうために、タイムアウト時間(ここでは6秒)を指定しています - データを受信できたか、受信できなくてタイムアウトしたかは、30行目の
STAT変数
で分かります - 正常に受信できた時は
STAT=10
となり、LCDにrssiの数値を表示します- rssiには -137~0 の値が入り、電波が強いほど 0 に近づきます
- 受信できなかった時はLCDに "ERROR" とSTAT変数の値を表示します (timeoutは8です)
送信側のプログラム
送信側には以下のプログラムを入力します
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
基本的には SENDコマンド
と DELAYの待ち
をLOOPに入れれば良いですが、せっかくなのでLCDにカウントダウンを表示するように工夫しました
- 20行目から50行目が
FOR文のループ
で1秒ごとに 4 から 1 まで変数S
の値を減らして、LCDに表示しています -
変数S
が1になるとFOR文のループ
を抜けます- 60行目でLCDに "Sending" を表示
- 70行目で任意のデータ "1234567890" を送信
- データ送信後、1秒待ち(80行目)、
DO-LOOP構文のループ
で最初に戻って繰り返します
実行
プログラムを入力できたら、それぞれの評価ボードで RUNコマンド
を実行します
>>RUN
およそ5秒間隔でrssiの数値が更新されていきます。この状態で評価ボードを持ち歩けばLoRa通信の感度を確認できると思います