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#

lora.MODE_ABP: int#

Personointiin perustuva aktivointitila (Activation By Personalization).

lora.MODE_OTAA: int#

Langaton aktivointitila (Over-The-Air Activation).

RF-lähtötilat#

lora.RF_MODE_RFO: int#

Käytä modeemin RFO (matalatehoista) RF-lähtöä.

lora.RF_MODE_PABOOST: int#

Käytä modeemin PA_BOOST (suuritehoista) RF-lähtöä.

Taajuusalueet#

lora.BAND_AS923: int#

AS923 (Aasia 923 MHz) -alueellinen taajuuskaista.

lora.BAND_AU915: int#

AU915 (Australia 915 MHz) -alueellinen taajuuskaista.

lora.BAND_EU868: int#

EU868 (Eurooppa 868 MHz) -alueellinen taajuuskaista.

lora.BAND_KR920: int#

KR920 (Korea 920 MHz) -alueellinen taajuuskaista.

lora.BAND_IN865: int#

IN865 (Intia 865 MHz) -alueellinen taajuuskaista.

lora.BAND_US915: int#

US915 (Yhdysvallat 915 MHz) -alueellinen taajuuskaista.

lora.BAND_US915_HYBRID: int#

US915-hybridi (alikaista) -alueellinen suunnitelma.

Laiteluokat#

lora.CLASS_A: str#

LoRaWAN-päätelaite, luokka A.

lora.CLASS_B: str#

LoRaWAN-päätelaite, luokka B.

lora.CLASS_C: str#

LoRaWAN-päätelaite, luokka C.

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. Jos None, ajuri avaa UART(8, 19200) 8N2-kehystyksellä (Portenta Vision Shieldin oletus).

  • rst_pinmachine.Pin, joka ohjaa modeemin reset-linjaa. Jos None, "PC6" määritetään push-pull-lähdöksi.

  • boot_pinmachine.Pin, joka ohjaa modeemin boot-valintalinjaa. Jos None, "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 tulostetaan print()-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_pin ja self.boot_pin Portenta 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, jos debug oli käytössä luonnin yhteydessä, muutoin ei tee mitään.

is_arduino_firmware() bool#

Palauttaa True, jos modeemissa ajetaan Arduino MKRWAN ARD-078 -laiteohjelmistoa (tunnistetaan välimuistissa olevasta fw_version-merkkijonosta).

configure_class(_class: str) None#

Määrittää LoRaWAN-laiteluokan.

Parametrit:

_class – Yksi arvoista CLASS_A, CLASS_B, CLASS_C.

configure_band(band: int) bool#

Määrittää alueellisen taajuuskaistan ja, Arduino-laiteohjelmistossa BAND_EU868-asetuksella, ottaa käyttöön ETSI-pulssisuhderajoittimen. Palauttaa True onnistuessaan.

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 +OK tai kunnes timeout millisekuntia on kulunut. Palauttaa True, 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.

get_device_eui() str#

Palauttaa modeemin 64-bittisen Device EUI:n heksamerkkijonona.

factory_default() None#

Palauttaa tehdasasetukset komennolla AT+FACNEW.

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

enableTrue julkista LoRaWAN-synkronointisanaa varten, False yksityistä 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:

hexModeTrue ASCII-heksa-hyötykuormamuotoa varten, False raakaa binääriä varten.

set_datarate(dr: int) None#

Asettaa LoRaWAN-tiedonsiirtonopeuden indeksin (AT+DR).

Parametrit:

dr – Aluekohtainen tiedonsiirtonopeuden indeksi.

get_datarate() int#

Palauttaa nykyisen LoRaWAN-tiedonsiirtonopeuden indeksin.

set_adr(adr: bool) None#

Ottaa käyttöön tai poistaa käytöstä mukautuvan tiedonsiirtonopeuden (Adaptive Data Rate).

Parametrit:

adrTrue ottaa ADR:n käyttöön, False poistaa sen käytöstä.

get_adr() int#

Palauttaa nykyisen ADR-asetuksen (1 jos käytössä, muutoin 0).

get_devaddr() str#

Palauttaa nykyisen 32-bittisen DevAddr:n heksamerkkijonona.

get_nwk_skey() str#

Palauttaa nykyisen verkkoistuntoavaimen (Network Session Key) heksamerkkijonona.

get_appskey() str#

Palauttaa nykyisen sovellusistuntoavaimen (Application Session Key) heksamerkkijonona.

get_rx2dr() int#

Palauttaa RX2-vastaanottoikkunassa käytetyn tiedonsiirtonopeuden indeksin.

set_rx2dr(dr: int) None#

Asettaa RX2-vastaanottoikkunassa käytetyn tiedonsiirtonopeuden indeksin.

Parametrit:

dr – Aluekohtainen tiedonsiirtonopeuden indeksi.

get_ex2freq() int#

Palauttaa RX2-vastaanottoikkunassa käytetyn taajuuden hertseinä.

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.

get_fcu() int#

Palauttaa nykyisen ylälinkin kehyslaskurin.

set_fcd(fcd: int) None#

Asettaa alalinkin kehyslaskurin (AT+FCD).

Parametrit:

fcd – Uusi alalinkin kehyslaskurin arvo.

get_fcd() int#

Palauttaa nykyisen alalinkin kehyslaskurin.

change_mode(mode: int) None#

Vaihtaa aktivointitilan.

Parametrit:

mode – Yksi arvoista MODE_ABP, MODE_OTAA.

join(timeout_ms: int) bool#

Antaa AT+JOIN-komennon ja odottaa join-accept-tapahtumaa. Palauttaa True, 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_join_status() bool#

Palauttaa True, jos modeemi on parhaillaan liittyneenä verkkoon.

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_ms millisekuntia, 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, jos buff on suurempi kuin get_max_size().

Parametrit:
  • buff – Lähetettävät hyötykuormatavut.

  • confirmed – Kun True, lähettää vahvistetun ylälinkin (+CTX) ja odottaa verkkopalvelimen +ACK-kuittausta. Kun False, lähettää vahvistamattoman ylälinkin (+UTX).

Palauttaa:

True, jos modeemi hyväksyi paketin (ja vahvistettujen ylälinkkien osalta verkko kuittasi sen), muutoin False.

receive_data(timeout: int = 1000) dict | None#

Odottaa alalinkkiä. Palauttaa None, jos +RECV-tapahtumaa ei vastaanotettu timeout millisekunnin 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_bytes merkkiä on luettu tai timeout millisekuntia on kulunut, ja palauttaa sitten kertyneen merkkijonon, josta mahdollinen lopussa oleva \r on 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 tuotti data.

  • 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 cmd ja args, liittää valinnaisesti raa’an data-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 \r lisätään automaattisesti.

  • argscmd-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 muunnetaan LoraError-poikkeuksiksi; kun False, raaka vastaus palautetaan kutsujalle.