lora — LoRa-modeemin ajuri¶
lora-moduuli tarjoaa ajurin Arduino Portenta Vision Shield -laajennuksen Murata CMWX1ZZABZ LoRa -modeemille. Se julkaisee korkean tason Lora-luokan, joka kapseloi modeemin laiteohjelmiston käyttämän AT-komentojoukon (mukaan lukien Arduino MKRWAN ARD-078 -laiteohjelmiston), jotta sovellus voi liittyä LoRaWAN-verkkoon sekä lähettää ja vastaanottaa paketteja.
Esimerkki:
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)
Vakiot¶
Aktivointitilat¶
RF-lähtötilat¶
Taajuusalueet¶
Laiteluokat¶
Poikkeukset¶
- exception lora.LoraError¶
Peruspoikkeus, joka nostetaan minkä tahansa modeemin tai ajurin palauttaman virheen yhteydessä.
- exception lora.LoraErrorTimeout¶
Nostetaan, kun modeemi ei vastaa määritetyn aikakatkaisun kuluessa (vastaanottopuskuri on tyhjä).
- exception lora.LoraErrorParam¶
Nostetaan
+ERR_PARAM-vastauksen yhteydessä, kun AT-komento annettiin virheellisellä parametrilla.
- exception lora.LoraErrorBusy¶
Nostetaan
+ERR_BUSY-vastauksen yhteydessä, kun modeemi on varattuna käsittelemään aiempaa komentoa.
- exception lora.LoraErrorOverflow¶
Nostetaan
+ERR_PARAM_OVERFLOW-vastauksen yhteydessä, kun parametri ylittää suurimman sallitun pituuden.
- exception lora.LoraErrorNoNetwork¶
Nostetaan
+ERR_NO_NETWORK-vastauksen yhteydessä, kun modeemi ei ole liittynyt verkkoon.
- exception lora.LoraErrorRX¶
Nostetaan
+ERR_RX-vastauksen yhteydessä, kun alalinkin vastaanotossa tapahtuu virhe.
- exception lora.LoraErrorUnknown¶
Nostetaan
+ERR_UNKNOWN-vastauksen yhteydessä tai kun modeemi raportoi dokumentoimattoman virheen.
Luokat¶
- 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)¶
Luo uuden modeemiajurin. Konstruktori alustaa (tai luo automaattisesti) UARTin sekä reset- ja boot-nastat, suorittaa moduulin laitteistonollauksen, tekee automaattisen siirtonopeuden synkronoinnin, käynnistää moduulin uudelleen, kysyy sen laiteohjelmiston version ja määrittää pyydetyn alueellisen
band-asetuksen.- Parametrit:
uart – Esimääritetty
machine.UART-instanssi, jota käytetään yhteydenpitoon modeemin kanssa. JosNone, ajuri avaaUART(8, 19200)8N2-kehystyksellä (Portenta Vision Shieldin oletus).rst_pin –
machine.Pin, joka ohjaa modeemin reset-linjaa. JosNone,"PC6"määritetään push-pull-lähdöksi.boot_pin –
machine.Pin, joka ohjaa modeemin boot-valintalinjaa. JosNone,"PG7"määritetään matalalle vedetyksi push-pull-lähdöksi.band – Määritettävä alueellinen taajuuskaista. Yksi
BAND_*-vakioista.poll_ms – Väli millisekunteina automaattisten tyhjien ylälinkkien välillä, jotka
poll()käynnistää alalinkki-ikkunan pitämiseksi auki.debug – Kun
True, kaikki UART-liikenne tulostetaanprint()-funktiolla.
- LoraErrors: dict¶
Kuvaus modeemin virhevastausmerkkijonoista (esim.
"+ERR_BUSY") vastaaviin poikkeusluokkiin.handle_error()käyttää tätä sisäisesti.
- init_modem() None¶
Alustaa laiskasti
self.uart,self.rst_pinjaself.boot_pinPortenta Vision Shieldin oletuksiin, jos niitä ei ole jo asetettu. Kutsutaan konstruktorista; käyttäjäkoodi ei normaalisti kutsu tätä.
- debug_print(data: str) None¶
Tulostaa
data, josdebugoli käytössä luonnin yhteydessä, muutoin ei tee mitään.
- is_arduino_firmware() bool¶
Palauttaa
True, jos modeemissa ajetaan Arduino MKRWANARD-078-laiteohjelmistoa (tunnistetaan välimuistissa olevastafw_version-merkkijonosta).
- configure_band(band: int) bool¶
Määrittää alueellisen taajuuskaistan ja, Arduino-laiteohjelmistossa
BAND_EU868-asetuksella, ottaa käyttöön ETSI-pulssisuhderajoittimen. PalauttaaTrueonnistuessaan.- Parametrit:
band – Yksi
BAND_*-vakioista.
- set_baudrate(baudrate: int) None¶
Vaihtaa modeemin UART-siirtonopeuden (
AT+UART).- Parametrit:
baudrate – Uusi siirtonopeus bitteinä sekunnissa.
- set_autobaud(timeout: int = 10000) bool¶
Lähettää tyhjiä
AT-komentoja, kunnes modeemi vastaa+OKtai kunnestimeoutmillisekuntia on kulunut. PalauttaaTrue, jos synkronointi onnistui.- Parametrit:
timeout – Enimmäisaika yrittämiseen millisekunteina.
- get_fw_version() str¶
Kysyy modeemin laitemerkkijonon (
AT+DEV?) ja laiteohjelmiston version (AT+VER?) ja palauttaa ne yhtenä välilyönnein eroteltuna merkkijonona.
- restart() None¶
Synkronoi siirtonopeuden uudelleen, käynnistää modeemin uudelleen, lukee laiteohjelmiston version uudelleen ja ottaa määritetyn alueellisen taajuuskaistan uudelleen käyttöön. Nostaa
LoraError-poikkeuksen virhetilanteessa.
- set_rf_power(mode: int, power: int) None¶
Määrittää modeemin RF-lähtöasteen (
AT+RFPOWER).- Parametrit:
mode – Yksi arvoista
RF_MODE_RFO,RF_MODE_PABOOST.power – Lähtötehoindeksi laiteohjelmistokohtaisina yksikköinä.
- set_port(port: int) None¶
Määrittää LoRaWAN-sovellusportin (1..223), jota seuraavat
send_data()-kutsut käyttävät.- Parametrit:
port – LoRaWAN FPort.
- set_public_network(enable: bool) None¶
Ottaa käyttöön tai poistaa käytöstä julkisen verkon synkronointisanan.
- Parametrit:
enable –
Truejulkista LoRaWAN-synkronointisanaa varten,Falseyksityistä varten.
- sleep(enable: bool) None¶
Asettaa modeemin matalatehoiseen lepotilaan (
True) tai herättää sen (False).
- format(hexMode: bool) None¶
Valitsee UARTin yli hyötykuormatavuille käytettävän tietomuodon.
- Parametrit:
hexMode –
TrueASCII-heksa-hyötykuormamuotoa varten,Falseraakaa binääriä varten.
- set_datarate(dr: int) None¶
Asettaa LoRaWAN-tiedonsiirtonopeuden indeksin (
AT+DR).- Parametrit:
dr – Aluekohtainen tiedonsiirtonopeuden indeksi.
- set_adr(adr: bool) None¶
Ottaa käyttöön tai poistaa käytöstä mukautuvan tiedonsiirtonopeuden (Adaptive Data Rate).
- Parametrit:
adr –
Trueottaa ADR:n käyttöön,Falsepoistaa sen käytöstä.
- get_nwk_skey() str¶
Palauttaa nykyisen verkkoistuntoavaimen (Network Session Key) heksamerkkijonona.
- get_appskey() str¶
Palauttaa nykyisen sovellusistuntoavaimen (Application Session Key) heksamerkkijonona.
- set_rx2dr(dr: int) None¶
Asettaa RX2-vastaanottoikkunassa käytetyn tiedonsiirtonopeuden indeksin.
- Parametrit:
dr – Aluekohtainen tiedonsiirtonopeuden indeksi.
- set_rx2freq(freq: int) None¶
Asettaa RX2-vastaanottoikkunassa käytetyn taajuuden.
- Parametrit:
freq – Taajuus hertseinä.
- set_fcu(fcu: int) None¶
Asettaa ylälinkin kehyslaskurin (
AT+FCU).- Parametrit:
fcu – Uusi ylälinkin kehyslaskurin arvo.
- set_fcd(fcd: int) None¶
Asettaa alalinkin kehyslaskurin (
AT+FCD).- Parametrit:
fcd – Uusi alalinkin kehyslaskurin arvo.
- join(timeout_ms: int) bool¶
Antaa
AT+JOIN-komennon ja odottaa join-accept-tapahtumaa. PalauttaaTrue, jos modeemi raportoi+EVENT=1,1(liittyminen onnistui)timeout_ms-ajan kuluessa.- Parametrit:
timeout_ms – Enimmäisaika sekä
+ACK- että sitä seuraavan liittymistapahtuman odottamiseen millisekunteina.
- get_max_size() int¶
Palauttaa LoRaWAN-hyötykuorman enimmäiskoon tavuina nykyisellä tiedonsiirtonopeudella. Arduino-laiteohjelmistossa tämä on kiinteästi
64.
- poll() None¶
Jos viimeisestä kutsusta on kulunut yli
poll_msmillisekuntia, lähettää tyhjän vahvistetun ylälinkin odottavien alalinkkien tyhjentämiseksi. Tarkoitettu kutsuttavaksi usein sovelluksen pääsilmukasta.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Lähettää LoRaWAN-ylälinkin. Nostaa
LoraError-poikkeuksen, josbuffon suurempi kuinget_max_size().- Parametrit:
buff – Lähetettävät hyötykuormatavut.
confirmed – Kun
True, lähettää vahvistetun ylälinkin (+CTX) ja odottaa verkkopalvelimen+ACK-kuittausta. KunFalse, lähettää vahvistamattoman ylälinkin (+UTX).
- Palauttaa:
True, jos modeemi hyväksyi paketin (ja vahvistettujen ylälinkkien osalta verkko kuittasi sen), muutoinFalse.
- receive_data(timeout: int = 1000) dict | None¶
Odottaa alalinkkiä. Palauttaa
None, jos+RECV-tapahtumaa ei vastaanotettutimeoutmillisekunnin kuluessa, muutoin sanakirjan{"port": str, "data": str}, joka sisältää FPortin ja hyötykuormatavut.- Parametrit:
timeout – Enimmäisaika odottamiseen millisekunteina.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Matalan tason UART-luku. Lukee merkkejä modeemista, kunnes erotinmerkki löytyy,
max_bytesmerkkiä on luettu taitimeoutmillisekuntia on kulunut, ja palauttaa sitten kertyneen merkkijonon, josta mahdollinen lopussa oleva\ron poistettu.- Parametrit:
delimiter – Joko yksittäinen merkki, joka täsmätään puskurin lopussa, monimerkkinen merkkijono, joka täsmätään koko siistittyä puskuria vasten, tai lista tällaisia merkkijonoja.
max_bytes – Jos asetettu, palauttaa heti, kun täsmälleen tämä määrä tavuja on luettu.
timeout – Luvun kokonaisaikakatkaisu millisekunteina.
- available() int¶
Palauttaa modeemin UART-vastaanottopuskurissa parhaillaan käytettävissä olevien tavujen määrän.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Vaihtaa modeemin OTAA-tilaan, ohjelmoi annetut avaimet ja EUI:t ja yrittää sitten liittyä verkkoon. Palauttaa
True, jos liittyminen onnistui.- Parametrit:
appEui – 64-bittinen Application/Join EUI heksamerkkijonona.
appKey – 128-bittinen sovellusavain (Application Key) heksamerkkijonona.
devEui – Valinnainen 64-bittinen Device EUI heksamerkkijonona. Jos
None, käytetään tehdasohjelmoitua Device EUI:tä.timeout – Liittymisen aikakatkaisu millisekunteina.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Vaihtaa modeemin ABP-tilaan, ohjelmoi annetut osoitteet ja avaimet ja yrittää sitten liittyä. Palauttaa
get_join_status()-metodin tuloksen.- Parametrit:
nwkId – Verkkotunniste (laiteohjelmisto jättää tällä hetkellä huomiotta).
devAddr – 32-bittinen laiteosoite (Device Address) heksamerkkijonona.
nwkSKey – 128-bittinen verkkoistuntoavain (Network Session Key) heksamerkkijonona.
appSKey – 128-bittinen sovellusistuntoavain (Application Session Key) heksamerkkijonona.
timeout – Liittymisen aikakatkaisu millisekunteina.
- handle_error(command: str, data: str) None¶
Tarkastaa modeemin vastauksen ja nostaa vastaavan
LoraError-alaluokan, jos vastaus edustaa virhettä. Ei tee mitään virheettömille vastauksille.- Parametrit:
command – AT-komento (ilman
AT-etuliitettä), joka tuottidata.data – Modeemin palauttama vastausmerkkijono.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Rakentaa AT-komennon arvoista
cmdjaargs, liittää valinnaisesti raa’andata-hyötykuorman, lähettää sen ja palauttaa modeemin vastauksen. Kyselykomennoille, jotka päättyvät merkkiin?, palautetaan vain arvo-osa (=-merkin jälkeinen osamerkkijono).- Parametrit:
cmd – AT-komennon pääte (esim.
"+JOIN","+DR=");"AT"-etuliite ja lopun\rlisätään automaattisesti.args –
cmd-arvoon merkkijonomuunnoksen jälkeen ketjutettavat lisäargumentit.delimiter – Erotinmerkki, joka välitetään edelleen
receive()-metodille.data – Valinnaiset raakatavut, jotka kirjoitetaan välittömästi AT-komennon jälkeen (käytetään binääristen ylälinkki-hyötykuormien yhteydessä).
timeout – Vastauksen aikakatkaisu millisekunteina.
raise_error – Kun
True, virhevastaukset muunnetaanLoraError-poikkeuksiksi; kunFalse, raaka vastaus palautetaan kutsujalle.