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#

lora.MODE_ABP: int#

Mode Aktivasi Melalui Personalisasi.

lora.MODE_OTAA: int#

Mode Aktivasi Over-The-Air.

Mode keluaran RF#

lora.RF_MODE_RFO: int#

Gunakan keluaran RF RFO (daya rendah) pada modem.

lora.RF_MODE_PABOOST: int#

Gunakan keluaran RF PA_BOOST (daya tinggi) pada modem.

Pita frekuensi#

lora.BAND_AS923: int#

Pita regional AS923 (Asia 923 MHz).

lora.BAND_AU915: int#

Pita regional AU915 (Australia 915 MHz).

lora.BAND_EU868: int#

Pita regional EU868 (Eropa 868 MHz).

lora.BAND_KR920: int#

Pita regional KR920 (Korea 920 MHz).

lora.BAND_IN865: int#

Pita regional IN865 (India 865 MHz).

lora.BAND_US915: int#

Pita regional US915 (Amerika Serikat 915 MHz).

lora.BAND_US915_HYBRID: int#

Rencana regional hibrida US915 (sub-pita).

Kelas perangkat#

lora.CLASS_A: str#

Perangkat akhir LoRaWAN Kelas A.

lora.CLASS_B: str#

Perangkat akhir LoRaWAN Kelas B.

lora.CLASS_C: str#

Perangkat akhir LoRaWAN Kelas C.

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_PARAM ketika perintah AT diberikan dengan parameter yang tidak valid.

exception lora.LoraErrorBusy#

Dimunculkan pada respons +ERR_BUSY ketika modem sibuk memproses perintah sebelumnya.

exception lora.LoraErrorOverflow#

Dimunculkan pada respons +ERR_PARAM_OVERFLOW ketika sebuah parameter melebihi panjang maksimum yang diizinkan.

exception lora.LoraErrorNoNetwork#

Dimunculkan pada respons +ERR_NO_NETWORK ketika modem belum bergabung ke jaringan.

exception lora.LoraErrorRX#

Dimunculkan pada respons +ERR_RX ketika terjadi kesalahan saat menerima downlink.

exception lora.LoraErrorUnknown#

Dimunculkan pada respons +ERR_UNKNOWN atau 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 band regional yang diminta.

Parameter:
  • uart -- Instance machine.UART yang sudah dikonfigurasi untuk berkomunikasi dengan modem. Jika None, driver membuka UART(8, 19200) dengan framing 8N2 (default Portenta Vision Shield).

  • rst_pin -- machine.Pin yang menggerakkan jalur reset modem. Jika None, "PC6" dikonfigurasi sebagai keluaran push-pull.

  • boot_pin -- machine.Pin yang menggerakkan jalur pilih boot modem. Jika None, "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 melalui print().

LoraErrors: dict#

Pemetaan dari string respons kesalahan modem (misalnya "+ERR_BUSY") ke kelas pengecualian yang sesuai. Digunakan secara internal oleh handle_error().

init_modem() None#

Inisialisasi malas self.uart, self.rst_pin dan self.boot_pin ke default Portenta Vision Shield jika belum disetel. Dipanggil dari konstruktor; biasanya tidak dipanggil oleh kode pengguna.

debug_print(data: str) None#

Cetak data jika debug diaktifkan saat konstruksi, jika tidak, tidak melakukan apa-apa.

is_arduino_firmware() bool#

Kembalikan True jika modem menjalankan firmware Arduino MKRWAN ARD-078 (dideteksi dari string fw_version yang tersimpan).

configure_class(_class: str) None#

Konfigurasikan kelas perangkat LoRaWAN.

Parameter:

_class -- Salah satu dari CLASS_A, CLASS_B, CLASS_C.

configure_band(band: int) bool#

Konfigurasikan pita regional dan, pada firmware Arduino dengan BAND_EU868, aktifkan pembatas duty-cycle ETSI. Mengembalikan True jika 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 AT kosong hingga modem merespons dengan +OK atau hingga timeout milidetik berlalu. Mengembalikan True jika 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.

get_device_eui() str#

Kembalikan EUI Perangkat 64-bit modem sebagai string hex.

factory_default() None#

Pulihkan pengaturan pabrik melalui AT+FACNEW.

restart() None#

