LRA1で始めるLoRa通信｜P2P送受信をBASICでやってみた！


この記事では、**i2-electronics社のLoRaモジュール「LRA1」** を使って、P2P通信を体験します。

## 🛰 LRA1は“インタラクティブに操作できるLoRaモジュール”

一般的なLoRaモジュールは、**制御のために外付けのマイコン（MCU）を必要とする**ことがほとんどです。  
ArduinoやSTM32などからSPIやUARTで制御するのが一般的で、LoRaの送信や受信を行うにはプログラムの準備や開発環境の構築が必要になります。
または、特定のセンサー等に限定された動作をするようになっていて、若干のパラメーターの設定しかできませんます。

それに対してLRA1は、**モジュール自身にBASICインタプリタが内蔵されており、ターミナルから直接コマンドを打つだけで動作**します。

> ✅ 外付けMCU不要  
> ✅ Arduinoも不要  
> ✅ いきなり `send` できる
> ✅ その場でプログラムを書いて実行できる

これがLRA1の最大の特徴です。

外部マイコンを使わずに **ターミナルから直接LoRa通信を実行できる** モジュールです。

Tera Termなどを使うだけで、特別な開発環境なしで、
コマンドを入力すると、即座に実行結果が返ってくる **インタラクティブな操作が可能** です。
さらに、**BASIC言語によるプログラミングも可能** です。

> 💬 BASIC言語ってあのBASIC？──そう、**あのBASICです。**
> ただし、**Visual Basicではなく、昔ながらの「行番号あり・1文字変数」のアレ**です。

---

## 🙋‍♂️「いまさらBASIC？」って思った人へ

正直、そう思いますよね。でもこのBASIC、ただのノスタルジーではないんです。

LRA1に搭載されているBASICは、**小容量マイコンでもサクサク動く軽量インタプリタ**。
GUIもライブラリも不要、**わずかなRAMとFlashだけでLoRa通信・LCD表示・センサー制御**ができるように設計されています。

* 💡 ターミナルから直接打てる
* 💡 1行で完結する構文
* 💡 インタプリタだから即実行・即反応
* 💡 外部MCU不要＝ハード設計も簡単

つまりBASICは、**「制約がある環境で最大限に動かす」ことに特化したミニマルな言語**なんです。

> 🚀 だから、メモリが少ないマイコンにはBASICがちょうどいい。
> LoRaの実験もPoCも、スクリプト1行から始められます。

---

## 🎯 この記事でやること

今回は、LRA1を2台使って、**P2PモードでLoRaの送受信を手動で行う**ところまでを紹介します。

* BASICの構文（`for`, `if`, `do-loop`など）はまだ使いません（次回！）
* とにかく「通信が飛ぶ」という体験を手軽に得ることが目的です
* `own` / `dst` / `gid` / `sf` などの基本設定方法も解説します

---

## 🔌 開発環境

* 評価ボード：LRA1-EB（USB搭載評価用ボード）
* 接続：USB（UART）
* ターミナル：Tera Term（115200bps）
* 使用モード：P2P（出荷時デフォルト）

OSやターミナルソフトの種類は問いません。USBシリアルで接続できればOKです。

![lra1_eb_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079959/170da660-2753-47c5-9167-1c1965f0f750.png)
i2-electronics社のLRA1評価ボード(LRA1-EB)
ボードの左側にあるモジュールがLoRaモジュールのLRA1です。
この評価ボードには、USB-UART、LDO、LCD、BME280 などが搭載されています。

---

## ▶️ LRA1の起動と送信

LRA1-EBを接続し、Tera Termを起動した状態でリセットボタンを押すと、次のような表示が現れます：

```text
i2-ele LRA1
Ver 1.26.a+
OK
>
```

この `>` プロンプトが、インタラクティブにコマンドを受け付ける状態です。
試しに、以下のように打ち込んでみましょう。

```text
>? "Hello world"
Hello world
OK
```
よくある `print文` で、"Hello!" を表示してみました。 
BASICでは `?` と `print` は同等です。`?` の代わりに `print` としてもOKです。
なお、LRAのBASICでは、コマンドの大文字と小文字は区別されません。

次に、この `?` を `send` に代えて打ってみましょう。

```text
>send "Hello world"
OK
```

赤LEDが一瞬点灯し、LoRaパケットが送信されます。

---

## 📡 受信側を準備する

別のLRA1でも同様に接続し、以下の設定を行います：

```text
>own=0:dst=1
OK
>recv
```
※LRA1のBASICでは、複数の命令を :（コロン）で1行にまとめることができます。


受信側が `recv` で待機している状態で、送信側から `send` を実行すると…

```text
@-42,1,Hello world
```

受信成功です！ `-42` はRSSI、`1` は送信元ID、`Hello world` はデータ本体です。

---

## 🔐 通信には「gid（グループID）」も必要

通信をするには、`own`（自分）と`dst`（宛先）だけでなく、**`gid`（グループID）** も一致している必要があります。

