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ı¶
RF çıkış modları¶
Bantlar¶
Cihaz sınıfları¶
İ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_PARAMyanıtında ortaya çıkarılır.
- exception lora.LoraErrorBusy¶
Modem önceki bir komutu işlemekle meşgulken gelen
+ERR_BUSYyanıtında ortaya çıkarılır.
- exception lora.LoraErrorOverflow¶
Bir parametre izin verilen maksimum uzunluğu aştığında gelen
+ERR_PARAM_OVERFLOWyanıtında ortaya çıkarılır.
- exception lora.LoraErrorNoNetwork¶
Modem bir ağa katılmamışken gelen
+ERR_NO_NETWORKyanıtında ortaya çıkarılır.
- exception lora.LoraErrorRX¶
Bir downlink alınırken hata oluştuğunda gelen
+ERR_RXyanıtında ortaya çıkarılır.
- exception lora.LoraErrorUnknown¶
+ERR_UNKNOWNyanı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
banddeğerini yapılandırır.- Parametreler:
uart – Modemle iletişim kurmak için kullanılan önceden yapılandırılmış
machine.UARTörneği.Noneise 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.Noneise"PC6"push-pull çıkış olarak yapılandırılır.boot_pin – Modemin boot-select hattını süren
machine.Pin.Noneise"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.debug –
Trueolduğunda tüm UART trafiğiprint()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_pinveself.boot_pinhenü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
debugetkinleştirilmişsedatadeğerini yazdırır, aksi takdirde hiçbir şey yapmaz.
- is_arduino_firmware() bool¶
Modem Arduino MKRWAN
ARD-078aygıt yazılımını çalıştırıyorsa (önbelleğe alınmışfw_versiondizesinden tespit edilir)Truedöndürür.
- configure_band(band: int) bool¶
Bölgesel bandı yapılandırır ve
BAND_EU868ile Arduino aygıt yazılımında ETSI çalışma oranı sınırlayıcısını etkinleştirir. Başarılı olduğundaTruedöndürür.- Parametreler:
band –
BAND_*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
+OKile yanıt verene veyatimeoutmilisaniye geçene kadar boşATkomutları gönderir. Senkronizasyon başarılı olursaTruedö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.
- 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
LoraErrorortaya çıkarır.
- set_rf_power(mode: int, power: int) None¶
Modem RF çıkış katını yapılandırır (
AT+RFPOWER).- Parametreler:
mode –
RF_MODE_RFO,RF_MODE_PABOOSTdeğ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çinFalse.
- 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çinFalse.
- set_datarate(dr: int) None¶
LoRaWAN veri hızı indeksini ayarlar (
AT+DR).- Parametreler:
dr – Bölgeye özgü veri hızı indeksi.
- 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çinFalse.
- 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.
- 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.
- set_fcd(fcd: int) None¶
Downlink çerçeve sayacını ayarlar (
AT+FCD).- Parametreler:
fcd – Yeni downlink çerçeve sayacı değeri.
- join(timeout_ms: int) bool¶
Bir
AT+JOINkomutu verir ve katılma-kabul (join-accept) olayını bekler. Modemtimeout_msiçinde+EVENT=1,1bildirirse (katılma başarılı)Truedöndürür.- Parametreler:
timeout_ms – Hem
+ACKhem de sonraki katılma olayı için beklenecek milisaniye cinsinden maksimum süre.
- 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
64olarak sabittir.
- poll() None¶
Son çağrıdan bu yana
poll_msmilisaniyeden 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ükseLoraErrorortaya çıkarır.- Parametreler:
buff – İletilecek yük baytları.
confirmed –
Trueolduğunda onaylı bir uplink (+CTX) gönderir ve bir ağ sunucusu+ACKbekler.Falseolduğ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 haldeFalse.
- receive_data(timeout: int = 1000) dict | None¶
Bir downlink bekler.
timeoutmilisaniye içinde herhangi bir+RECVolayı alınmadıysaNone, 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_byteskarakter okunana veyatimeoutmilisaniye geçene kadar modemden karakter okur, ardından sondaki\rkı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ı.
- 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
Truedö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.
Noneise 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
LoraErroralt sınıfını ortaya çıkarır. Hata olmayan yanıtlar için hiçbir şey yapmaz.- Parametreler:
command –
dataü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¶
cmdveargsdeğerlerinden bir AT komutu oluşturur, isteğe bağlı olarak ham birdatayü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\rotomatik olarak eklenir.args – Dize dönüşümünden sonra
cmddeğerine eklenen ek argümanlar.delimiter –
receive()öğ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_error –
Trueolduğunda hata yanıtlarıLoraErroristisnalarına dönüştürülür;Falseolduğunda ham yanıt çağırana döndürülür.