lora — LoRa modem sürücüsü#

lora modülü, Arduino Portenta Vision Shield üzerindeki Murata CMWX1ZZABZ LoRa modemi için bir sürücü sağlar. Modem aygıt yazılımının (firmware) kullandığı AT komut kümesini (Arduino MKRWAN ARD-078 aygıt yazılımı dahil) saran üst düzey bir Lora sınıfı sunar; böylece bir uygulama bir LoRaWAN ağına katılabilir ve paket gönderip alabilir.

Örnek:

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)

Sabitler#

Etkinleştirme modları#

lora.MODE_ABP: int#

Kişiselleştirme ile Etkinleştirme (Activation By Personalization) modu.

lora.MODE_OTAA: int#

Havadan Etkinleştirme (Over-The-Air Activation) modu.

RF çıkış modları#

lora.RF_MODE_RFO: int#

Modemin RFO (düşük güç) RF çıkışını kullan.

lora.RF_MODE_PABOOST: int#

Modemin PA_BOOST (yüksek güç) RF çıkışını kullan.

Bantlar#

lora.BAND_AS923: int#

AS923 (Asya 923 MHz) bölgesel bandı.

lora.BAND_AU915: int#

AU915 (Avustralya 915 MHz) bölgesel bandı.

lora.BAND_EU868: int#

EU868 (Avrupa 868 MHz) bölgesel bandı.

lora.BAND_KR920: int#

KR920 (Kore 920 MHz) bölgesel bandı.

lora.BAND_IN865: int#

IN865 (Hindistan 865 MHz) bölgesel bandı.

lora.BAND_US915: int#

US915 (Amerika Birleşik Devletleri 915 MHz) bölgesel bandı.

lora.BAND_US915_HYBRID: int#

US915 hibrit (alt bant) bölgesel planı.

Cihaz sınıfları#

lora.CLASS_A: str#

LoRaWAN uç cihazı Sınıf A.

lora.CLASS_B: str#

LoRaWAN uç cihazı Sınıf B.

lora.CLASS_C: str#

LoRaWAN uç cihazı Sınıf C.

İstisnalar#

exception lora.LoraError#

Modem veya sürücü tarafından döndürülen herhangi bir hata için ortaya çıkarılan temel istisna.

exception lora.LoraErrorTimeout#

Modem yapılandırılmış zaman aşımı içinde yanıt vermediğinde (alma arabelleği boştur) ortaya çıkarılır.

exception lora.LoraErrorParam#

Bir AT komutu geçersiz bir parametreyle gönderildiğinde gelen +ERR_PARAM yanıtında ortaya çıkarılır.

exception lora.LoraErrorBusy#

Modem önceki bir komutu işlemekle meşgulken gelen +ERR_BUSY yanıtında ortaya çıkarılır.

exception lora.LoraErrorOverflow#

Bir parametre izin verilen maksimum uzunluğu aştığında gelen +ERR_PARAM_OVERFLOW yanıtında ortaya çıkarılır.

exception lora.LoraErrorNoNetwork#

Modem bir ağa katılmamışken gelen +ERR_NO_NETWORK yanıtında ortaya çıkarılır.

exception lora.LoraErrorRX#

Bir downlink alınırken hata oluştuğunda gelen +ERR_RX yanıtında ortaya çıkarılır.

exception lora.LoraErrorUnknown#

+ERR_UNKNOWN yanıtında veya modem belgelenmemiş bir hata bildirdiğinde ortaya çıkarılır.

Sınıflar#

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

Yeni bir modem sürücüsü oluşturur. Yapıcı (constructor), UART ile reset/boot pinlerini başlatır (veya otomatik oluşturur), modülü donanım olarak sıfırlar, otomatik baud senkronizasyonu yapar, modülü yeniden başlatır, aygıt yazılımı sürümünü sorgular ve istenen bölgesel band değerini yapılandırır.

