lora — LoRa modem upravljački program¶
Modul lora pruža upravljački program za Murata CMWX1ZZABZ LoRa modem na Arduino Portenta Vision Shield. Izlaže visokorazinsku klasu Lora koja omata skup AT naredbi koje koristi firmware modema (uključujući Arduino MKRWAN ARD-078 firmware) tako da aplikacija može pristupiti LoRaWAN mreži te slati/primati pakete.
Primjer:
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)
Konstante¶
Načini aktivacije¶
Načini RF izlaza¶
Pojasevi¶
Klase uređaja¶
Iznimke¶
- exception lora.LoraError¶
Osnovna iznimka koja se podiže za bilo kakvu pogrešku koju vrati modem ili upravljački program.
- exception lora.LoraErrorTimeout¶
Podiže se kada modem ne odgovori unutar konfiguriranog vremena čekanja (međuspremnik za primanje je prazan).
- exception lora.LoraErrorParam¶
Podiže se kod
+ERR_PARAModgovora kada je AT naredba izdana s nevažećim parametrom.
- exception lora.LoraErrorBusy¶
Podiže se kod
+ERR_BUSYodgovora kada je modem zauzet obradom prethodne naredbe.
- exception lora.LoraErrorOverflow¶
Podiže se kod
+ERR_PARAM_OVERFLOWodgovora kada parametar premašuje najveću dopuštenu duljinu.
- exception lora.LoraErrorNoNetwork¶
Podiže se kod
+ERR_NO_NETWORKodgovora kada se modem nije pridružio mreži.
- exception lora.LoraErrorRX¶
Podiže se kod
+ERR_RXodgovora kada dođe do pogreške tijekom primanja silazne veze.
- exception lora.LoraErrorUnknown¶
Podiže se kod
+ERR_UNKNOWNodgovora ili kada modem prijavi nedokumentiranu pogrešku.
Klase¶
- 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)¶
Konstruira novi upravljački program modema. Konstruktor inicijalizira (ili automatski kreira) UART i pinove za reset/boot, izvodi hardverski reset modula, obavlja autobaud sinkronizaciju, ponovno pokreće modul, ispituje verziju njegovog firmwarea te konfigurira traženi regionalni
band.- Parametri:
uart – Unaprijed konfigurirana
machine.UARTinstanca koja se koristi za komunikaciju s modemom. Ako jeNone, upravljački program otvaraUART(8, 19200)s 8N2 okvirima (zadana postavka za Portenta Vision Shield).rst_pin –
machine.Pinkoji upravlja reset linijom modema. Ako jeNone,"PC6"se konfigurira kao push-pull izlaz.boot_pin –
machine.Pinkoji upravlja boot-select linijom modema. Ako jeNone,"PG7"se konfigurira kao push-pull izlaz povučen na nisko.band – Regionalni pojas koji se konfigurira. Jedna od
BAND_*konstanti.poll_ms – Interval u milisekundama između automatskih praznih uzlaznih veza koje pokreće
poll()kako bi prozor silazne veze ostao otvoren.debug – Kada je
True, sav UART promet se ispisuje putemprint().
- LoraErrors: dict¶
Mapiranje iz nizova odgovora pogreške modema (npr.
"+ERR_BUSY") na odgovarajuću klasu iznimke. Koristi se interno od stranehandle_error().
- init_modem() None¶
Lijeno inicijalizira
self.uart,self.rst_piniself.boot_pinna njihove zadane vrijednosti za Portenta Vision Shield ako još nisu postavljeni. Poziva se iz konstruktora; obično ga ne poziva korisnički kod.
- debug_print(data: str) None¶
Ispisuje
dataako jedebugbio omogućen u trenutku konstrukcije, inače ne čini ništa.
- is_arduino_firmware() bool¶
Vraća
Trueako modem koristi Arduino MKRWANARD-078firmware (otkriveno iz keširanogfw_versionniza).
- configure_band(band: int) bool¶
Konfigurira regionalni pojas i, na Arduino firmwareu s
BAND_EU868, omogućuje ETSI ograničivač radnog ciklusa. VraćaTrueu slučaju uspjeha.- Parametri:
band – Jedna od
BAND_*konstanti.
- set_baudrate(baudrate: int) None¶
Mijenja UART brzinu prijenosa modema (
AT+UART).- Parametri:
baudrate – Nova brzina prijenosa, u bitovima u sekundi.
- set_autobaud(timeout: int = 10000) bool¶
Šalje prazne
ATnaredbe dok modem ne odgovori s+OKili dok ne prođetimeoutmilisekundi. VraćaTrueako je sinkronizacija uspjela.- Parametri:
timeout – Najveće vrijeme provedeno u pokušaju, u milisekundama.
- get_fw_version() str¶
Ispituje niz uređaja modema (
AT+DEV?) i verziju firmwarea (AT+VER?) te ih vraća kao jedan niz razdvojen razmakom.
- restart() None¶
Ponovno sinkronizira brzinu prijenosa, ponovno pokreće modem, ponovno čita verziju firmwarea i ponovno primjenjuje konfigurirani regionalni pojas. Podiže
LoraErroru slučaju neuspjeha.
- set_rf_power(mode: int, power: int) None¶
Konfigurira RF izlazni stupanj modema (
AT+RFPOWER).- Parametri:
mode – Jedna od
RF_MODE_RFO,RF_MODE_PABOOST.power – Indeks izlazne snage, u jedinicama specifičnim za firmware.
- set_port(port: int) None¶
Konfigurira LoRaWAN aplikacijski port (1..223) koji koriste naknadni pozivi
send_data().- Parametri:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
Omogućuje ili onemogućuje sync word javne mreže.
- Parametri:
enable –
Trueza javni LoRaWAN sync word,Falseza privatni.
- format(hexMode: bool) None¶
Odabire format podataka koji se koristi preko UART-a za bajtove korisnog tereta.
- Parametri:
hexMode –
Trueza ASCII-hex format korisnog tereta,Falseza sirovi binarni.
- set_datarate(dr: int) None¶
Postavlja indeks LoRaWAN brzine podataka (
AT+DR).- Parametri:
dr – Indeks brzine podataka specifičan za regiju.
- set_adr(adr: bool) None¶
Omogućuje ili onemogućuje prilagodljivu brzinu podataka (Adaptive Data Rate).
- Parametri:
adr –
Trueza omogućavanje ADR-a,Falseza onemogućavanje.
- set_rx2dr(dr: int) None¶
Postavlja indeks brzine podataka koji se koristi za RX2 prozor primanja.
- Parametri:
dr – Indeks brzine podataka specifičan za regiju.
- set_rx2freq(freq: int) None¶
Postavlja frekvenciju koja se koristi za RX2 prozor primanja.
- Parametri:
freq – Frekvencija u Hz.
- set_fcu(fcu: int) None¶
Postavlja brojač uzlaznih sličica (
AT+FCU).- Parametri:
fcu – Nova vrijednost brojača uzlaznih sličica.
- set_fcd(fcd: int) None¶
Postavlja brojač silaznih sličica (
AT+FCD).- Parametri:
fcd – Nova vrijednost brojača silaznih sličica.
- join(timeout_ms: int) bool¶
Izdaje
AT+JOINi čeka na događaj prihvaćanja pridruživanja. VraćaTrueako modem prijavi+EVENT=1,1(pridruživanje uspjelo) unutartimeout_ms.- Parametri:
timeout_ms – Najveće vrijeme čekanja za oba
+ACKi naknadni događaj pridruživanja, u milisekundama.
- get_max_size() int¶
Vraća najveću veličinu LoRaWAN korisnog tereta, u bajtovima, za trenutnu brzinu podataka. Na Arduino firmwareu to je fiksno
64.
- poll() None¶
Ako je od posljednjeg poziva prošlo više od
poll_msmilisekundi, šalje praznu potvrđenu uzlaznu vezu kako bi se ispraznile silazne veze koje čekaju. Namijenjeno za često pozivanje iz glavne petlje aplikacije.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Šalje LoRaWAN uzlaznu vezu. Podiže
LoraErrorako jebuffveći odget_max_size().- Parametri:
buff – Bajtovi korisnog tereta za slanje.
confirmed – Kada je
True, šalje potvrđenu uzlaznu vezu (+CTX) i čeka na+ACKmrežnog poslužitelja. Kada jeFalse, šalje nepotvrđenu uzlaznu vezu (+UTX).
- Vraća:
Trueako je modem prihvatio paket (i, za potvrđene uzlazne veze, mreža ga je potvrdila),Falseinače.
- receive_data(timeout: int = 1000) dict | None¶
Čeka na silaznu vezu. Vraća
Noneako nijedan+RECVdogađaj nije primljen unutartimeoutmilisekundi, inače rječnik{"port": str, "data": str}koji sadrži FPort i bajtove korisnog tereta.- Parametri:
timeout – Najveće vrijeme čekanja, u milisekundama.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Niskorazinsko UART čitanje. Čita znakove s modema dok se ne podudari razdjelnik, dok se ne pročita
max_bytesznakova, ili dok ne prođetimeoutmilisekundi, zatim vraća akumulirani niz s uklonjenim svim završnim\r.- Parametri:
delimiter – Ili jedan znak za podudaranje na kraju međuspremnika, niz s više znakova za podudaranje s cijelim obrezanim međuspremnikom, ili popis takvih nizova.
max_bytes – Ako je postavljeno, vraća se čim se pročita točno toliko bajtova.
timeout – Ukupno vrijeme čekanja čitanja, u milisekundama.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Prebacuje modem u OTAA način, programira priložene ključeve i EUI-jeve, zatim pokušava pristupiti mreži. Vraća
Trueako je pridruživanje uspjelo.- Parametri:
appEui – 64-bitni Application/Join EUI kao heksadecimalni niz.
appKey – 128-bitni Application Key kao heksadecimalni niz.
devEui – Opcionalni 64-bitni Device EUI kao heksadecimalni niz. Ako je
None, koristi se tvornički programirani Device EUI.timeout – Vrijeme čekanja pridruživanja, u milisekundama.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Prebacuje modem u ABP način, programira priložene adrese i ključeve, zatim pokušava pristupiti. Vraća rezultat
get_join_status().- Parametri:
nwkId – Identifikator mreže (trenutno ga firmware ignorira).
devAddr – 32-bitna adresa uređaja kao heksadecimalni niz.
nwkSKey – 128-bitni Network Session Key kao heksadecimalni niz.
appSKey – 128-bitni Application Session Key kao heksadecimalni niz.
timeout – Vrijeme čekanja pridruživanja, u milisekundama.
- handle_error(command: str, data: str) None¶
Pregledava odgovor modema i podiže odgovarajuću
LoraErrorpodklasu ako predstavlja pogrešku. Ne čini ništa za odgovore koji nisu pogreške.- Parametri:
command – AT naredba (bez
ATprefiksa) koja je proizveladata.data – Niz odgovora koji vraća modem.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Gradi AT naredbu iz
cmdiargs, opcionalno dodaje sirovidatakorisni teret, šalje je i vraća odgovor modema. Za upitne naredbe koje završavaju s?, vraća se samo dio s vrijednošću (podniz nakon=).- Parametri:
cmd – Sufiks AT naredbe (npr.
"+JOIN","+DR=");"AT"prefiks i završni\rdodaju se automatski.args – Dodatni argumenti spojeni na
cmdnakon pretvorbe u niz.delimiter – Razdjelnik proslijeđen na
receive().data – Opcionalni sirovi bajtovi zapisani neposredno nakon AT naredbe (koriste se za binarne korisne terete uzlazne veze).
timeout – Vrijeme čekanja odgovora, u milisekundama.
raise_error – Kada je
True, odgovori s pogreškom pretvaraju se uLoraErroriznimke; kada jeFalse, sirovi odgovor se vraća pozivatelju.