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).

Returnerar:

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.