Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@suzutsuki0220

LoRa評価ボード(LRA1-EB)を使いこなす

LoRa評価ボードのLRA1-EBにはキャラクターディスプレイと環境センサー(BME280)が搭載されており、これだけでLoRa通信を使った実験を行うことができます。この記事ではこれらの機能を使うための手順を紹介します

LRA1-EB.jpg

評価ボードについて

現在、評価ボードには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コマンドの引数にそのまま計算式を入れても良いです

10で割った値で表示する
>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" を表示させてみます

LCD表示例
>LCLR
OK
>LPOS=1
OK
>LPRINT "Hello!"
OK
>LPOS=66
OK
>LPRINT "LoRa"
OK

4. 活用編

評価ボードの使い方が分かったところで、少し実践的なことをやってみます

4-1. 環境センサーで取得した値をLCDに表示する

完成イメージはこちらです
fig-env-sens.jpg

販売元のWeb の写真のように評価ボードのLCDに温度湿度、気圧を表示させてみます。以下のプログラムを入力して実行します。コピーペーストでまとめてターミナルに貼ってしまうと文字が抜けてエラーになる事があるので、面倒でも一行ずつ渡してください

評価ボードの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文 で繰り返し実行するようにします。以下のプログラムを入力します

繰り返しセンサー値を取得してLCDに表示する
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に表示する

完成イメージはこちらです
fig-recv-rssi.jpg

準備

予め、受信側のLoRa変数 OWN を決めておき、その値を送信側のLoRa変数 DST に設定しておきます。ここでは例として 6 をセットしていますが、0~65534 の間で任意に選ぶことができます

例)受信側にOWNを6に設定
>OWN=6
例)送信側でDSTを設定
>DST=6

受信側を待ち受け状態にして、送信側で任意のメッセージを送ります

受信側で待ち受け状態にする
>RECV
送信側で任意のメッセージを送る
>SEND "hello"

受信側でメッセージが受信出来たら Ctrl + C で待ち受けを止めてください

LCDにrssiの値を表示する

受信側で RSSI変数 の値を確認すると、最後に受信したデータのrssiが入っています。これを LPRINTコマンド に与えればLCDにrssiの数値が表示されます

受信側でrssiの数値をLCDに表示する
>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通信の感度を確認できると思います

P_20200520_000842.jpg


  1. SMAアンテナ版とワイヤアンテナ版の写真を見比べると、ワイヤアンテナ版にはSMAのコネクタが省略されているようです。購入後にアンテナを付け替えることは出来ないと考えたほうがいいでしょう 

  2. ターミナルの文字コードをSJISにすれば半角カナも使えますが、全角文字、日本語は表示できません。 

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?