lora — pilote de modem LoRa¶
Le module lora fournit un pilote pour le modem LoRa Murata CMWX1ZZABZ présent sur l’Arduino Portenta Vision Shield. Il expose une classe haut niveau Lora qui encapsule le jeu de commandes AT utilisé par le micrologiciel du modem (y compris le micrologiciel Arduino MKRWAN ARD-078), permettant ainsi à une application de rejoindre un réseau LoRaWAN et d’envoyer/recevoir des paquets.
Exemple
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)
Constantes¶
Modes d’activation¶
Modes de sortie RF¶
Bandes¶
Classes de périphériques¶
Exceptions¶
- exception lora.LoraError¶
Exception de base levée pour toute erreur renvoyée par le modem ou le pilote.
- exception lora.LoraErrorTimeout¶
Levée lorsque le modem ne répond pas dans le délai configuré (le tampon de réception est vide).
- exception lora.LoraErrorParam¶
Levée lors d’une réponse
+ERR_PARAMlorsqu’une commande AT a été émise avec un paramètre invalide.
- exception lora.LoraErrorBusy¶
Levée lors d’une réponse
+ERR_BUSYlorsque le modem est occupé à traiter une commande précédente.
- exception lora.LoraErrorOverflow¶
Levée lors d’une réponse
+ERR_PARAM_OVERFLOWlorsqu’un paramètre dépasse la longueur maximale autorisée.
- exception lora.LoraErrorNoNetwork¶
Levée lors d’une réponse
+ERR_NO_NETWORKlorsque le modem n’a pas rejoint de réseau.
- exception lora.LoraErrorRX¶
Levée lors d’une réponse
+ERR_RXlorsqu’une erreur survient pendant la réception d’une liaison descendante.
- exception lora.LoraErrorUnknown¶
Levée lors d’une réponse
+ERR_UNKNOWNou lorsque le modem signale une erreur non documentée.
Classes¶
- 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)¶
Construit un nouveau pilote de modem. Le constructeur initialise (ou crée automatiquement) l’UART et les broches de réinitialisation/démarrage, effectue une réinitialisation matérielle du module, réalise une synchronisation autobaud, redémarre le module, interroge sa version de micrologiciel et configure la
bandrégionale demandée.- Paramètres:
uart – Instance
machine.UARTpréconfigurée utilisée pour communiquer avec le modem. SiNone, le pilote ouvreUART(8, 19200)avec un cadrage 8N2 (la valeur par défaut du Portenta Vision Shield).rst_pin –
machine.Pinpilotant la ligne de réinitialisation du modem. SiNone,"PC6"est configurée comme sortie push-pull.boot_pin –
machine.Pinpilotant la ligne de sélection de démarrage du modem. SiNone,"PG7"est configurée comme sortie push-pull tirée à l’état bas.band – Bande régionale à configurer. L’une des constantes
BAND_*.poll_ms – Intervalle en millisecondes entre les liaisons montantes vides automatiques déclenchées par
poll()afin de maintenir ouverte la fenêtre de liaison descendante.debug – Lorsque
True, tout le trafic UART est affiché viaprint().
- LoraErrors: dict¶
Correspondance entre les chaînes de réponse d’erreur du modem (par ex.
"+ERR_BUSY") et la classe d’exception correspondante. Utilisée en interne parhandle_error().
- init_modem() None¶
Initialise paresseusement
self.uart,self.rst_pinetself.boot_pinavec leurs valeurs par défaut du Portenta Vision Shield si elles ne sont pas déjà définies. Appelée depuis le constructeur ; n’est normalement pas invoquée par le code utilisateur.
- debug_print(data: str) None¶
Affiche
datasidebuga été activé lors de la construction, sinon ne fait rien.
- is_arduino_firmware() bool¶
Renvoie
Truesi le modem exécute le micrologiciel Arduino MKRWANARD-078(détecté à partir de la chaînefw_versionmise en cache).
- configure_band(band: int) bool¶
Configure la bande régionale et, sur micrologiciel Arduino avec
BAND_EU868, active le limiteur de rapport cyclique ETSI. RenvoieTrueen cas de succès.- Paramètres:
band – L’une des constantes
BAND_*.
- set_baudrate(baudrate: int) None¶
Modifie le débit en bauds de l’UART du modem (
AT+UART).- Paramètres:
baudrate – Nouveau débit en bauds, en bits par seconde.
- set_autobaud(timeout: int = 10000) bool¶
Envoie des commandes
ATvides jusqu’à ce que le modem réponde par+OKou jusqu’à ce quetimeoutmillisecondes s’écoulent. RenvoieTruesi la synchronisation a réussi.- Paramètres:
timeout – Temps maximal à consacrer à la tentative, en millisecondes.
- get_fw_version() str¶
Interroge la chaîne de périphérique du modem (
AT+DEV?) et la version du micrologiciel (AT+VER?) et les renvoie sous la forme d’une seule chaîne séparée par des espaces.
- restart() None¶
Resynchronise le débit en bauds, redémarre le modem, relit la version du micrologiciel et réapplique la bande régionale configurée. Lève
LoraErroren cas d’échec.
- set_rf_power(mode: int, power: int) None¶
Configure l’étage de sortie RF du modem (
AT+RFPOWER).- Paramètres:
mode – L’une des valeurs
RF_MODE_RFO,RF_MODE_PABOOST.power – Indice de puissance de sortie, en unités spécifiques au micrologiciel.
- set_port(port: int) None¶
Configure le port applicatif LoRaWAN (1..223) utilisé par les appels
send_data()ultérieurs.- Paramètres:
port – FPort LoRaWAN.
- set_public_network(enable: bool) None¶
Active ou désactive le mot de synchronisation du réseau public.
- Paramètres:
enable –
Truepour le mot de synchronisation LoRaWAN public,Falsepour le mot privé.
- format(hexMode: bool) None¶
Sélectionne le format de données utilisé sur l’UART pour les octets de charge utile.
- Paramètres:
hexMode –
Truepour un format de charge utile ASCII-hex,Falsepour du binaire brut.
- set_datarate(dr: int) None¶
Définit l’indice de débit de données LoRaWAN (
AT+DR).- Paramètres:
dr – Indice de débit de données spécifique à la région.
- set_adr(adr: bool) None¶
Active ou désactive l’Adaptive Data Rate.
- Paramètres:
adr –
Truepour activer l’ADR,Falsepour le désactiver.
- get_nwk_skey() str¶
Renvoie la clé de session réseau (Network Session Key) actuelle sous forme de chaîne hexadécimale.
- get_appskey() str¶
Renvoie la clé de session applicative (Application Session Key) actuelle sous forme de chaîne hexadécimale.
- set_rx2dr(dr: int) None¶
Définit l’indice de débit de données utilisé pour la fenêtre de réception RX2.
- Paramètres:
dr – Indice de débit de données spécifique à la région.
- set_rx2freq(freq: int) None¶
Définit la fréquence utilisée pour la fenêtre de réception RX2.
- Paramètres:
freq – Fréquence en Hz.
- set_fcu(fcu: int) None¶
Définit le compteur de trames de liaison montante (
AT+FCU).- Paramètres:
fcu – Nouvelle valeur du compteur de trames de liaison montante.
- set_fcd(fcd: int) None¶
Définit le compteur de trames de liaison descendante (
AT+FCD).- Paramètres:
fcd – Nouvelle valeur du compteur de trames de liaison descendante.
- join(timeout_ms: int) bool¶
Émet un
AT+JOINet attend l’événement d’acceptation de la jonction. RenvoieTruesi le modem signale+EVENT=1,1(jonction réussie) dans le délaitimeout_ms.- Paramètres:
timeout_ms – Temps maximal d’attente à la fois pour le
+ACKet l’événement de jonction subséquent, en millisecondes.
- get_max_size() int¶
Renvoie la taille maximale de charge utile LoRaWAN, en octets, pour le débit de données actuel. Sur le micrologiciel Arduino, elle est fixée à
64.
- poll() None¶
Si plus de
poll_msmillisecondes se sont écoulées depuis le dernier appel, envoie une liaison montante confirmée vide pour vider les liaisons descendantes en attente. Destinée à être appelée fréquemment depuis la boucle principale de l’application.
- send_data(buff: bytes, confirmed: bool = True) bool¶
Transmet une liaison montante LoRaWAN. Lève
LoraErrorsibuffest plus grand queget_max_size().- Paramètres:
buff – Octets de charge utile à transmettre.
confirmed – Lorsque
True, envoie une liaison montante confirmée (+CTX) et attend un+ACKdu serveur réseau. LorsqueFalse, envoie une liaison montante non confirmée (+UTX).
- Renvoie:
Truesi le modem a accepté le paquet (et, pour les liaisons montantes confirmées, si le réseau l’a acquitté),Falsesinon.
- receive_data(timeout: int = 1000) dict | None¶
Attend une liaison descendante. Renvoie
Nonesi aucun événement+RECVn’a été reçu dans le délaitimeoutmillisecondes, sinon un dictionnaire{"port": str, "data": str}contenant le FPort et les octets de charge utile.- Paramètres:
timeout – Temps maximal d’attente, en millisecondes.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
Lecture UART bas niveau. Lit des caractères depuis le modem jusqu’à ce qu’un délimiteur soit trouvé, que
max_bytescaractères aient été lus, ou quetimeoutmillisecondes s’écoulent, puis renvoie la chaîne accumulée avec tout\rfinal supprimé.- Paramètres:
delimiter – Soit un caractère unique à faire correspondre à la fin du tampon, soit une chaîne multi-caractères à comparer à l’ensemble du tampon nettoyé, soit une liste de telles chaînes.
max_bytes – Si défini, renvoie dès qu’exactement ce nombre d’octets a été lu.
timeout – Délai global de lecture, en millisecondes.
- available() int¶
Renvoie le nombre d’octets actuellement disponibles dans le tampon de réception UART du modem.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
Bascule le modem en mode OTAA, programme les clés et EUI fournis, puis tente de rejoindre le réseau. Renvoie
Truesi la jonction a réussi.- Paramètres:
appEui – Application/Join EUI 64 bits sous forme de chaîne hexadécimale.
appKey – Application Key 128 bits sous forme de chaîne hexadécimale.
devEui – Device EUI 64 bits optionnel sous forme de chaîne hexadécimale. Si
None, le Device EUI programmé en usine est utilisé.timeout – Délai de jonction, en millisecondes.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
Bascule le modem en mode ABP, programme les adresses et clés fournies, puis tente de rejoindre. Renvoie le résultat de
get_join_status().- Paramètres:
nwkId – Identifiant réseau (actuellement ignoré par le micrologiciel).
devAddr – Device Address 32 bits sous forme de chaîne hexadécimale.
nwkSKey – Network Session Key 128 bits sous forme de chaîne hexadécimale.
appSKey – Application Session Key 128 bits sous forme de chaîne hexadécimale.
timeout – Délai de jonction, en millisecondes.
- handle_error(command: str, data: str) None¶
Inspecte une réponse du modem et lève la sous-classe
LoraErrorcorrespondante si elle représente une erreur. Ne fait rien pour les réponses sans erreur.- Paramètres:
command – La commande AT (sans le préfixe
AT) qui a produitdata.data – La chaîne de réponse renvoyée par le modem.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
Construit une commande AT à partir de
cmdetargs, ajoute éventuellement une charge utiledatabrute, la transmet et renvoie la réponse du modem. Pour les commandes d’interrogation se terminant par?, seule la partie valeur (la sous-chaîne après=) est renvoyée.- Paramètres:
cmd – Suffixe de commande AT (par ex.
"+JOIN","+DR=") ; le préfixe"AT"et le\rfinal sont ajoutés automatiquement.args – Arguments supplémentaires concaténés à
cmdaprès conversion en chaîne.delimiter – Délimiteur transmis à
receive().data – Octets bruts optionnels écrits immédiatement après la commande AT (utilisés pour les charges utiles de liaison montante binaires).
timeout – Délai de réponse, en millisecondes.
raise_error – Lorsque
True, les réponses d’erreur sont converties en exceptionsLoraError; lorsqueFalse, la réponse brute est renvoyée à l’appelant.