UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
LoRa

920MHz 帯無線モジュール

使用部品

E220 LoRa モジュール

  • ペアリングが必要ありません。
  • 秋月電子で購入でき安価 (2000 円程度)
  • モジュールとは UART で通信し、かつ受信完了を AUX ピンから確認できるため、UART でよく起こるバイト列のズレが起こりません。
  • バイト列を直接送信できます (文字列にする必要がない)
  • 受信間隔長め (8byte で 100ms 程度)

スケッチ例 / 受信側

#include <Udon.hpp>
.serial = Serial1,
.m0 = 2,
.m1 = 3,
.aux = 4,
.channel = 0
});
void setup()
{
lora.begin();
}
void loop()
{
if (const auto message = lora.getMessage()) // message: Udon::Optional<uint64_t>
{
Serial.println(*message);
}
else
{
Serial.println("receive timeout!");
}
delay(10);
}
E220 受信クラス
Definition E220Reader.hpp:22
void begin() noexcept
受信開始
Definition E220Reader.hpp:42

スケッチ例 / 送信側

#include <Udon.hpp>
.serial = Serial1,
.m0 = 2,
.m1 = 3,
.aux = 4,
.channel = 0
});
void setup()
{
lora.begin();
}
void loop()
{
lora.setMessage(millis());
delay(1);
}
E220 送信クラス
Definition E220Writer.hpp:20
void begin()
送信開始
Definition E220Writer.hpp:44

チャンネルの設定

begin 関数の引数でもチェンネルを指定できます。この時コンストラクタでチャンネルを指定する必要はありません。

#include <Udon.hpp>
.serial = Serial1,
.m0 = 2,
.m1 = 3,
.aux = 4,
// チャンネル番号を省略
});
void setup()
{
const uint8_t channel = 10;
lora.begin(channel);
}

その他設定値の変更

設定用構造体は以下のように定義されています。

デフォルトはユニキャスト通信(1 対 1)です。送信側のアドレスを 0xffff にすることでブロードキャスト通信(1 対多)になります。この時受信側アドレスは無視されます。

struct Config
{
HardwareSerial& serial; // シリアルポート
uint8_t m0; // M0 ピン
uint8_t m1; // M1 ピン
uint8_t aux; // AUX ピン
uint8_t channel = 0;
uint16_t address = 0x0102;
};

コンストラクタで設定した値は getConfigReference() メンバ関数を使用して変更可能です。変更は begin() メンバ関数を呼び出す前に行う必要があります。

#include <Udon.hpp>
.serial = Serial1,
.m0 = 2,
.m1 = 3,
.aux = 4,
// チャンネル番号を省略
});
void setup()
{
lora.begin();
}
Config & getConfigReference()
現在の設定を取得
Definition E220Base.hpp:52
uint8_t channel
チャンネル
Definition E220Base.hpp:26

受信強度

getRssi() メンバ関数を使用して電波強度を示す RSSI 値を取得できます。0 に近いほど電波強度が高いことを示します。値は通信できている場合のみ有効です。

void loop()
{
if (const auto m = lora.getMessage())
{
const int rssi = lora.getRssi();
}
}

metageek 社による指標 では RSSI 値と品質の対応は次のようになっています。

RSSI [dBm] 品質
-30 非常に強い
-67 とても強い
-70 強い
-80 弱い
-90 使えない

周波数

チャンネルを変更することで周波数帯の調整ができます。チャンネルから周波数は以下式で求められます。

$$ 周波数 = 920.8MHz + チャンネル番号×200kHz $$