lora --- Driver modem LoRa¶
Modul lora menyediakan driver untuk modem LoRa Murata CMWX1ZZABZ pada Arduino Portenta Vision Shield. Modul ini mengekspos kelas Lora tingkat tinggi yang membungkus set perintah AT yang digunakan oleh firmware modem (termasuk firmware Arduino MKRWAN ARD-078) sehingga aplikasi dapat bergabung ke jaringan LoRaWAN dan mengirim/menerima paket.
Contoh:
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)
Konstanta¶
Mode aktivasi¶
Mode keluaran RF¶
Pita frekuensi¶
Kelas perangkat¶
Pengecualian¶
- exception lora.LoraError¶
Pengecualian dasar yang dimunculkan untuk setiap kesalahan yang dikembalikan oleh modem atau driver.
- exception lora.LoraErrorTimeout¶
Dimunculkan ketika modem tidak merespons dalam batas waktu yang dikonfigurasi (buffer penerimaan kosong).
- exception lora.LoraErrorParam¶
Dimunculkan pada respons
+ERR_PARAMketika perintah AT diberikan dengan parameter yang tidak valid.
- exception lora.LoraErrorBusy¶
Dimunculkan pada respons
+ERR_BUSYketika modem sibuk memproses perintah sebelumnya.
- exception lora.LoraErrorOverflow¶
Dimunculkan pada respons
+ERR_PARAM_OVERFLOWketika sebuah parameter melebihi panjang maksimum yang diizinkan.
- exception lora.LoraErrorNoNetwork¶
Dimunculkan pada respons
+ERR_NO_NETWORKketika modem belum bergabung ke jaringan.
- exception lora.LoraErrorRX¶
Dimunculkan pada respons
+ERR_RXketika terjadi kesalahan saat menerima downlink.
- exception lora.LoraErrorUnknown¶
Dimunculkan pada respons
+ERR_UNKNOWNatau ketika modem melaporkan kesalahan yang tidak terdokumentasi.
Kelas¶
- 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)¶
Membuat driver modem baru. Konstruktor menginisialisasi (atau membuat secara otomatis) pin UART dan reset/boot, mereset modul secara hardware, melakukan sinkronisasi autobaud, me-reboot modul, menanyakan versi firmwarenya, dan mengonfigurasi
bandregional yang diminta.- Parameter:
uart -- Instance
machine.UARTyang sudah dikonfigurasi untuk berkomunikasi dengan modem. JikaNone, driver membukaUART(8, 19200)dengan framing 8N2 (default Portenta Vision Shield).rst_pin --
machine.Pinyang menggerakkan jalur reset modem. JikaNone,"PC6"dikonfigurasi sebagai keluaran push-pull.boot_pin --
machine.Pinyang menggerakkan jalur pilih boot modem. JikaNone,"PG7"dikonfigurasi sebagai keluaran push-pull yang ditarik rendah.band -- Pita regional yang akan dikonfigurasi. Salah satu dari konstanta
BAND_*.poll_ms -- Interval dalam milidetik antara uplink kosong otomatis yang dipicu oleh
poll()untuk menjaga jendela downlink tetap terbuka.debug -- Ketika
True, semua lalu lintas UART dicetak melaluiprint().
- LoraErrors: dict¶
Pemetaan dari string respons kesalahan modem (misalnya
"+ERR_BUSY") ke kelas pengecualian yang sesuai. Digunakan secara internal olehhandle_error().
- init_modem() None¶
Inisialisasi malas
self.uart,self.rst_pindanself.boot_pinke default Portenta Vision Shield jika belum disetel. Dipanggil dari konstruktor; biasanya tidak dipanggil oleh kode pengguna.
- debug_print(data: str) None¶
Cetak
datajikadebugdiaktifkan saat konstruksi, jika tidak, tidak melakukan apa-apa.
- is_arduino_firmware() bool¶
Kembalikan
Truejika modem menjalankan firmware Arduino MKRWANARD-078(dideteksi dari stringfw_versionyang tersimpan).
- configure_band(band: int) bool¶
Konfigurasikan pita regional dan, pada firmware Arduino dengan
BAND_EU868, aktifkan pembatas duty-cycle ETSI. MengembalikanTruejika berhasil.- Parameter:
band -- Salah satu dari konstanta
BAND_*.
- set_baudrate(baudrate: int) None¶
Ubah laju baud UART modem (
AT+UART).- Parameter:
baudrate -- Laju baud baru, dalam bit per detik.
- set_autobaud(timeout: int = 10000) bool¶
Kirim perintah
ATkosong hingga modem merespons dengan+OKatau hinggatimeoutmilidetik berlalu. MengembalikanTruejika sinkronisasi berhasil.- Parameter:
timeout -- Waktu maksimum untuk mencoba, dalam milidetik.
- get_fw_version() str¶
Tanyakan string perangkat modem (
AT+DEV?) dan versi firmware (AT+VER?) lalu kembalikan keduanya sebagai satu string yang dipisahkan spasi.
- restart() None¶
Sinkronisasi ulang laju baud, reboot modem, baca ulang versi firmware, dan terapkan kembali pita regional yang dikonfigurasi. Memunculkan
LoraErrorjika gagal.
- set_rf_power(mode: int, power: int) None¶
Konfigurasikan tahap keluaran RF modem (
AT+RFPOWER).- Parameter:
mode -- Salah satu dari
RF_MODE_RFO,RF_MODE_PABOOST.power -- Indeks daya keluaran, dalam satuan spesifik firmware.
- set_port(port: int) None¶
Konfigurasikan port aplikasi LoRaWAN (1..223) yang digunakan oleh panggilan
send_data()berikutnya.- Parameter:
port -- FPort LoRaWAN.
- set_public_network(enable: bool) None¶
Aktifkan atau nonaktifkan sync word jaringan publik.
- Parameter:
enable --
Trueuntuk sync word LoRaWAN publik,Falseuntuk yang privat.
- format(hexMode: bool) None¶
Pilih format data yang digunakan melalui UART untuk byte payload.
- Parameter:
hexMode --
Trueuntuk format payload ASCII-hex,Falseuntuk biner mentah.
- set_datarate(dr: int) None¶
Setel indeks laju data LoRaWAN (
AT+DR).- Parameter:
dr -- Indeks laju data spesifik region.
- set_adr(adr: bool) None¶
Aktifkan atau nonaktifkan Adaptive Data Rate.
- Parameter:
adr --
Trueuntuk mengaktifkan ADR,Falseuntuk menonaktifkannya.
- set_rx2dr(dr: int) None¶
Setel indeks laju data yang digunakan untuk jendela penerimaan RX2.
- Parameter:
dr -- Indeks laju data spesifik region.
- set_rx2freq(freq: int) None¶
Setel frekuensi yang digunakan untuk jendela penerimaan RX2.
- Parameter:
freq -- Frekuensi dalam Hz.
- set_fcu(fcu: int) None¶
Setel penghitung bingkai uplink (
AT+FCU).- Parameter:
fcu -- Nilai penghitung bingkai uplink baru.
- set_fcd(fcd: int) None¶
Setel penghitung bingkai downlink (
AT+FCD).- Parameter:
fcd -- Nilai penghitung bingkai downlink baru.
- join(timeout_ms: int) bool¶
Keluarkan
AT+JOINdan tunggu event join-accept. MengembalikanTruejika modem melaporkan+EVENT=1,1(bergabung berhasil) dalamtimeout_ms.- Parameter:
timeout_ms -- Waktu maksimum untuk menunggu
+ACKdan event join berikutnya, dalam milidetik.
- get_max_size() int¶
Kembalikan ukuran payload LoRaWAN maksimum, dalam byte, untuk laju data saat ini. Pada firmware Arduino ini tetap di
64.
- poll() None¶
Jika lebih dari
poll_msmilidetik telah berlalu sejak panggilan terakhir, kirim uplink terkonfirmasi kosong untuk membuang downlink yang tertunda. Dimaksudkan untuk dipanggil secara sering dari loop utama aplikasi.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Kirim uplink LoRaWAN. Memunculkan
LoraErrorjikabufflebih besar dariget_max_size().- Parameter:
buff -- Byte payload yang akan dikirim.
confirmed -- Ketika
True, kirim uplink terkonfirmasi (+CTX) dan tunggu+ACKdari server jaringan. KetikaFalse, kirim uplink tidak terkonfirmasi (+UTX).
- Kembali:
Truejika modem menerima paket (dan, untuk uplink terkonfirmasi, jaringan mengakuinya),Falsejika tidak.
- receive_data(timeout: int = 1000) dict | None¶
Tunggu downlink. Mengembalikan
Nonejika tidak ada event+RECVyang diterima dalamtimeoutmilidetik, jika tidak sebuah dict{"port": str, "data": str}yang berisi FPort dan byte payload.- Parameter:
timeout -- Waktu maksimum untuk menunggu, dalam milidetik.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Baca UART tingkat rendah. Membaca karakter dari modem hingga delimiter cocok,
max_byteskarakter telah dibaca, atautimeoutmilidetik berlalu, kemudian mengembalikan string yang terkumpul dengan\rdi akhir dihapus.- Parameter:
delimiter -- Satu karakter tunggal untuk dicocokkan di akhir buffer, string multi-karakter untuk dicocokkan terhadap buffer yang sudah dipangkas secara keseluruhan, atau daftar string semacam itu.
max_bytes -- Jika disetel, kembalikan segera setelah tepat sebanyak ini byte telah dibaca.
timeout -- Batas waktu baca keseluruhan, dalam milidetik.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Ganti modem ke mode OTAA, program kunci dan EUI yang diberikan, lalu coba bergabung ke jaringan. Mengembalikan
Truejika bergabung berhasil.- Parameter:
appEui -- Application/Join EUI 64-bit sebagai string hex.
appKey -- Application Key 128-bit sebagai string hex.
devEui -- Device EUI 64-bit opsional sebagai string hex. Jika
None, Device EUI yang diprogram pabrik digunakan.timeout -- Batas waktu bergabung, dalam milidetik.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Ganti modem ke mode ABP, program alamat dan kunci yang diberikan, lalu coba bergabung. Mengembalikan hasil dari
get_join_status().- Parameter:
nwkId -- Pengidentifikasi jaringan (saat ini diabaikan oleh firmware).
devAddr -- Alamat Perangkat 32-bit sebagai string hex.
nwkSKey -- Network Session Key 128-bit sebagai string hex.
appSKey -- Application Session Key 128-bit sebagai string hex.
timeout -- Batas waktu bergabung, dalam milidetik.
- handle_error(command: str, data: str) None¶
Periksa respons modem dan munculkan subkelas
LoraErroryang cocok jika itu mewakili kesalahan. Tidak melakukan apa-apa untuk respons non-kesalahan.- Parameter:
command -- Perintah AT (tanpa awalan
AT) yang menghasilkandata.data -- String respons yang dikembalikan oleh modem.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Bangun perintah AT dari
cmddanargs, opsional tambahkan payloaddatamentah, kirimkan, dan kembalikan respons modem. Untuk perintah kueri yang berakhiran?, hanya bagian nilai (substring setelah=) yang dikembalikan.- Parameter:
cmd -- Sufiks perintah AT (misalnya
"+JOIN","+DR="); awalan"AT"dan\rdi akhir ditambahkan secara otomatis.args -- Argumen tambahan yang digabungkan ke
cmdsetelah konversi string.delimiter -- Delimiter yang diteruskan ke
receive().data -- Byte mentah opsional yang ditulis langsung setelah perintah AT (digunakan untuk payload uplink biner).
timeout -- Batas waktu respons, dalam milidetik.
raise_error -- Ketika
True, respons kesalahan dikonversi menjadi pengecualianLoraError; ketikaFalse, respons mentah dikembalikan ke pemanggil.