Parametreler:
  • uart – Modemle iletişim kurmak için kullanılan önceden yapılandırılmış machine.UART örneği. None ise sürücü, UART(8, 19200) bağlantısını 8N2 çerçevelemeyle (Portenta Vision Shield varsayılanı) açar.

  • rst_pin – Modemin reset hattını süren machine.Pin. None ise "PC6" push-pull çıkış olarak yapılandırılır.

  • boot_pin – Modemin boot-select hattını süren machine.Pin. None ise "PG7" düşük seviyeye çekilmiş push-pull çıkış olarak yapılandırılır.

  • band – Yapılandırılacak bölgesel bant. BAND_* sabitlerinden biri.

  • poll_ms – Downlink penceresini açık tutmak için poll() tarafından tetiklenen otomatik boş uplink’ler arasındaki milisaniye cinsinden aralık.

  • debugTrue olduğunda tüm UART trafiği print() aracılığıyla yazdırılır.

LoraErrors: dict#

Modem hata yanıtı dizelerinden (ör. "+ERR_BUSY") ilgili istisna sınıfına eşleme. handle_error() tarafından dahili olarak kullanılır.

init_modem() None#

self.uart, self.rst_pin ve self.boot_pin henüz ayarlanmamışsa bunları Portenta Vision Shield varsayılanlarına tembel olarak başlatır. Yapıcıdan çağrılır; normalde kullanıcı kodu tarafından çağrılmaz.

debug_print(data: str) None#

Yapım sırasında debug etkinleştirilmişse data değerini yazdırır, aksi takdirde hiçbir şey yapmaz.

is_arduino_firmware() bool#

Modem Arduino MKRWAN ARD-078 aygıt yazılımını çalıştırıyorsa (önbelleğe alınmış fw_version dizesinden tespit edilir) True döndürür.

configure_class(_class: str) None#

LoRaWAN cihaz sınıfını yapılandırır.

Parametreler:

_classCLASS_A, CLASS_B, CLASS_C değerlerinden biri.

configure_band(band: int) bool#

Bölgesel bandı yapılandırır ve BAND_EU868 ile Arduino aygıt yazılımında ETSI çalışma oranı sınırlayıcısını etkinleştirir. Başarılı olduğunda True döndürür.

Parametreler:

bandBAND_* sabitlerinden biri.

set_baudrate(baudrate: int) None#

Modemin UART baud hızını değiştirir (AT+UART).

Parametreler:

baudrate – Saniyede bit cinsinden yeni baud hızı.

set_autobaud(timeout: int = 10000) bool#

Modem +OK ile yanıt verene veya timeout milisaniye geçene kadar boş AT komutları gönderir. Senkronizasyon başarılı olursa True döndürür.

Parametreler:

timeout – Denemeye harcanacak milisaniye cinsinden maksimum süre.

get_fw_version() str#

Modem cihaz dizesini (AT+DEV?) ve aygıt yazılımı sürümünü (AT+VER?) sorgular ve bunları tek bir boşlukla ayrılmış dize olarak döndürür.

get_device_eui() str#

Modemin 64-bit Device EUI değerini bir onaltılık dize olarak döndürür.

factory_default() None#

AT+FACNEW aracılığıyla fabrika varsayılanlarını geri yükler.

restart() None#

Baud hızını yeniden senkronize eder, modemi yeniden başlatır, aygıt yazılımı sürümünü yeniden okur ve yapılandırılmış bölgesel bandı yeniden uygular. Başarısızlıkta LoraError ortaya çıkarır.

set_rf_power(mode: int, power: int) None#

Modem RF çıkış katını yapılandırır (AT+RFPOWER).

Parametreler:
  • modeRF_MODE_RFO, RF_MODE_PABOOST değerlerinden biri.

  • power – Aygıt yazılımına özgü birimlerde çıkış gücü indeksi.

set_port(port: int) None#

Sonraki send_data() çağrıları tarafından kullanılan LoRaWAN uygulama portunu (1..223) yapılandırır.

Parametreler:

port – LoRaWAN FPort.

set_public_network(enable: bool) None#