```text
>gid=123
```

同じチャンネル・同じパラメータでも、`gid`が違えば通信は通りません。
プロジェクトごとに分けて使える便利な仕組みです。

---

## ⚙ 通信パラメータを変えてみる

通信の安定性や距離・速度は、以下のパラメータで調整可能です：

```text
>ch=26:sf=12:bw=7:cr=1:pwr=13
```

| パラメータ | 意味         | 設定範囲 | 通信特性への影響・備考  |
| ----- | ---------------- | -------| ------------------------------------------ |
| `ch`  | チャネル番号      | 24〜61 | 使用する周波数帯を決定   |
| `sf`  | Spreading Factor | 7〜12  | 数字が大きいほど到達距離↑、速度↓、送信時間↑ |
| `bw`  | Bandwidth        | 6〜9   | 数字が大きいほど通信速度↑、耐干渉性↓        |
| `cr`  | Coding Rate      | 1〜4   | 数字が大きいほど誤り訂正能力↑、送信時間↑    |
| `pwr` | 送信出力（dBm）   | -4〜13 | 数字が大きいほど電波強度↑、消費電力↑        |

※pwr以外は、受信側も同じ値にしておかないと通信できません。
パラメーターを変化させて、到達距離や送信時間が変わるのを実感できると思います。

---

## 💾 設定を保存する

起動のたびに設定を入力し直すのは大変なので、以下で保存しておきましょう：

```text
>ssave
```

* `ssave`：現在の設定を保存
* `sload`：保存済み設定を再読込
* `default`：出荷時設定に戻す

---

## 🚨 技適制限に注意（送信時間）

LoRa通信には日本国内での技適制限があります：

| 帯域      | 制限時間        |
| ------- | ----------- |
| CH24〜38 | 最大 4 秒/送信   |
| CH39〜61 | 最大 400ms/送信 |
| 1時間あたり  | 合計360秒まで    |

たとえば以下は制限超過で送信できません：

```text
>ch=40:sf=12
>send ""
*invalid_data_length
```

📐 詳細な送信時間は以下の計算ツールが便利です：

🔗 [LoRa送信時間計算ツール（i2-electronics）](https://i2-ele.co.jp/LoRa%E9%80%81%E4%BF%A1%E6%99%82%E9%96%93_103.html)

---

## ✅ まとめ

| 項目       | 内容                               |
| -------- | -------------------------------- |
| 通信方法     | `send` / `recv` を直接入力            |
| 設定保存     | `ssave` で永続化                     |
| 必須ID     | `own`, `dst`, `gid` を設定          |
| パラメータ    | `ch`, `sf`, `bw`, `cr` を送受信で揃える |
| インタラクティブ | ターミナルで即コマンド → 即応答                |

LRA1を使えば、**マイコンもIDEも不要で、LoRa通信の世界にすぐ入れます。**

---

## 🧭 LRA1 BASICはここまでできる

今回は「P2Pでの手動送受信」だけ紹介しましたが、LRA1のBASICは**以下のような制御もサポート**しています：

* 📍 GPS（UART接続）
* 📡 I2C（センサー・周辺デバイス）
* 💡 PWM（LEDやアクチュエータ）
* 📈 ADC（アナログセンサー）
* 🔄 SPI（高速デバイス制御）

しかもこれらを **すべてBASICのコマンドで制御可能**。
もちろん、行番号を使った複雑なプログラムにも対応してます。

---

## 🔜 予告

次回以降はいよいよ本領発揮！（の予定）

`for` や `if`、`do-loop` などを使って──
**たった1行で「センサー読み取り → LoRa送信 → LCD表示」まで全部やる** BASICスクリプトを紹介します。

> 🚀 “Hello world” より速く、LoRa通信できる時代が来ました。

>🎀「“LoRa通信って難しそう…”って思ってた人も、BASICで1行から始められるならワクワクしない？  
>　　次は、センサーもLoRaもLCDも、ぜーんぶ1行でまとめちゃうよっ✨」
---

## 🐬 しゃちらぼ（Shachi-lab）について
このQiitaアカウントは、LoRaやマイコン、LPWAなどを中心に発信している  
「しゃちらぼ（https://shachi-lab.com）」が投稿しています。

組み込み系やIoTネタを、ゆるく・でも本気でお届け中📡  
たまに「シャチラボ」って呼ばれますが、どっちでもOKです✌️

> 🎀「ブログには、ろらたんも時々登場してるよ〜！よかったらのぞいてみてね🐬」

## 🔗 関連リンク

* [しゃちらぼブログ Vol.006 該当記事](https://blog.shachi-lab.com/006_lra1_p2p_test)  
（本記事の元ネタ。Qiita向けに再構成しています）
* [GitHub - Shachi-lab](https://github.com/shachi-lab)
* [info@shachi-lab.com](mailto:info@shachi-lab.com)