lora — sterownik modemu LoRa¶
Moduł lora udostępnia sterownik modemu LoRa Murata CMWX1ZZABZ na płytce Arduino Portenta Vision Shield. Udostępnia on wysokopoziomową klasę Lora, która opakowuje zestaw poleceń AT używany przez oprogramowanie układowe modemu (w tym oprogramowanie układowe Arduino MKRWAN ARD-078), dzięki czemu aplikacja może dołączyć do sieci LoRaWAN oraz wysyłać i odbierać pakiety.
Przykład:
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)
Stałe¶
Tryby aktywacji¶
Tryby wyjścia RF¶
Pasma¶
Klasy urządzeń¶
Wyjątki¶
- exception lora.LoraError¶
Bazowy wyjątek zgłaszany dla dowolnego błędu zwróconego przez modem lub sterownik.
- exception lora.LoraErrorTimeout¶
Zgłaszany, gdy modem nie odpowie w skonfigurowanym czasie oczekiwania (bufor odbiorczy jest pusty).
- exception lora.LoraErrorParam¶
Zgłaszany przy odpowiedzi
+ERR_PARAM, gdy polecenie AT zostało wydane z nieprawidłowym parametrem.
- exception lora.LoraErrorBusy¶
Zgłaszany przy odpowiedzi
+ERR_BUSY, gdy modem jest zajęty przetwarzaniem poprzedniego polecenia.
- exception lora.LoraErrorOverflow¶
Zgłaszany przy odpowiedzi
+ERR_PARAM_OVERFLOW, gdy parametr przekracza maksymalną dozwoloną długość.
- exception lora.LoraErrorNoNetwork¶
Zgłaszany przy odpowiedzi
+ERR_NO_NETWORK, gdy modem nie dołączył do sieci.
- exception lora.LoraErrorRX¶
Zgłaszany przy odpowiedzi
+ERR_RX, gdy podczas odbierania pakietu downlink wystąpi błąd.
- exception lora.LoraErrorUnknown¶
Zgłaszany przy odpowiedzi
+ERR_UNKNOWNlub gdy modem zgłosi nieudokumentowany błąd.
Klasy¶
- 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)¶
Tworzy nowy sterownik modemu. Konstruktor inicjalizuje (lub automatycznie tworzy) UART oraz piny reset/boot, wykonuje sprzętowy reset modułu, przeprowadza synchronizację autobaud, ponownie uruchamia moduł, odpytuje wersję jego oprogramowania układowego i konfiguruje żądane pasmo regionalne
band.- Parametry:
uart – Wstępnie skonfigurowana instancja
machine.UARTużywana do komunikacji z modemem. JeśliNone, sterownik otwieraUART(8, 19200)z ramkowaniem 8N2 (domyślnym dla Portenta Vision Shield).rst_pin –
machine.Pinsterujący linią reset modemu. JeśliNone, jako wyjście push-pull konfigurowany jest"PC6".boot_pin –
machine.Pinsterujący linią boot-select modemu. JeśliNone, jako wyjście push-pull podciągnięte do stanu niskiego konfigurowany jest"PG7".band – Pasmo regionalne do skonfigurowania. Jedna ze stałych
BAND_*.poll_ms – Odstęp w milisekundach pomiędzy automatycznymi pustymi uplinkami wyzwalanymi przez
poll()w celu utrzymania otwartego okna downlink.debug – Gdy
True, cały ruch UART jest wypisywany za pomocąprint().
- LoraErrors: dict¶
Mapowanie z łańcuchów odpowiedzi błędów modemu (np.
"+ERR_BUSY") na odpowiadające im klasy wyjątków. Używane wewnętrznie przezhandle_error().
- init_modem() None¶
Leniwie inicjalizuje
self.uart,self.rst_piniself.boot_pindo ich wartości domyślnych dla Portenta Vision Shield, jeśli nie zostały jeszcze ustawione. Wywoływane z konstruktora; zwykle nie jest wywoływane przez kod użytkownika.
- debug_print(data: str) None¶
Wypisuje
data, jeśli przy tworzeniu obiektu włączonodebug, w przeciwnym razie nie robi nic.
- is_arduino_firmware() bool¶
Zwraca
True, jeśli modem działa na oprogramowaniu układowym Arduino MKRWANARD-078(wykryte na podstawie zbuforowanego łańcuchafw_version).
- configure_band(band: int) bool¶
Konfiguruje pasmo regionalne oraz, na oprogramowaniu układowym Arduino z
BAND_EU868, włącza ogranicznik cyklu pracy ETSI. ZwracaTruew przypadku powodzenia.- Parametry:
band – Jedna ze stałych
BAND_*.
- set_baudrate(baudrate: int) None¶
Zmienia szybkość transmisji (baud) UART modemu (
AT+UART).- Parametry:
baudrate – Nowa szybkość transmisji (baud), w bitach na sekundę.
- set_autobaud(timeout: int = 10000) bool¶
Wysyła puste polecenia
AT, aż modem odpowie+OKlub upłynietimeoutmilisekund. ZwracaTrue, jeśli synchronizacja się powiodła.- Parametry:
timeout – Maksymalny czas przeznaczony na próby, w milisekundach.
- get_fw_version() str¶
Odpytuje łańcuch urządzenia modemu (
AT+DEV?) oraz wersję oprogramowania układowego (AT+VER?) i zwraca je jako pojedynczy łańcuch rozdzielony spacjami.
- restart() None¶
Ponownie synchronizuje szybkość transmisji (baud), uruchamia ponownie modem, ponownie odczytuje wersję oprogramowania układowego i ponownie stosuje skonfigurowane pasmo regionalne. Zgłasza
LoraErrorw przypadku niepowodzenia.
- set_rf_power(mode: int, power: int) None¶
Konfiguruje stopień wyjściowy RF modemu (
AT+RFPOWER).- Parametry:
mode – Jedna z wartości
RF_MODE_RFO,RF_MODE_PABOOST.power – Indeks mocy wyjściowej, w jednostkach specyficznych dla oprogramowania układowego.
- set_port(port: int) None¶
Konfiguruje port aplikacji LoRaWAN (1..223) używany przez kolejne wywołania
send_data().- Parametry:
port – FPort LoRaWAN.
- set_public_network(enable: bool) None¶
Włącza lub wyłącza słowo synchronizacji sieci publicznej.
- Parametry:
enable –
Truedla publicznego słowa synchronizacji LoRaWAN,Falsedla prywatnego.
- sleep(enable: bool) None¶
Wprowadza modem w tryb uśpienia niskiej mocy (
True) lub wybudza go (False).
- format(hexMode: bool) None¶
Wybiera format danych używany przez UART dla bajtów ładunku.
- Parametry:
hexMode –
Truedla formatu ładunku ASCII-hex,Falsedla surowego formatu binarnego.
- set_datarate(dr: int) None¶
Ustawia indeks szybkości transmisji danych LoRaWAN (
AT+DR).- Parametry:
dr – Indeks szybkości transmisji danych specyficzny dla regionu.
- set_adr(adr: bool) None¶
Włącza lub wyłącza Adaptive Data Rate.
- Parametry:
adr –
Trueaby włączyć ADR,Falseaby je wyłączyć.
- set_rx2dr(dr: int) None¶
Ustawia indeks szybkości transmisji danych używany dla okna odbiorczego RX2.
- Parametry:
dr – Indeks szybkości transmisji danych specyficzny dla regionu.
- set_rx2freq(freq: int) None¶
Ustawia częstotliwość używaną dla okna odbiorczego RX2.
- Parametry:
freq – Częstotliwość w Hz.
- set_fcu(fcu: int) None¶
Ustawia licznik ramek uplink (
AT+FCU).- Parametry:
fcu – Nowa wartość licznika ramek uplink.
- set_fcd(fcd: int) None¶
Ustawia licznik ramek downlink (
AT+FCD).- Parametry:
fcd – Nowa wartość licznika ramek downlink.
- join(timeout_ms: int) bool¶
Wydaje polecenie
AT+JOINi czeka na zdarzenie join-accept. ZwracaTrue, jeśli modem zgłosi+EVENT=1,1(dołączenie powiodło się) w ciągutimeout_ms.- Parametry:
timeout_ms – Maksymalny czas oczekiwania zarówno na
+ACK, jak i na kolejne zdarzenie dołączenia, w milisekundach.
- get_max_size() int¶
Zwraca maksymalny rozmiar ładunku LoRaWAN, w bajtach, dla bieżącej szybkości transmisji danych. Na oprogramowaniu układowym Arduino jest on ustalony na
64.
- poll() None¶
Jeśli od ostatniego wywołania minęło więcej niż
poll_msmilisekund, wysyła pusty potwierdzony uplink, aby opróżnić oczekujące pakiety downlink. Przeznaczone do częstego wywoływania z głównej pętli aplikacji.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Wysyła uplink LoRaWAN. Zgłasza
LoraError, jeślibuffjest większy niżget_max_size().- Parametry:
buff – Bajty ładunku do wysłania.
confirmed – Gdy
True, wysyła potwierdzony uplink (+CTX) i czeka na+ACKz serwera sieci. GdyFalse, wysyła niepotwierdzony uplink (+UTX).
- Zwraca:
True, jeśli modem zaakceptował pakiet (a w przypadku potwierdzonych uplinków sieć go potwierdziła),Falsew przeciwnym razie.
- receive_data(timeout: int = 1000) dict | None¶
Czeka na pakiet downlink. Zwraca
None, jeśli w ciągutimeoutmilisekund nie odebrano zdarzenia+RECV, w przeciwnym razie słownik{"port": str, "data": str}zawierający FPort i bajty ładunku.- Parametry:
timeout – Maksymalny czas oczekiwania, w milisekundach.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Niskopoziomowy odczyt UART. Odczytuje znaki z modemu, aż zostanie dopasowany ogranicznik, odczytanych zostanie
max_bytesznaków lub upłynietimeoutmilisekund, a następnie zwraca zgromadzony łańcuch z usuniętym końcowym\r.- Parametry:
delimiter – Pojedynczy znak do dopasowania na końcu bufora, wieloznakowy łańcuch do dopasowania względem całego przyciętego bufora albo lista takich łańcuchów.
max_bytes – Jeśli ustawione, zwraca natychmiast po odczytaniu dokładnie tylu bajtów.
timeout – Całkowity limit czasu odczytu, w milisekundach.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Przełącza modem w tryb OTAA, programuje dostarczone klucze i EUI, a następnie próbuje dołączyć do sieci. Zwraca
True, jeśli dołączenie się powiodło.- Parametry:
appEui – 64-bitowy Application/Join EUI jako łańcuch szesnastkowy.
appKey – 128-bitowy Application Key jako łańcuch szesnastkowy.
devEui – Opcjonalny 64-bitowy Device EUI jako łańcuch szesnastkowy. Jeśli
None, używany jest fabrycznie zaprogramowany Device EUI.timeout – Limit czasu dołączenia, w milisekundach.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Przełącza modem w tryb ABP, programuje dostarczone adresy i klucze, a następnie próbuje dołączyć. Zwraca wynik
get_join_status().- Parametry:
nwkId – Identyfikator sieci (obecnie ignorowany przez oprogramowanie układowe).
devAddr – 32-bitowy Device Address jako łańcuch szesnastkowy.
nwkSKey – 128-bitowy Network Session Key jako łańcuch szesnastkowy.
appSKey – 128-bitowy Application Session Key jako łańcuch szesnastkowy.
timeout – Limit czasu dołączenia, w milisekundach.
- handle_error(command: str, data: str) None¶
Bada odpowiedź modemu i zgłasza pasującą podklasę
LoraError, jeśli reprezentuje ona błąd. Nie robi nic dla odpowiedzi niebędących błędami.- Parametry:
command – Polecenie AT (bez prefiksu
AT), które wygenerowałodata.data – Łańcuch odpowiedzi zwrócony przez modem.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Buduje polecenie AT z
cmdiargs, opcjonalnie dołącza surowy ładunekdata, wysyła je i zwraca odpowiedź modemu. W przypadku poleceń zapytań kończących się na?zwracana jest tylko część z wartością (podłańcuch po=).- Parametry:
cmd – Sufiks polecenia AT (np.
"+JOIN","+DR="); prefiks"AT"oraz końcowy\rsą dodawane automatycznie.args – Dodatkowe argumenty łączone z
cmdpo konwersji na łańcuch.delimiter – Ogranicznik przekazywany do
receive().data – Opcjonalne surowe bajty zapisywane bezpośrednio po poleceniu AT (używane dla binarnych ładunków uplink).
timeout – Limit czasu odpowiedzi, w milisekundach.
raise_error – Gdy
True, odpowiedzi błędów są konwertowane na wyjątkiLoraError; gdyFalse, surowa odpowiedź jest zwracana do wywołującego.