Sinkronisasi ulang laju baud, reboot modem, baca ulang versi firmware, dan terapkan kembali pita regional yang dikonfigurasi. Memunculkan LoraError jika gagal.

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

Konfigurasikan tahap keluaran RF modem (AT+RFPOWER).

Parameter:
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 -- True untuk sync word LoRaWAN publik, False untuk yang privat.

sleep(enable: bool) None#

Masukkan modem ke mode tidur daya rendah (True) atau bangunkan (False).

format(hexMode: bool) None#

Pilih format data yang digunakan melalui UART untuk byte payload.

Parameter:

hexMode -- True untuk format payload ASCII-hex, False untuk biner mentah.

set_datarate(dr: int) None#

Setel indeks laju data LoRaWAN (AT+DR).

Parameter:

dr -- Indeks laju data spesifik region.

get_datarate() int#

Kembalikan indeks laju data LoRaWAN saat ini.

set_adr(adr: bool) None#

Aktifkan atau nonaktifkan Adaptive Data Rate.

Parameter:

adr -- True untuk mengaktifkan ADR, False untuk menonaktifkannya.

get_adr() int#

Kembalikan pengaturan ADR saat ini (1 jika diaktifkan, 0 jika tidak).

get_devaddr() str#

Kembalikan DevAddr 32-bit saat ini sebagai string hex.

get_nwk_skey() str#

Kembalikan Network Session Key saat ini sebagai string hex.

get_appskey() str#

Kembalikan Application Session Key saat ini sebagai string hex.

get_rx2dr() int#

Kembalikan indeks laju data yang digunakan untuk jendela penerimaan RX2.

set_rx2dr(dr: int) None#

Setel indeks laju data yang digunakan untuk jendela penerimaan RX2.

Parameter:

dr -- Indeks laju data spesifik region.

get_ex2freq() int#

Kembalikan frekuensi, dalam Hz, yang digunakan untuk jendela penerimaan RX2.

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.

get_fcu() int#

Kembalikan penghitung bingkai uplink saat ini.

set_fcd(fcd: int) None#

Setel penghitung bingkai downlink (AT+FCD).

Parameter:

fcd -- Nilai penghitung bingkai downlink baru.

get_fcd() int#

Kembalikan penghitung bingkai downlink saat ini.

change_mode(mode: int) None#

Ganti mode aktivasi.

Parameter:

mode -- Salah satu dari MODE_ABP, MODE_OTAA.

join(timeout_ms: int) bool#

Keluarkan AT+JOIN dan tunggu event join-accept. Mengembalikan True jika modem melaporkan +EVENT=1,1 (bergabung berhasil) dalam timeout_ms.

Parameter:

timeout_ms -- Waktu maksimum untuk menunggu +ACK dan event join berikutnya, dalam milidetik.

get_join_status() bool#

Kembalikan True jika modem saat ini tergabung ke jaringan.

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_ms milidetik 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 LoraError jika buff lebih besar dari get_max_size().

Parameter:
  • buff -- Byte payload yang akan dikirim.

  • confirmed -- Ketika True, kirim uplink terkonfirmasi (+CTX) dan tunggu +ACK dari server jaringan. Ketika False, kirim uplink tidak terkonfirmasi (+UTX).

Kembali:

True jika modem menerima paket (dan, untuk uplink terkonfirmasi, jaringan mengakuinya), False jika tidak.

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

Tunggu downlink. Mengembalikan None jika tidak ada event +RECV yang diterima dalam timeout milidetik, 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_bytes karakter telah dibaca, atau timeout milidetik berlalu, kemudian mengembalikan string yang terkumpul dengan \r di 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.

available() int#

Kembalikan jumlah byte yang saat ini tersedia di buffer penerimaan UART modem.

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 True jika 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 LoraError yang cocok jika itu mewakili kesalahan. Tidak melakukan apa-apa untuk respons non-kesalahan.

Parameter:
  • command -- Perintah AT (tanpa awalan AT) yang menghasilkan data.

  • 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 cmd dan args, opsional tambahkan payload data mentah, 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 \r di akhir ditambahkan secara otomatis.

  • args -- Argumen tambahan yang digabungkan ke cmd setelah 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 pengecualian LoraError; ketika False, respons mentah dikembalikan ke pemanggil.