Genel ağ senkronizasyon sözcüğünü etkinleştirir veya devre dışı bırakır.

Parametreler:

enable – Genel LoRaWAN senkronizasyon sözcüğü için True, özel olanı için False.

sleep(enable: bool) None#

Modemi düşük güçlü uyku moduna alır (True) veya uyandırır (False).

format(hexMode: bool) None#

Yük baytları için UART üzerinden kullanılan veri biçimini seçer.

Parametreler:

hexMode – ASCII-onaltılık yük biçimi için True, ham ikili için False.

set_datarate(dr: int) None#

LoRaWAN veri hızı indeksini ayarlar (AT+DR).

Parametreler:

dr – Bölgeye özgü veri hızı indeksi.

get_datarate() int#

Geçerli LoRaWAN veri hızı indeksini döndürür.

set_adr(adr: bool) None#

Adaptif Veri Hızı’nı (Adaptive Data Rate) etkinleştirir veya devre dışı bırakır.

Parametreler:

adr – ADR’yi etkinleştirmek için True, devre dışı bırakmak için False.

get_adr() int#

Geçerli ADR ayarını döndürür (etkinse 1, aksi halde 0).

get_devaddr() str#

Geçerli 32-bit DevAddr değerini bir onaltılık dize olarak döndürür.

get_nwk_skey() str#

Geçerli Network Session Key değerini bir onaltılık dize olarak döndürür.

get_appskey() str#

Geçerli Application Session Key değerini bir onaltılık dize olarak döndürür.

get_rx2dr() int#

RX2 alma penceresi için kullanılan veri hızı indeksini döndürür.

set_rx2dr(dr: int) None#

RX2 alma penceresi için kullanılan veri hızı indeksini ayarlar.

Parametreler:

dr – Bölgeye özgü veri hızı indeksi.

get_ex2freq() int#

RX2 alma penceresi için kullanılan frekansı Hz cinsinden döndürür.

set_rx2freq(freq: int) None#

RX2 alma penceresi için kullanılan frekansı ayarlar.

Parametreler:

freq – Hz cinsinden frekans.

set_fcu(fcu: int) None#

Uplink çerçeve sayacını ayarlar (AT+FCU).

Parametreler:

fcu – Yeni uplink çerçeve sayacı değeri.

get_fcu() int#

Geçerli uplink çerçeve sayacını döndürür.

set_fcd(fcd: int) None#

Downlink çerçeve sayacını ayarlar (AT+FCD).

Parametreler:

fcd – Yeni downlink çerçeve sayacı değeri.

get_fcd() int#

Geçerli downlink çerçeve sayacını döndürür.

change_mode(mode: int) None#

Etkinleştirme modunu değiştirir.

Parametreler:

modeMODE_ABP, MODE_OTAA değerlerinden biri.

join(timeout_ms: int) bool#

Bir AT+JOIN komutu verir ve katılma-kabul (join-accept) olayını bekler. Modem timeout_ms içinde +EVENT=1,1 bildirirse (katılma başarılı) True döndürür.

Parametreler:

timeout_ms – Hem +ACK hem de sonraki katılma olayı için beklenecek milisaniye cinsinden maksimum süre.

get_join_status() bool#

Modem şu anda bir ağa katılmışsa True döndürür.

get_max_size() int#

Geçerli veri hızı için bayt cinsinden maksimum LoRaWAN yük boyutunu döndürür. Arduino aygıt yazılımında bu değer 64 olarak sabittir.

poll() None#

Son çağrıdan bu yana poll_ms milisaniyeden fazla geçtiyse, bekleyen downlink’leri boşaltmak için boş bir onaylı uplink gönderir. Uygulamanın ana döngüsünden sık sık çağrılmak üzere tasarlanmıştır.

send_data(buff: bytes, confirmed: bool = True) bool#

Bir LoRaWAN uplink iletir. buff, get_max_size() değerinden büyükse LoraError ortaya çıkarır.

