SpresenseでPrivateLoRaの動作を試す

## はじめに

LPWA通信として名前が知られているLoRaについて仕様を調べてみました。
**SPRESENSE**用にCLEALINKのLoRa通信addonボード（CLEALINK DTH-SSLR）が販売されており、以前サンプルの動作確認を行ったことがあったので、それをネタに、**PrivateLoRa**の概要説明を添えて記事にしています。

## PrivateLoRa概要

**LoRa（Long Range）** は、米国のSEMTECH社によって、スペクトラム拡散の1種であるCSS（ChirpSpread Spectrum）をベースに開発された無線の変調方式の物理層の名称であり、LPWA（Low Power Wide Area）の1種です。低ビットレート（250～50Kbps）ですが、**長距離伝送（10km）** 、**低消費電力** が特徴であり、加えて**ライセンス（免許）不要** というのもお手軽に利用可能な通信規格になります。

周波数の割当ては国ごとに異なります。**LoRa Alliance** の規格AS923によって、日本では920～928MHzが割り当てられていますが、LoRa以外の通信規格も含む920MHz帯の実際の運用は、社団法人電波産業会（ARIB）の**STD-T108** により日本国内での電波利用が規制されています。

先に書いた通り、**LoRa**は、物理層の名称であり、OSI参照モデルでのデータリンク層（MAC）の規定によって、異なる２種類の**LoRaWAN**と**PrivateLoRa**に分けられます。
**LoRaWAN**は、**LoRaAlliance**が策定した標準規格で決められたプロトコルですが、**PrivateLoRa**は、各社が独自に仕様を決められるプロトコルのため、通信の最適化などカスタマイズが可能なものになっています。

## SPRESENSE LoRa Add-onボード（CLEALINK DTH-SSLR）

**PrivateLoRa** を手っ取り早く試す上で、以下のCLEALINKから出されているSPRESENSE用Add-onボードがあります。

https://dragon-torch.tech/cat-components/extension-boards/dth-sslr/

### ■ボード環境

動作環境として、senderとreceiverのLoRa通信環境を用意するためには、
Spresenseメインボード、アンテナ、コネクタケーブルを１セットにした、２セット分の環境を用意する必要があります。

購入先例（SWITCH SCIENCE）:
[ボード購入]("https://www.switch-science.com/products/8958")
[アンテナ]("https://www.switch-science.com/products/8676/")
[ケーブル]("https://www.switch-science.com/products/8959/")

### ■接続方法

メインボードの上側のUART2のピン側に接続します。LoRaボードは横にはみ出る形での接続になります。さらに、PrivateLoRaボードとアンテナをつなぐために、アンテナのSMAメスとコネクタ（ufl‐SMAオス）を接続します。

接続イメージ写真
![DTH-SSLR_half.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2340894/8c6a413c-4d66-f4d1-78bd-1959448e197c.jpeg)

## Softwareの準備

### ■ソフトウェア環境

先ほどのCLEALINKのサイトにて、ダウンロードでArduinoのsketchが落とせますので、手軽にPrivateLoRa通信のお試し環境を構築することができます。

**ライブラリ名**
* spresense_e220900t22s_jp_lib.zip

ダウンロードのファイルを解凍すると、READMEがありますので、一応目を通しておきます。以下の２種類のサンプルが含まれています。

**サンプル**
* E220-900T22S(JP)へのパラメータ初期設定
* LoRa送受信

:::note warn
READMEに、"spresense_e220900t22s_jp_lib.hの以下の「E220-900T22S(JP)へのピンアサイン」を回路に合わせて変更してください。"との説明がありますが、Spresenseメインボードとの接続ではそのままで良いです。
```c
// E220-900T22S(JP)へのピンアサイン
#define LoRa_ModeSettingPin_M0 PIN_D20
#define LoRa_ModeSettingPin_M1 PIN_D21
```
:::

### 手順
以下にArduinoIDEを利用した、ソフトウェアの実動作までの手順を示します。

１. ArduinoIDEにライブラリをインストールする
　"Sketch"->"Include library"から、ダウンロードしたzipファイルをincludeします。
 成功すると、外部ライブラリの中に**Spresense E220-900T22S(JP) LoRa lbrary**の表示が見られます。
２. example/lora_sendのスケッチ（**lora_send.ino**）をArduinoIDEで開き、ビルド&ロードを行います。
ロード後、チップへの初期設定が終了すると、"init ok"のメッセージが見られて、コンソールからの入力待ち状態になります。
```c
program start
switch to configuration mode
# Command Request
0xc0 0x00 0x08 0x00 0x00 0x70 0x21 0x00 0xc3 0x00 0x00 
# Command Response
0xc1 0x00 0x08 0x00 0x00 0x70 0x21 0x00 0xc3 0x00 0x00 
init ok
switch to normal mode
```
３. example/lora_recvのスケッチ（**lora_recv.ino**）をArduinoIDEで開きます。
こちらも、チップへの初期設定が終了すると、"init ok"のメッセージが見られて、
コンソールからの入力待ち状態になります。
```c
program start
switch to configuration mode
# Command Request
0xc0 0x00 0x08 0x00 0x00 0x70 0x21 0x00 0xc3 0x00 0x00 
# Command Response
0xc1 0x00 0x08 0x00 0x00 0x70 0x21 0x00 0xc3 0x00 0x00 
init ok
switch to normal mode
```
４. 送信側のボードのSerialConsoleにメッセージ **Merry Christmas 2024!** と入力します。

:::note info
メッセージ入力時は、Ardino のSerial MonitorでConsoleタイプを”Both NL＆CR”にして入力します。
:::

* 送信ボード側のConsole上の表示
```c
000000Merry Christmas 2024!
send succeeded.
```
５. 受信側のボードSerialConsole
送信ボードからメッセージ送信後、受信ボード側のConsole上にメッセージが表示されます。

* 受信ボード側のConsole上の表示
```c
recv data:
Merry Christmas 2024!
hex dump:
4d 65 72 72 79 20 43 68 72 69 73 74 6d 61 73 20 32 30 32 34 21 
RSSI: -13 dBm
```

このように、簡単に**PrivateLora通信**を利用したメッセージ送受信の確認が取れました。
ご参考までに。

# 参考

https://techweb.rohm.co.jp/trend/engineer/4604/

https://lora-alliance.org/about-lorawan/

https://www.arib.or.jp/kikaku/kikaku_tushin/desc/std-t108.html

https://qiita.com/ammo0613/items/d952154f1195b64dc29f