lora --- LoRa モデムドライバ¶
lora モジュールは、Arduino Portenta Vision Shield に搭載された Murata CMWX1ZZABZ LoRa モデム用のドライバを提供します。モデムのファームウェア(Arduino MKRWAN ARD-078 ファームウェアを含む)が使用する AT コマンドセットをラップする高レベルの Lora クラスを公開しており、アプリケーションが LoRaWAN ネットワークに参加してパケットを送受信できるようにします。
例:
import lora
modem = lora.Lora(band=lora.BAND_EU868, debug=True)
print("Device EUI:", modem.get_device_eui())
if modem.join_OTAA("0000000000000000", "00000000000000000000000000000000"):
modem.send_data(b"hello", confirmed=True)
定数¶
アクティベーションモード¶
RF 出力モード¶
バンド¶
デバイスクラス¶
例外¶
- exception lora.LoraError¶
モデムまたはドライバが返すあらゆるエラーに対して発生する基底例外。
- exception lora.LoraErrorTimeout¶
設定されたタイムアウト内にモデムが応答しない場合(受信バッファが空の場合)に発生します。
- exception lora.LoraErrorParam¶
無効なパラメータを指定して AT コマンドを発行したときの
+ERR_PARAM応答で発生します。
- exception lora.LoraErrorBusy¶
直前のコマンドを処理中でモデムがビジー状態のときの
+ERR_BUSY応答で発生します。
- exception lora.LoraErrorOverflow¶
パラメータが許容される最大長を超えたときの
+ERR_PARAM_OVERFLOW応答で発生します。
- exception lora.LoraErrorNoNetwork¶
モデムがネットワークに参加していないときの
+ERR_NO_NETWORK応答で発生します。
- exception lora.LoraErrorRX¶
ダウンリンクの受信中にエラーが発生したときの
+ERR_RX応答で発生します。
- exception lora.LoraErrorUnknown¶
+ERR_UNKNOWN応答が返された場合、またはモデムが文書化されていないエラーを報告した場合に発生します。
クラス¶
- class lora.Lora(uart: machine.UART | None = None, rst_pin: machine.Pin | None = None, boot_pin: machine.Pin | None = None, band: int = BAND_EU868, poll_ms: int = 300000, debug: bool = False)¶
新しいモデムドライバを構築します。コンストラクタは UART およびリセット/ブートピンを初期化(または自動生成)し、モジュールをハードウェアリセットし、オートボー同期を実行し、モジュールを再起動し、ファームウェアバージョンを照会し、要求された地域
bandを設定します。- パラメータ:
uart -- モデムとの通信に使用する事前設定済みの
machine.UARTインスタンス。Noneの場合、ドライバは 8N2 フレーミングでUART(8, 19200)を開きます(Portenta Vision Shield のデフォルト)。rst_pin -- モデムのリセットラインを駆動する
machine.Pin。Noneの場合、"PC6"がプッシュプル出力として設定されます。boot_pin -- モデムのブートセレクトラインを駆動する
machine.Pin。Noneの場合、"PG7"がローにプルされたプッシュプル出力として設定されます。band -- 設定する地域バンド。
BAND_*定数のいずれか。poll_ms -- ダウンリンクウィンドウを開いたままにするために
poll()によってトリガーされる自動空アップリンクの間隔(ミリ秒単位)。debug --
Trueの場合、すべての UART トラフィックがprint()で出力されます。
- LoraErrors: dict¶
モデムのエラー応答文字列(例:
"+ERR_BUSY")から対応する例外クラスへのマッピング。handle_error()によって内部的に使用されます。
- init_modem() None¶
self.uart、self.rst_pin、self.boot_pinがまだ設定されていない場合、それらを Portenta Vision Shield のデフォルト値に遅延初期化します。コンストラクタから呼び出され、通常はユーザーコードから呼び出されません。
- is_arduino_firmware() bool¶
モデムが Arduino MKRWAN
ARD-078ファームウェアを実行している場合(キャッシュされたfw_version文字列から検出)にTrueを返します。
- configure_band(band: int) bool¶
地域バンドを設定し、
BAND_EU868を使用する Arduino ファームウェアでは ETSI デューティサイクルリミッタを有効にします。成功した場合はTrueを返します。- パラメータ:
band --
BAND_*定数のいずれか。
- set_baudrate(baudrate: int) None¶
モデムの UART ボーレートを変更します(
AT+UART)。- パラメータ:
baudrate -- 新しいボーレート(ビット毎秒単位)。
- set_autobaud(timeout: int = 10000) bool¶
モデムが
+OKで応答するか、timeoutミリ秒が経過するまで空のATコマンドを送信します。同期が成功した場合はTrueを返します。- パラメータ:
timeout -- 試行に費やす最大時間(ミリ秒単位)。
- restart() None¶
ボーレートを再同期し、モデムを再起動し、ファームウェアバージョンを再読み込みし、設定された地域バンドを再適用します。失敗した場合は
LoraErrorを発生させます。
- set_rf_power(mode: int, power: int) None¶
モデムの RF 出力段を設定します(
AT+RFPOWER)。- パラメータ:
mode --
RF_MODE_RFO、RF_MODE_PABOOSTのいずれか。power -- 出力電力インデックス(ファームウェア固有の単位)。
- set_port(port: int) None¶
後続の
send_data()呼び出しで使用する LoRaWAN アプリケーションポート(1~223)を設定します。- パラメータ:
port -- LoRaWAN FPort。
- set_public_network(enable: bool) None¶
パブリックネットワークの同期ワードを有効または無効にします。
- パラメータ:
enable -- パブリック LoRaWAN 同期ワードの場合は
True、プライベートの場合はFalse。
- format(hexMode: bool) None¶
ペイロードバイトに対して UART 上で使用するデータ形式を選択します。
- パラメータ:
hexMode -- ASCII 16 進ペイロード形式の場合は
True、生のバイナリの場合はFalse。
- set_adr(adr: bool) None¶
Adaptive Data Rate を有効または無効にします。
- パラメータ:
adr -- ADR を有効にする場合は
True、無効にする場合はFalse。
- join(timeout_ms: int) bool¶
AT+JOINを発行し、join-accept イベントを待ちます。モデムがtimeout_ms以内に+EVENT=1,1(参加成功)を報告した場合はTrueを返します。- パラメータ:
timeout_ms --
+ACKとそれに続く join イベントの両方を待つ最大時間(ミリ秒単位)。
- poll() None¶
前回の呼び出しから
poll_msミリ秒以上経過している場合、保留中のダウンリンクをフラッシュするために空の確認付きアップリンクを送信します。アプリケーションのメインループから頻繁に呼び出すことを想定しています。
- send_data(buff: bytes, confirmed: bool = True) bool¶
LoRaWAN アップリンクを送信します。
buffがget_max_size()より大きい場合はLoraErrorを発生させます。- パラメータ:
buff -- 送信するペイロードバイト。
confirmed --
Trueの場合、確認付きアップリンク(+CTX)を送信し、ネットワークサーバの+ACKを待ちます。Falseの場合、確認なしアップリンク(+UTX)を送信します。
- 戻り値:
モデムがパケットを受け入れた場合(確認付きアップリンクの場合はネットワークが確認応答した場合)は
True、そうでない場合はFalse。
- receive_data(timeout: int = 1000) dict | None¶
ダウンリンクを待ちます。
timeoutミリ秒以内に+RECVイベントが受信されなかった場合はNoneを返し、そうでない場合は FPort とペイロードバイトを含む辞書{"port": str, "data": str}を返します。- パラメータ:
timeout -- 待つ最大時間(ミリ秒単位)。
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
低レベルの UART 読み取り。区切り文字が一致するか、
max_bytes文字が読み取られるか、timeoutミリ秒が経過するまでモデムから文字を読み取り、末尾の\rを取り除いた累積文字列を返します。- パラメータ:
delimiter -- バッファの末尾で一致させる単一の文字、トリミング後のバッファ全体に対して一致させる複数文字の文字列、またはそのような文字列のリストのいずれか。
max_bytes -- 設定すると、ちょうどこのバイト数が読み取られた時点ですぐに返します。
timeout -- 全体の読み取りタイムアウト(ミリ秒単位)。
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
モデムを OTAA モードに切り替え、指定されたキーと EUI をプログラムし、ネットワークへの参加を試みます。参加が成功した場合は
Trueを返します。- パラメータ:
appEui -- 64 ビット Application/Join EUI(16 進文字列)。
appKey -- 128 ビット Application Key(16 進文字列)。
devEui -- オプションの 64 ビット Device EUI(16 進文字列)。
Noneの場合、工場出荷時にプログラムされた Device EUI が使用されます。timeout -- 参加のタイムアウト(ミリ秒単位)。
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
モデムを ABP モードに切り替え、指定されたアドレスとキーをプログラムし、参加を試みます。
get_join_status()の結果を返します。- パラメータ:
nwkId -- ネットワーク識別子(現在はファームウェアによって無視されます)。
devAddr -- 32 ビット Device Address(16 進文字列)。
nwkSKey -- 128 ビット Network Session Key(16 進文字列)。
appSKey -- 128 ビット Application Session Key(16 進文字列)。
timeout -- 参加のタイムアウト(ミリ秒単位)。
- handle_error(command: str, data: str) None¶
モデムの応答を検査し、それがエラーを表す場合は対応する
LoraErrorサブクラスを発生させます。エラー以外の応答に対しては何もしません。- パラメータ:
command --
dataを生成した AT コマンド(ATプレフィックスなし)。data -- モデムが返した応答文字列。
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
cmdとargsから AT コマンドを構築し、オプションで生のdataペイロードを付加して送信し、モデムの応答を返します。?で終わるクエリコマンドの場合、値の部分(=以降の部分文字列)のみが返されます。- パラメータ:
cmd -- AT コマンドサフィックス(例:
"+JOIN"、"+DR=")。"AT"プレフィックスと末尾の\rは自動的に付加されます。args -- 文字列変換後に
cmdに連結される追加の引数。delimiter --
receive()に転送される区切り文字。data -- AT コマンドの直後に書き込まれるオプションの生バイト(バイナリアップリンクペイロードに使用)。
timeout -- 応答のタイムアウト(ミリ秒単位)。
raise_error --
Trueの場合、エラー応答はLoraError例外に変換されます。Falseの場合、生の応答が呼び出し元に返されます。