lora — LoRa-modemdrivrutin¶
Modulen lora tillhandahåller en drivrutin för Murata CMWX1ZZABZ LoRa-modemet på Arduino Portenta Vision Shield. Den exponerar en högnivåklass Lora som omsluter den AT-kommandouppsättning som modemets fasta programvara använder (inklusive Arduino MKRWAN ARD-078-firmware) så att ett program kan ansluta sig till ett LoRaWAN-nätverk och skicka/ta emot paket.
Exempel:
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)
Konstanter¶
Aktiveringslägen¶
RF-utgångslägen¶
Band¶
Enhetsklasser¶
Undantag¶
- exception lora.LoraError¶
Basundantag som genereras för alla fel som returneras av modemet eller drivrutinen.
- exception lora.LoraErrorTimeout¶
Genereras när modemet inte svarar inom den konfigurerade tidsgränsen (mottagningsbufferten är tom).
- exception lora.LoraErrorParam¶
Genereras vid ett
+ERR_PARAM-svar när ett AT-kommando gavs med en ogiltig parameter.
- exception lora.LoraErrorBusy¶
Genereras vid ett
+ERR_BUSY-svar när modemet är upptaget med att bearbeta ett tidigare kommando.
- exception lora.LoraErrorOverflow¶
Genereras vid ett
+ERR_PARAM_OVERFLOW-svar när en parameter överskrider den maximalt tillåtna längden.
- exception lora.LoraErrorNoNetwork¶
Genereras vid ett
+ERR_NO_NETWORK-svar när modemet inte har anslutit sig till ett nätverk.
- exception lora.LoraErrorRX¶
Genereras vid ett
+ERR_RX-svar när ett fel uppstår vid mottagning av en nedlänk.
- exception lora.LoraErrorUnknown¶
Genereras vid ett
+ERR_UNKNOWN-svar eller när modemet rapporterar ett odokumenterat fel.
Klasser¶
- 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)¶
Konstruera en ny modemdrivrutin. Konstruktorn initierar (eller skapar automatiskt) UART:en och reset-/boot-stiften, gör en maskinvaruåterställning av modulen, utför autobaud-synkronisering, startar om modulen, frågar efter dess firmwareversion och konfigurerar det begärda regionala
band.- Parametrar:
uart – Förkonfigurerad
machine.UART-instans som används för att kommunicera med modemet. OmNoneöppnar drivrutinenUART(8, 19200)med 8N2-ramning (Portenta Vision Shields standard).rst_pin –
machine.Pinsom styr modemets reset-linje. OmNonekonfigureras"PC6"som en push-pull-utgång.boot_pin –
machine.Pinsom styr modemets boot-select-linje. OmNonekonfigureras"PG7"som en push-pull-utgång som dras låg.band – Regionalt band att konfigurera. En av konstanterna
BAND_*.poll_ms – Intervall i millisekunder mellan automatiska tomma upplänkar som utlöses av
poll()för att hålla nedlänksfönstret öppet.debug – När
Trueskrivs all UART-trafik ut viaprint().
- LoraErrors: dict¶
Mappning från modemets felsvarssträngar (t.ex.
"+ERR_BUSY") till motsvarande undantagsklass. Används internt avhandle_error().
- init_modem() None¶
Initiera
self.uart,self.rst_pinochself.boot_pinlättviktigt till deras Portenta Vision Shield-standardvärden om de inte redan är inställda. Anropas från konstruktorn; anropas normalt inte av användarkod.
- debug_print(data: str) None¶
Skriv ut
dataomdebugvar aktiverat vid konstruktionstillfället, gör annars ingenting.
- is_arduino_firmware() bool¶
Returnerar
Trueom modemet kör Arduino MKRWANARD-078-firmware (detekteras från den cachadefw_version-strängen).
- configure_band(band: int) bool¶
Konfigurera det regionala bandet och, på Arduino-firmware med
BAND_EU868, aktivera ETSI:s arbetscykelbegränsare. ReturnerarTruevid framgång.- Parametrar:
band – En av konstanterna
BAND_*.
- set_baudrate(baudrate: int) None¶
Ändra modemets UART-baudhastighet (
AT+UART).- Parametrar:
baudrate – Ny baudhastighet, i bitar per sekund.
- set_autobaud(timeout: int = 10000) bool¶
Skicka tomma
AT-kommandon tills modemet svarar med+OKeller tillstimeoutmillisekunder har förflutit. ReturnerarTrueom synkroniseringen lyckades.- Parametrar:
timeout – Maximal tid att lägga på försöket, i millisekunder.
- get_fw_version() str¶
Fråga efter modemets enhetssträng (
AT+DEV?) och firmwareversion (AT+VER?) och returnera dem som en enda mellanslagsseparerad sträng.
- restart() None¶
Synkronisera om baudhastigheten, starta om modemet, läs om firmwareversionen och tillämpa det konfigurerade regionala bandet på nytt. Genererar
LoraErrorvid fel.
- set_rf_power(mode: int, power: int) None¶
Konfigurera modemets RF-utgångssteg (
AT+RFPOWER).- Parametrar:
mode – En av
RF_MODE_RFO,RF_MODE_PABOOST.power – Uteffektindex, i firmwarespecifika enheter.
- set_port(port: int) None¶
Konfigurera LoRaWAN-applikationsporten (1..223) som används av efterföljande
send_data()-anrop.- Parametrar:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
Aktivera eller inaktivera synkordet för det publika nätverket.
- Parametrar:
enable –
Trueför det publika LoRaWAN-synkordet,Falseför det privata.
- format(hexMode: bool) None¶
Välj det dataformat som används över UART:en för nyttolastbyte.
- Parametrar:
hexMode –
Trueför ASCII-hex-nyttolastformat,Falseför rådata binärt.
- set_datarate(dr: int) None¶
Ställ in LoRaWAN-datahastighetsindexet (
AT+DR).- Parametrar:
dr – Regionsspecifikt datahastighetsindex.
- set_adr(adr: bool) None¶
Aktivera eller inaktivera Adaptive Data Rate.
- Parametrar:
adr –
Trueför att aktivera ADR,Falseför att inaktivera det.
- set_rx2dr(dr: int) None¶
Ställ in det datahastighetsindex som används för RX2-mottagningsfönstret.
- Parametrar:
dr – Regionsspecifikt datahastighetsindex.
- set_rx2freq(freq: int) None¶
Ställ in frekvensen som används för RX2-mottagningsfönstret.
- Parametrar:
freq – Frekvens i Hz.
- set_fcu(fcu: int) None¶
Ställ in upplänksramräknaren (
AT+FCU).- Parametrar:
fcu – Nytt värde för upplänksramräknaren.
- set_fcd(fcd: int) None¶
Ställ in nedlänksramräknaren (
AT+FCD).- Parametrar:
fcd – Nytt värde för nedlänksramräknaren.
- join(timeout_ms: int) bool¶
Utfärda ett
AT+JOINoch vänta på join-accept-händelsen. ReturnerarTrueom modemet rapporterar+EVENT=1,1(join lyckades) inomtimeout_ms.- Parametrar:
timeout_ms – Maximal tid att vänta på både
+ACKoch den efterföljande join-händelsen, i millisekunder.
- get_max_size() int¶
Returnerar den maximala LoRaWAN-nyttolaststorleken, i byte, för den aktuella datahastigheten. På Arduino-firmware är denna fast på
64.
- poll() None¶
Om mer än
poll_msmillisekunder har förflutit sedan det senaste anropet, skicka en tom bekräftad upplänk för att tömma väntande nedlänkar. Avsedd att anropas ofta från programmets huvudslinga.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Sänd en LoRaWAN-upplänk. Genererar
LoraErrorombuffär större änget_max_size().- Parametrar:
buff – Nyttolastbyte att sända.
confirmed – När
Trueskickas en bekräftad upplänk (+CTX) och en+ACKfrån nätverksservern inväntas. NärFalseskickas en obekräftad upplänk (+UTX).
- Returer:
Trueom modemet accepterade paketet (och, för bekräftade upplänkar, nätverket bekräftade det),Falseannars.
- receive_data(timeout: int = 1000) dict | None¶
Vänta på en nedlänk. Returnerar
Noneom ingen+RECV-händelse togs emot inomtimeoutmillisekunder, annars en dict{"port": str, "data": str}som innehåller FPort och nyttolastbyte.- Parametrar:
timeout – Maximal tid att vänta, i millisekunder.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Lågnivå-UART-läsning. Läser tecken från modemet tills en avgränsare matchas,
max_bytestecken har lästs, ellertimeoutmillisekunder har förflutit, och returnerar sedan den ackumulerade strängen med eventuellt avslutande\rborttaget.- Parametrar:
delimiter – Antingen ett enskilt tecken att matcha i slutet av bufferten, en sträng med flera tecken att matcha mot hela den trimmade bufferten, eller en lista av sådana strängar.
max_bytes – Om angiven, returnera så snart exakt så här många byte har lästs.
timeout – Total lästidsgräns, i millisekunder.
- available() int¶
Returnerar antalet byte som för närvarande är tillgängliga i modemets UART-mottagningsbuffert.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Växla modemet till OTAA-läge, programmera de angivna nycklarna och EUI:erna, och försök sedan ansluta till nätverket. Returnerar
Trueom anslutningen lyckades.- Parametrar:
appEui – 64-bitars Application/Join EUI som en hexsträng.
appKey – 128-bitars Application Key som en hexsträng.
devEui – Valfri 64-bitars Device EUI som en hexsträng. Om
Noneanvänds den fabriksprogrammerade Device EUI:n.timeout – Anslutningstidsgräns, i millisekunder.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Växla modemet till ABP-läge, programmera de angivna adresserna och nycklarna, och försök sedan ansluta. Returnerar resultatet av
get_join_status().- Parametrar:
nwkId – Nätverksidentifierare (ignoreras för närvarande av firmwaren).
devAddr – 32-bitars Device Address som en hexsträng.
nwkSKey – 128-bitars Network Session Key som en hexsträng.
appSKey – 128-bitars Application Session Key som en hexsträng.
timeout – Anslutningstidsgräns, i millisekunder.
- handle_error(command: str, data: str) None¶
Inspektera ett modemsvar och generera den matchande
LoraError-underklassen om det representerar ett fel. Gör ingenting för svar som inte är fel.- Parametrar:
command – AT-kommandot (utan
AT-prefixet) som produceradedata.data – Svarssträngen som returnerades av modemet.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Bygg ett AT-kommando från
cmdochargs, lägg eventuellt till en rådata-nyttolast, sänd det och returnera modemets svar. För frågekommandon som slutar på?returneras endast värdedelen (delsträngen efter=).- Parametrar:
cmd – AT-kommandosuffix (t.ex.
"+JOIN","+DR=");"AT"-prefixet och avslutande\rläggs till automatiskt.args – Ytterligare argument som sammanfogas med
cmdefter strängkonvertering.delimiter – Avgränsare som vidarebefordras till
receive().data – Valfria råa byte som skrivs omedelbart efter AT-kommandot (används för binära upplänksnyttolaster).
timeout – Svarstidsgräns, i millisekunder.
raise_error – När
Truekonverteras felsvar tillLoraError-undantag; närFalsereturneras det råa svaret till anroparen.