lora — LoRa-modemdriver¶
De lora-module biedt een driver voor de Murata CMWX1ZZABZ LoRa-modem op het Arduino Portenta Vision Shield. Hij stelt een hoogniveau Lora-klasse beschikbaar die de AT-commandoset omsluit die door de modemfirmware wordt gebruikt (waaronder de Arduino MKRWAN ARD-078-firmware), zodat een applicatie zich kan aansluiten op een LoRaWAN-netwerk en pakketten kan verzenden/ontvangen.
Voorbeeld:
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)
Constanten¶
Activeringsmodi¶
RF-uitgangsmodi¶
Banden¶
Apparaatklassen¶
Uitzonderingen¶
- exception lora.LoraError¶
Basisuitzondering die wordt opgegooid voor elke fout die door de modem of de driver wordt teruggegeven.
- exception lora.LoraErrorTimeout¶
Opgegooid wanneer de modem niet reageert binnen de geconfigureerde timeout (de ontvangstbuffer is leeg).
- exception lora.LoraErrorParam¶
Opgegooid bij een
+ERR_PARAM-respons wanneer een AT-commando is uitgevoerd met een ongeldige parameter.
- exception lora.LoraErrorBusy¶
Opgegooid bij een
+ERR_BUSY-respons wanneer de modem bezig is met het verwerken van een vorig commando.
- exception lora.LoraErrorOverflow¶
Opgegooid bij een
+ERR_PARAM_OVERFLOW-respons wanneer een parameter de maximaal toegestane lengte overschrijdt.
- exception lora.LoraErrorNoNetwork¶
Opgegooid bij een
+ERR_NO_NETWORK-respons wanneer de modem zich niet bij een netwerk heeft aangesloten.
- exception lora.LoraErrorRX¶
Opgegooid bij een
+ERR_RX-respons wanneer er een fout optreedt tijdens het ontvangen van een downlink.
- exception lora.LoraErrorUnknown¶
Opgegooid bij een
+ERR_UNKNOWN-respons of wanneer de modem een ongedocumenteerde fout meldt.
Klassen¶
- 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)¶
Construeert een nieuwe modemdriver. De constructor initialiseert (of maakt automatisch aan) de UART en de reset-/boot-pinnen, voert een hardware-reset van de module uit, voert autobaud-synchronisatie uit, herstart de module, vraagt de firmwareversie op en configureert de gevraagde regionale
band.- Parameters:
uart – Vooraf geconfigureerde
machine.UART-instantie die wordt gebruikt om met de modem te communiceren. AlsNone, opent de driverUART(8, 19200)met 8N2-framing (de standaard van het Portenta Vision Shield).rst_pin –
machine.Pindie de resetlijn van de modem aanstuurt. AlsNone, wordt"PC6"geconfigureerd als push-pull-uitgang.boot_pin –
machine.Pindie de boot-selectlijn van de modem aanstuurt. AlsNone, wordt"PG7"geconfigureerd als push-pull-uitgang die laag wordt getrokken.band – De te configureren regionale band. Een van de
BAND_*-constanten.poll_ms – Interval in milliseconden tussen automatische lege uplinks die door
poll()worden geactiveerd om het downlink-venster open te houden.debug – Wanneer
True, wordt al het UART-verkeer afgedrukt viaprint().
- LoraErrors: dict¶
Toewijzing van modemfoutresponsstrings (bijv.
"+ERR_BUSY") aan de bijbehorende uitzonderingsklasse. Intern gebruikt doorhandle_error().
- init_modem() None¶
Initialiseert
self.uart,self.rst_pinenself.boot_pinlui naar hun standaardwaarden voor het Portenta Vision Shield als ze nog niet zijn ingesteld. Wordt aangeroepen vanuit de constructor; normaal niet aangeroepen door gebruikerscode.
- debug_print(data: str) None¶
Drukt
dataaf alsdebugwas ingeschakeld tijdens het construeren, en doet anders niets.
- is_arduino_firmware() bool¶
Geeft
Trueterug als de modem de Arduino MKRWANARD-078-firmware draait (gedetecteerd vanuit de gecachtefw_version-string).
- configure_band(band: int) bool¶
Configureert de regionale band en schakelt, op Arduino-firmware met
BAND_EU868, de ETSI duty-cycle-begrenzer in. GeeftTrueterug bij succes.- Parameters:
band – Een van de
BAND_*-constanten.
- set_baudrate(baudrate: int) None¶
Wijzigt de UART-baudrate van de modem (
AT+UART).- Parameters:
baudrate – Nieuwe baudrate, in bits per seconde.
- set_autobaud(timeout: int = 10000) bool¶
Verzendt lege
AT-commando’s totdat de modem reageert met+OKof totdattimeoutmilliseconden zijn verstreken. GeeftTrueterug als de synchronisatie is gelukt.- Parameters:
timeout – Maximale tijd die aan de poging wordt besteed, in milliseconden.
- get_fw_version() str¶
Vraagt de apparaatstring van de modem op (
AT+DEV?) en de firmwareversie (AT+VER?) en geeft deze terug als één string gescheiden door een spatie.
- restart() None¶
Hersynchroniseert de baudrate, herstart de modem, leest de firmwareversie opnieuw uit en past de geconfigureerde regionale band opnieuw toe. Gooit
LoraErrorop bij mislukking.
- set_rf_power(mode: int, power: int) None¶
Configureert de RF-uitgangstrap van de modem (
AT+RFPOWER).- Parameters:
mode – Een van
RF_MODE_RFO,RF_MODE_PABOOST.power – Index voor het uitgangsvermogen, in firmwarespecifieke eenheden.
- set_port(port: int) None¶
Configureert de LoRaWAN-applicatiepoort (1..223) die door volgende
send_data()-aanroepen wordt gebruikt.- Parameters:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
Schakelt het sync-woord voor het publieke netwerk in of uit.
- Parameters:
enable –
Truevoor het publieke LoRaWAN-sync-woord,Falsevoor het privé sync-woord.
- format(hexMode: bool) None¶
Selecteert het dataformaat dat over de UART wordt gebruikt voor payloadbytes.
- Parameters:
hexMode –
Truevoor het ASCII-hex-payloadformaat,Falsevoor ruwe binaire data.
- set_datarate(dr: int) None¶
Stelt de LoRaWAN-datasnelheidindex in (
AT+DR).- Parameters:
dr – Regiospecifieke datasnelheidindex.
- set_adr(adr: bool) None¶
Schakelt Adaptive Data Rate in of uit.
- Parameters:
adr –
Trueom ADR in te schakelen,Falseom het uit te schakelen.
- set_rx2dr(dr: int) None¶
Stelt de datasnelheidindex in die voor het RX2-ontvangstvenster wordt gebruikt.
- Parameters:
dr – Regiospecifieke datasnelheidindex.
- get_ex2freq() int¶
Geeft de frequentie, in Hz, terug die voor het RX2-ontvangstvenster wordt gebruikt.
- set_rx2freq(freq: int) None¶
Stelt de frequentie in die voor het RX2-ontvangstvenster wordt gebruikt.
- Parameters:
freq – Frequentie in Hz.
- set_fcu(fcu: int) None¶
Stelt de uplink-frameteller in (
AT+FCU).- Parameters:
fcu – Nieuwe waarde voor de uplink-frameteller.
- set_fcd(fcd: int) None¶
Stelt de downlink-frameteller in (
AT+FCD).- Parameters:
fcd – Nieuwe waarde voor de downlink-frameteller.
- join(timeout_ms: int) bool¶
Geeft een
AT+JOINaf en wacht op de join-accept-gebeurtenis. GeeftTrueterug als de modem+EVENT=1,1meldt (aansluiting geslaagd) binnentimeout_ms.- Parameters:
timeout_ms – Maximale tijd om te wachten op zowel de
+ACKals de daaropvolgende join-gebeurtenis, in milliseconden.
- get_max_size() int¶
Geeft de maximale LoRaWAN-payloadgrootte, in bytes, terug voor de huidige datasnelheid. Op Arduino-firmware is dit vast ingesteld op
64.
- poll() None¶
Als er meer dan
poll_msmilliseconden zijn verstreken sinds de laatste aanroep, verzendt een lege bevestigde uplink om openstaande downlinks door te spoelen. Bedoeld om frequent aangeroepen te worden vanuit de hoofdlus van de applicatie.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Verzendt een LoRaWAN-uplink. Gooit
LoraErrorop alsbuffgroter is danget_max_size().- Parameters:
buff – Te verzenden payloadbytes.
confirmed – Wanneer
True, verzendt een bevestigde uplink (+CTX) en wacht op een+ACKvan de netwerkserver. WanneerFalse, verzendt een onbevestigde uplink (+UTX).
- Geeft terug:
Trueals de modem het pakket heeft geaccepteerd (en, voor bevestigde uplinks, het netwerk het heeft bevestigd), andersFalse.
- receive_data(timeout: int = 1000) dict | None¶
Wacht op een downlink. Geeft
Noneterug als er binnentimeoutmilliseconden geen+RECV-gebeurtenis is ontvangen, anders een dict{"port": str, "data": str}met de FPort en de payloadbytes.- Parameters:
timeout – Maximale tijd om te wachten, in milliseconden.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Laagniveau UART-lezing. Leest tekens van de modem totdat een scheidingsteken overeenkomt,
max_bytestekens zijn gelezen, oftimeoutmilliseconden zijn verstreken, en geeft dan de opgebouwde string terug met een eventuele afsluitende\rverwijderd.- Parameters:
delimiter – Ofwel een enkel teken dat aan het einde van de buffer moet worden gematcht, een string van meerdere tekens die tegen de volledige getrimde buffer wordt gematcht, of een lijst van zulke strings.
max_bytes – Indien ingesteld, geeft terug zodra exact dit aantal bytes is gelezen.
timeout – Algehele lees-timeout, in milliseconden.
- available() int¶
Geeft het aantal bytes terug dat momenteel beschikbaar is in de UART-ontvangstbuffer van de modem.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Schakelt de modem naar OTAA-modus, programmeert de opgegeven sleutels en EUI’s, en probeert vervolgens zich bij het netwerk aan te sluiten. Geeft
Trueterug als de aansluiting is gelukt.- Parameters:
appEui – 64-bits Application/Join EUI als een hexstring.
appKey – 128-bits Application Key als een hexstring.
devEui – Optionele 64-bits Device EUI als een hexstring. Als
None, wordt de in de fabriek geprogrammeerde Device EUI gebruikt.timeout – Join-timeout, in milliseconden.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Schakelt de modem naar ABP-modus, programmeert de opgegeven adressen en sleutels, en probeert vervolgens zich aan te sluiten. Geeft het resultaat van
get_join_status()terug.- Parameters:
nwkId – Netwerkidentifier (momenteel genegeerd door de firmware).
devAddr – 32-bits Device Address als een hexstring.
nwkSKey – 128-bits Network Session Key als een hexstring.
appSKey – 128-bits Application Session Key als een hexstring.
timeout – Join-timeout, in milliseconden.
- handle_error(command: str, data: str) None¶
Inspecteert een modemrespons en gooit de bijbehorende
LoraError-subklasse op als deze een fout vertegenwoordigt. Doet niets voor niet-foutresponsen.- Parameters:
command – Het AT-commando (zonder het
AT-voorvoegsel) datdataheeft geproduceerd.data – De responsstring die door de modem is teruggegeven.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Bouwt een AT-commando op uit
cmdenargs, voegt optioneel een ruwedata-payload toe, verzendt het, en geeft de respons van de modem terug. Voor query-commando’s die eindigen op?wordt alleen het waardegedeelte teruggegeven (de substring na=).- Parameters:
cmd – AT-commandosuffix (bijv.
"+JOIN","+DR="); het"AT"-voorvoegsel en de afsluitende\rworden automatisch toegevoegd.args – Aanvullende argumenten die na stringconversie aan
cmdworden geconcateneerd.delimiter – Scheidingsteken doorgegeven aan
receive().data – Optionele ruwe bytes die direct na het AT-commando worden geschreven (gebruikt voor binaire uplink-payloads).
timeout – Respons-timeout, in milliseconden.
raise_error – Wanneer
True, worden foutresponsen omgezet inLoraError-uitzonderingen; wanneerFalse, wordt de ruwe respons aan de aanroeper teruggegeven.