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

lora.MODE_ABP: int

Activation By Personalization-läge.

lora.MODE_OTAA: int

Over-The-Air Activation-läge.

RF-utgångslägen

lora.RF_MODE_RFO: int

Använd modemets RFO-utgång (lågeffekt).

lora.RF_MODE_PABOOST: int

Använd modemets PA_BOOST-utgång (högeffekt).

Band

lora.BAND_AS923: int

AS923 (Asien 923 MHz) regionalt band.

lora.BAND_AU915: int

AU915 (Australien 915 MHz) regionalt band.

lora.BAND_EU868: int

EU868 (Europa 868 MHz) regionalt band.

lora.BAND_KR920: int

KR920 (Korea 920 MHz) regionalt band.

lora.BAND_IN865: int

IN865 (Indien 865 MHz) regionalt band.

lora.BAND_US915: int

US915 (USA 915 MHz) regionalt band.

lora.BAND_US915_HYBRID: int

US915 hybrid (delband) regional plan.

Enhetsklasser

lora.CLASS_A: str

LoRaWAN-slutenhet klass A.

lora.CLASS_B: str

LoRaWAN-slutenhet klass B.

lora.CLASS_C: str

LoRaWAN-slutenhet klass C.

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. Om None öppnar drivrutinen UART(8, 19200) med 8N2-ramning (Portenta Vision Shields standard).

  • rst_pinmachine.Pin som styr modemets reset-linje. Om None konfigureras "PC6" som en push-pull-utgång.

  • boot_pinmachine.Pin som styr modemets boot-select-linje. Om None konfigureras "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 True skrivs all UART-trafik ut via print().

LoraErrors: dict

Mappning från modemets felsvarssträngar (t.ex. "+ERR_BUSY") till motsvarande undantagsklass. Används internt av handle_error().

init_modem() None

Initiera self.uart, self.rst_pin och self.boot_pin lä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 data om debug var aktiverat vid konstruktionstillfället, gör annars ingenting.

is_arduino_firmware() bool

Returnerar True om modemet kör Arduino MKRWAN ARD-078-firmware (detekteras från den cachade fw_version-strängen).

configure_class(_class: str) None

Konfigurera LoRaWAN-enhetsklassen.

Parametrar:

_class – En av CLASS_A, CLASS_B, CLASS_C.

configure_band(band: int) bool

Konfigurera det regionala bandet och, på Arduino-firmware med BAND_EU868, aktivera ETSI:s arbetscykelbegränsare. Returnerar True vid 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 +OK eller tills timeout millisekunder har förflutit. Returnerar True om 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.

get_device_eui() str

Returnerar modemets 64-bitars Device EUI som en hexsträng.

factory_default() None

Återställ fabriksinställningarna via AT+FACNEW.

restart() None

Synkronisera om baudhastigheten, starta om modemet, läs om firmwareversionen och tillämpa det konfigurerade regionala bandet på nytt. Genererar LoraError vid fel.

set_rf_power(mode: int, power: int) None

Konfigurera modemets RF-utgångssteg (AT+RFPOWER).

Parametrar:
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:

enableTrue för det publika LoRaWAN-synkordet, False för det privata.

sleep(enable: bool) None

Försätt modemet i lågeffektsviloläge (True) eller väck det (False).

format(hexMode: bool) None

Välj det dataformat som används över UART:en för nyttolastbyte.

Parametrar:

hexModeTrue för ASCII-hex-nyttolastformat, False för rådata binärt.

set_datarate(dr: int) None

Ställ in LoRaWAN-datahastighetsindexet (AT+DR).

Parametrar:

dr – Regionsspecifikt datahastighetsindex.

get_datarate() int

Returnerar det aktuella LoRaWAN-datahastighetsindexet.

set_adr(adr: bool) None

Aktivera eller inaktivera Adaptive Data Rate.

Parametrar:

adrTrue för att aktivera ADR, False för att inaktivera det.

get_adr() int

Returnerar den aktuella ADR-inställningen (1 om aktiverad, 0 annars).

get_devaddr() str

Returnerar den aktuella 32-bitars DevAddr som en hexsträng.

get_nwk_skey() str

Returnerar den aktuella Network Session Key som en hexsträng.

get_appskey() str

Returnerar den aktuella Application Session Key som en hexsträng.

get_rx2dr() int

Returnerar det datahastighetsindex som används för RX2-mottagningsfönstret.

set_rx2dr(dr: int) None

Ställ in det datahastighetsindex som används för RX2-mottagningsfönstret.

Parametrar:

dr – Regionsspecifikt datahastighetsindex.

get_ex2freq() int

Returnerar frekvensen, i Hz, som används för RX2-mottagningsfönstret.

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.

get_fcu() int

Returnerar den aktuella 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.

get_fcd() int

Returnerar den aktuella nedlänksramräknaren.

change_mode(mode: int) None

Växla aktiveringsläge.

Parametrar:

mode – En av MODE_ABP, MODE_OTAA.

join(timeout_ms: int) bool

Utfärda ett AT+JOIN och vänta på join-accept-händelsen. Returnerar True om modemet rapporterar +EVENT=1,1 (join lyckades) inom timeout_ms.

Parametrar:

timeout_ms – Maximal tid att vänta på både +ACK och den efterföljande join-händelsen, i millisekunder.

get_join_status() bool

Returnerar True om modemet för närvarande är anslutet till ett nätverk.

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_ms millisekunder 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 LoraError om buff är större än get_max_size().

Parametrar:
  • buff – Nyttolastbyte att sända.

  • confirmed – När True skickas en bekräftad upplänk (+CTX) och en +ACK från nätverksservern inväntas. När False skickas en obekräftad upplänk (+UTX).

Returer:

True om modemet accepterade paketet (och, för bekräftade upplänkar, nätverket bekräftade det), False annars.

receive_data(timeout: int = 1000) dict | None

Vänta på en nedlänk. Returnerar None om ingen +RECV-händelse togs emot inom timeout millisekunder, 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_bytes tecken har lästs, eller timeout millisekunder har förflutit, och returnerar sedan den ackumulerade strängen med eventuellt avslutande \r borttaget.

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 True om 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 None anvä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 producerade data.

  • 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 cmd och args, 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 \r läggs till automatiskt.

  • args – Ytterligare argument som sammanfogas med cmd efter 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 True konverteras felsvar till LoraError-undantag; när False returneras det råa svaret till anroparen.