lora — ovladač LoRa modemu¶
Modul lora poskytuje ovladač pro LoRa modem Murata CMWX1ZZABZ na Arduino Portenta Vision Shield. Vystavuje vysokoúrovňovou třídu Lora, která obaluje sadu AT příkazů používaných firmwarem modemu (včetně Arduino MKRWAN firmwaru ARD-078), takže se aplikace může připojit k síti LoRaWAN a odesílat/přijímat pakety.
Příklad:
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)
Konstanty¶
Aktivační režimy¶
Režimy RF výstupu¶
Pásma¶
Třídy zařízení¶
Výjimky¶
- exception lora.LoraError¶
Základní výjimka vyvolaná při jakékoli chybě vrácené modemem nebo ovladačem.
- exception lora.LoraErrorTimeout¶
Vyvolá se, když modem neodpoví v nastaveném časovém limitu (přijímací buffer je prázdný).
- exception lora.LoraErrorParam¶
Vyvolá se při odpovědi
+ERR_PARAM, když byl AT příkaz zadán s neplatným parametrem.
- exception lora.LoraErrorBusy¶
Vyvolá se při odpovědi
+ERR_BUSY, když je modem zaneprázdněn zpracováním předchozího příkazu.
- exception lora.LoraErrorOverflow¶
Vyvolá se při odpovědi
+ERR_PARAM_OVERFLOW, když parametr překročí maximální povolenou délku.
- exception lora.LoraErrorNoNetwork¶
Vyvolá se při odpovědi
+ERR_NO_NETWORK, když se modem nepřipojil k síti.
- exception lora.LoraErrorRX¶
Vyvolá se při odpovědi
+ERR_RX, když dojde k chybě při příjmu downlinku.
- exception lora.LoraErrorUnknown¶
Vyvolá se při odpovědi
+ERR_UNKNOWNnebo když modem hlásí nezdokumentovanou chybu.
Třídy¶
- 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)¶
Vytvoří nový ovladač modemu. Konstruktor inicializuje (nebo automaticky vytvoří) UART a piny pro reset/boot, provede hardwarový reset modulu, vykoná synchronizaci autobaud, restartuje modul, dotáže se na verzi jeho firmwaru a nakonfiguruje požadované regionální pásmo
band.- Parametry:
uart – Předkonfigurovaná instance
machine.UARTpoužitá pro komunikaci s modemem. Pokud jeNone, ovladač otevřeUART(8, 19200)s rámcováním 8N2 (výchozí nastavení pro Portenta Vision Shield).rst_pin –
machine.Pinovládající reset linku modemu. Pokud jeNone,"PC6"je nakonfigurován jako push-pull výstup.boot_pin –
machine.Pinovládající boot-select linku modemu. Pokud jeNone,"PG7"je nakonfigurován jako push-pull výstup stažený k nízké úrovni.band – Regionální pásmo, které se má nakonfigurovat. Jedna z konstant
BAND_*.poll_ms – Interval v milisekundách mezi automatickými prázdnými uplinky spouštěnými metodou
poll()pro udržení otevřeného downlink okna.debug – Když je
True, veškerý UART provoz je vypisován pomocíprint().
- LoraErrors: dict¶
Mapování z řetězců chybových odpovědí modemu (např.
"+ERR_BUSY") na odpovídající třídu výjimky. Interně používáno metodouhandle_error().
- init_modem() None¶
Líně inicializuje
self.uart,self.rst_pinaself.boot_pinna jejich výchozí hodnoty pro Portenta Vision Shield, pokud ještě nejsou nastaveny. Volá se z konstruktoru; běžně se uživatelským kódem nevolá.
- debug_print(data: str) None¶
Vypíše
data, pokud byl při konstrukci povolendebug, jinak neudělá nic.
- is_arduino_firmware() bool¶
Vrátí
True, pokud modem běží na Arduino MKRWAN firmwaruARD-078(detekováno z uloženého řetězcefw_version).
- configure_band(band: int) bool¶
Nakonfiguruje regionální pásmo a na Arduino firmwaru s
BAND_EU868povolí ETSI omezovač pracovního cyklu. Při úspěchu vrátíTrue.- Parametry:
band – Jedna z konstant
BAND_*.
- set_baudrate(baudrate: int) None¶
Změní přenosovou rychlost (baud rate) UART modemu (
AT+UART).- Parametry:
baudrate – Nová přenosová rychlost (baud rate) v bitech za sekundu.
- set_autobaud(timeout: int = 10000) bool¶
Odesílá prázdné příkazy
AT, dokud modem neodpoví+OKnebo dokud neuplynetimeoutmilisekund. VrátíTrue, pokud synchronizace uspěla.- Parametry:
timeout – Maximální čas strávený pokusy, v milisekundách.
- get_fw_version() str¶
Dotáže se na řetězec zařízení modemu (
AT+DEV?) a verzi firmwaru (AT+VER?) a vrátí je jako jediný řetězec oddělený mezerou.
- restart() None¶
Znovu synchronizuje přenosovou rychlost (baud rate), restartuje modem, znovu načte verzi firmwaru a znovu aplikuje nakonfigurované regionální pásmo. Při selhání vyvolá
LoraError.
- set_rf_power(mode: int, power: int) None¶
Nakonfiguruje stupeň RF výstupu modemu (
AT+RFPOWER).- Parametry:
mode – Jedna z
RF_MODE_RFO,RF_MODE_PABOOST.power – Index výstupního výkonu, v jednotkách specifických pro firmware.
- set_port(port: int) None¶
Nakonfiguruje LoRaWAN aplikační port (1..223) používaný následnými voláními
send_data().- Parametry:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
Povolí nebo zakáže sync word veřejné sítě.
- Parametry:
enable –
Truepro veřejný LoRaWAN sync word,Falsepro soukromý.
- format(hexMode: bool) None¶
Vybere datový formát používaný přes UART pro bajty payloadu.
- Parametry:
hexMode –
Truepro formát payloadu ASCII-hex,Falsepro surovou binární podobu.
- set_datarate(dr: int) None¶
Nastaví index LoRaWAN datové rychlosti (
AT+DR).- Parametry:
dr – Index datové rychlosti specifický pro region.
- set_adr(adr: bool) None¶
Povolí nebo zakáže Adaptive Data Rate.
- Parametry:
adr –
Truepro povolení ADR,Falsepro jeho zakázání.
- set_rx2dr(dr: int) None¶
Nastaví index datové rychlosti používaný pro přijímací okno RX2.
- Parametry:
dr – Index datové rychlosti specifický pro region.
- set_rx2freq(freq: int) None¶
Nastaví frekvenci používanou pro přijímací okno RX2.
- Parametry:
freq – Frekvence v Hz.
- set_fcu(fcu: int) None¶
Nastaví čítač uplink rámců (
AT+FCU).- Parametry:
fcu – Nová hodnota čítače uplink rámců.
- set_fcd(fcd: int) None¶
Nastaví čítač downlink rámců (
AT+FCD).- Parametry:
fcd – Nová hodnota čítače downlink rámců.
- join(timeout_ms: int) bool¶
Vydá
AT+JOINa počká na událost join-accept. VrátíTrue, pokud modem nahlásí+EVENT=1,1(připojení uspělo) běhemtimeout_ms.- Parametry:
timeout_ms – Maximální čas čekání na
+ACKi následnou událost připojení, v milisekundách.
- get_max_size() int¶
Vrátí maximální velikost LoRaWAN payloadu v bajtech pro aktuální datovou rychlost. Na Arduino firmwaru je pevně nastavena na
64.
- poll() None¶
Pokud od posledního volání uplynulo více než
poll_msmilisekund, odešle prázdný potvrzený uplink pro vyprázdnění čekajících downlinků. Určeno k častému volání z hlavní smyčky aplikace.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Odešle LoRaWAN uplink. Vyvolá
LoraError, pokud jebuffvětší nežget_max_size().- Parametry:
buff – Bajty payloadu k odeslání.
confirmed – Když je
True, odešle potvrzený uplink (+CTX) a počká na+ACKod síťového serveru. Když jeFalse, odešle nepotvrzený uplink (+UTX).
- Vrací:
True, pokud modem přijal paket (a u potvrzených uplinků jej síť potvrdila), jinakFalse.
- receive_data(timeout: int = 1000) dict | None¶
Počká na downlink. Vrátí
None, pokud běhemtimeoutmilisekund nebyla přijata žádná událost+RECV, jinak slovník{"port": str, "data": str}obsahující FPort a bajty payloadu.- Parametry:
timeout – Maximální čas čekání, v milisekundách.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Nízkoúrovňové čtení UART. Čte znaky z modemu, dokud není shodný oddělovač, dokud není načteno
max_bytesznaků nebo dokud neuplynetimeoutmilisekund, poté vrátí nahromaděný řetězec s odstraněným koncovým\r.- Parametry:
delimiter – Buď jeden znak, který se má shodovat na konci bufferu, víceznakový řetězec, který se má shodovat s celým oříznutým bufferem, nebo seznam takových řetězců.
max_bytes – Pokud je nastaveno, vrátí se, jakmile je načteno přesně tolik bajtů.
timeout – Celkový časový limit čtení, v milisekundách.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Přepne modem do režimu OTAA, naprogramuje dodané klíče a EUI a poté se pokusí připojit k síti. Vrátí
True, pokud připojení uspělo.- Parametry:
appEui – 64bitový Application/Join EUI jako hexadecimální řetězec.
appKey – 128bitový Application Key jako hexadecimální řetězec.
devEui – Volitelný 64bitový Device EUI jako hexadecimální řetězec. Pokud je
None, použije se tovární naprogramovaný Device EUI.timeout – Časový limit připojení, v milisekundách.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Přepne modem do režimu ABP, naprogramuje dodané adresy a klíče a poté se pokusí připojit. Vrátí výsledek
get_join_status().- Parametry:
nwkId – Identifikátor sítě (aktuálně firmwarem ignorováno).
devAddr – 32bitová adresa zařízení (Device Address) jako hexadecimální řetězec.
nwkSKey – 128bitový Network Session Key jako hexadecimální řetězec.
appSKey – 128bitový Application Session Key jako hexadecimální řetězec.
timeout – Časový limit připojení, v milisekundách.
- handle_error(command: str, data: str) None¶
Prozkoumá odpověď modemu a vyvolá odpovídající podtřídu
LoraError, pokud představuje chybu. U nechybových odpovědí neudělá nic.- Parametry:
command – AT příkaz (bez prefixu
AT), který vyprodukovaldata.data – Řetězec odpovědi vrácený modemem.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Sestaví AT příkaz z
cmdaargs, volitelně připojí surový payloaddata, odešle jej a vrátí odpověď modemu. U dotazovacích příkazů končících na?se vrací pouze hodnotová část (podřetězec za=).- Parametry:
cmd – Přípona AT příkazu (např.
"+JOIN","+DR="); prefix"AT"a koncový\rse přidávají automaticky.args – Další argumenty zřetězené k
cmdpo převodu na řetězec.delimiter – Oddělovač předaný metodě
receive().data – Volitelné surové bajty zapsané ihned po AT příkazu (používané pro binární payloady uplinku).
timeout – Časový limit odpovědi, v milisekundách.
raise_error – Když je
True, chybové odpovědi se převedou na výjimkyLoraError; když jeFalse, surová odpověď se vrátí volajícímu.