Parametreler:
  • buff – İletilecek yük baytları.

  • confirmedTrue olduğunda onaylı bir uplink (+CTX) gönderir ve bir ağ sunucusu +ACK bekler. False olduğunda onaysız bir uplink (+UTX) gönderir.

Dönüşler:

Modem paketi kabul ettiyse (ve onaylı uplink’ler için ağ onayladıysa) True, aksi halde False.

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

Bir downlink bekler. timeout milisaniye içinde herhangi bir +RECV olayı alınmadıysa None, aksi halde FPort ile yük baytlarını içeren {"port": str, "data": str} sözlüğünü döndürür.

Parametreler:

timeout – Milisaniye cinsinden beklenecek maksimum süre.

receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str#

Düşük seviyeli UART okuması. Bir sınırlayıcı eşleşene, max_bytes karakter okunana veya timeout milisaniye geçene kadar modemden karakter okur, ardından sondaki \r kırpılmış biriktirilen dizeyi döndürür.

Parametreler:
  • delimiter – Arabelleğin sonunda eşleştirilecek tek bir karakter, tam kırpılmış arabellekle eşleştirilecek çok karakterli bir dize veya bu tür dizelerden oluşan bir liste.

  • max_bytes – Ayarlanmışsa, tam olarak bu kadar bayt okunur okunmaz döner.

  • timeout – Milisaniye cinsinden genel okuma zaman aşımı.

available() int#

Modemin UART alma arabelleğinde şu anda mevcut olan bayt sayısını döndürür.

join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool#

Modemi OTAA moduna geçirir, verilen anahtarları ve EUI’leri programlar, ardından ağa katılmayı dener. Katılma başarılı olursa True döndürür.

Parametreler:
  • appEui – Onaltılık dize olarak 64-bit Application/Join EUI.

  • appKey – Onaltılık dize olarak 128-bit Application Key.

  • devEui – Onaltılık dize olarak isteğe bağlı 64-bit Device EUI. None ise fabrikada programlanmış Device EUI kullanılır.

  • timeout – Milisaniye cinsinden katılma zaman aşımı.

join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool#

Modemi ABP moduna geçirir, verilen adresleri ve anahtarları programlar, ardından katılmayı dener. get_join_status() sonucunu döndürür.

Parametreler:
  • nwkId – Ağ tanımlayıcısı (şu anda aygıt yazılımı tarafından yok sayılır).

  • devAddr – Onaltılık dize olarak 32-bit Device Address.

  • nwkSKey – Onaltılık dize olarak 128-bit Network Session Key.

  • appSKey – Onaltılık dize olarak 128-bit Application Session Key.

  • timeout – Milisaniye cinsinden katılma zaman aşımı.

handle_error(command: str, data: str) None#

Bir modem yanıtını inceler ve bir hatayı temsil ediyorsa eşleşen LoraError alt sınıfını ortaya çıkarır. Hata olmayan yanıtlar için hiçbir şey yapmaz.

Parametreler:
  • commanddata üreten AT komutu (AT öneki olmadan).

  • data – Modem tarafından döndürülen yanıt dizesi.

send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str#

cmd ve args değerlerinden bir AT komutu oluşturur, isteğe bağlı olarak ham bir data yükü ekler, iletir ve modemin yanıtını döndürür. ? ile biten sorgu komutları için yalnızca değer kısmı (= işaretinden sonraki alt dize) döndürülür.

Parametreler:
  • cmd – AT komut soneki (ör. "+JOIN", "+DR="); "AT" öneki ve sondaki \r otomatik olarak eklenir.

  • args – Dize dönüşümünden sonra cmd değerine eklenen ek argümanlar.

  • delimiterreceive() öğesine iletilen sınırlayıcı.

  • data – AT komutundan hemen sonra yazılan isteğe bağlı ham baytlar (ikili uplink yükleri için kullanılır).

  • timeout – Milisaniye cinsinden yanıt zaman aşımı.

  • raise_errorTrue olduğunda hata yanıtları LoraError istisnalarına dönüştürülür; False olduğunda ham yanıt çağırana döndürülür.