Aller plus loin avec la LoPy4

Envoyé par le 4 Oct 2021

Voici quelques exercices pas à pas pour aller plus loin dans l’utilisation de la LoPy4 et la compréhension de la couche PHY du standard LoRa.

Si vous démarrez avec la LoPy4, consultez l’article Démarrer avec Lopy4 Pycom

Nous allons utiliser 2 LoPy4. l’une en émetteur (TX), l’autre en récepteur (RX).

Le code utilisé est celui du Ping Pong : Le code est disponible ici [1].

S’il y a plusieurs LoPy actives à proximité, choisissez qui sera le noeud TX et le noeud RX et particularisez la transmission.

Exemple pour la transmission dite A:

Côté TX :

s.send('PingA')

Côté RX :

if s.recv(64) == b'PingA':

Les méthodes utilisées sont celles présenteés sur cette page [2].

Vous pouvez par exemple récupérer la taille de la bande ou la modifier :

# get raw LoRa Bandwidth
lora.bandwidth()

# set raw LoRa Bandwidth
lora.bandwidth(LoRa.BW_125KHZ)

Pour cela, vous aurez sans doute besoin de lire la valeur des constantes (print). Par exemple :  LoRa.CODING_4_5 , LoRa.ALWAYS_ON, LoRa.BW_125KHZ, etc. [2].

Utilisez la commande print pour voir l’effet de la modification des paramètres. Exemple :

print('Coding rate {}'.format(lora.coding_rate()))

À chaque modification du code, vous devez rebooter le device (ctrl+alt+f sur VSC), puis relancer un run ou charger le code à nouveau.

Les paramètres typiques d’une transmission LoRa en Europe sont détaillés dans [8].

1) Récupérer les paramètres LoRa d’une transmission

À partir de la méthode lora.stats(),

  1. Du côté TX,  identifiez les paramètres suivants liés à l’émission de data:  spreading factor, puissance émise, fréquence utilisée, time on air
  2. Du côté RX, identifiez les paramètres liés à la réception de data : spreading factor, RSSI, SNR

Faire attention aux unités

À partir d’autres méthodes (à chercher sur  [2]), identifiez :

  1. bande de transmission,
  2. coding rate,
  3. power mode,
  4. taille de préambule

Pour cela, vous aurez sans doute besoin de lire la valeur des constantes (print). Par exemple :  LoRa.CODING_4_5 , LoRa.ALWAYS_ON, LoRa.BW_125KHZ, etc. Ou bien consultez [2].

2) Faire varier le RSSI

Dans cette partie, nous supposons que vous avez appairé 2 Lopy ensemble (A et B), en particularisant la transmission.  

Côté TX (A) :
s.send('PingA')
Côté RX (B) :
if s.recv(64) == b'PingA'

s.send('PongB')

En modifiant l’environnement de transmission

Exemple 1 : antenne couchée ou debout

Exemple 2 : éloigner les 2 noeuds, placer les noeuds derrière des objets, etc

Laissez passer plusieurs trames et observez sur plusieurs trames avant de changer l’environnement.

Quel impact sur le RSSI  côté RX B ? Expliquez.

En arrêtant l’émission du Pong

Côté RX B, commenter la  partie :
s.send('PongB')

pour arrêter l’émission du Pong. Re-initialisez les 2 Lopy.

Quel impact sur le sftx côté RX ? sur le time on air ? Expliquez.

Quel impact sur le RSSI et le sfrx côté TX  A ? Expliquez.

En modifiant la puissance d’émission

Quelle est la puissance d’émission par défaut ? Diminuez la puissance d’émission d’un des 2 devices et observez le RSSI de l’autre côté.

Issu de la documentation Pycom [9] :

Vérifier les RSSI typiques

À l’aide de la data sheet ([5] p.20), vérifiez que les RSSI observés sont typiques d’une transmission LoRa.

Comparez les RSSI observés avec les RSSI limite (receiver sensitivity). Attention au spreading factor utilisé.

3) Faire varier le time on air

En faisant varier la taille du message

Modifiez la taille du message envoyé pour faire varier le time on air.

Calculez le nombre d’octets (bytes) de votre message [7]

À l’aide du calculateur https://loratools.nl/#/airtime [4],  des paramètres de transmission et du nombre d’octets du message, calculez le time on air. Comparez-le au  time on air observé.

Quel est le duty cycle pour la bande ISM Europe ? Comment la taille du message influence le temps d’attente entre 2 envois ? [6]

Donnez la valeur du duty cycle pour votre message telle que calculé  dans [4]et vérifiez que cela correspond bien au duty cycle de la réglementation.

En faisant varier le coding rate

Quel est le time on air pour un coding rate à l’émetteur de 4/5 ? Idem pour 1/2. Déduisez quel est l’impact du coding rate sur le time on air.

Quel est l’avantage d’un coding rate de 1/2 par rapport à celui de 4/5 ?

4) Faire varier le spreading factor

Changez le spreading factor à l’émetteur de 7 à 8 : à partir du constructeur à l’initialisation, ou à partir de la méthode lora.sf()

Observez le récepteur. Pourquoi le message n’est-il pas reçu ?

Rendez cohérent le spreading factor du côté du récepteur (sf=8).

Observez  les variations sur le time on air. À partir de la formule de calcul du Time On Air, montrer que ce dernier double lorsqu’on augmente le SF d’un point.

Comparez la sensibilité minimale donnée dans la datasheet ([5], p.20) avec les RSSI mesurés pour différentes valeurs du SF. Pourquoi le RSSI diminue-t-il lorsque le SF augmente ?

Prochaine étape : mettre en place une communication via le réseau The Things Network

Mini-projet capteur météo et LoRaWAN avec la Lopy4

Références bibliographiques

[1] https://gitlab.imt-atlantique.fr/clanglai/tp-lora-cooc

[2] https://docs.pycom.io/firmwareapi/pycom/network/lora/

[3] https://www.mobilefish.com/developer/lorawan/lorawan_quickguide_tutorial.html

[4] https://loratools.nl/#/airtime

[5] https://docs.pycom.io/gitbook/assets/specsheets/Pycom_002_Specsheets_LoPy4_v2.pdf

[6] https://www.thethingsnetwork.org/docs/lorawan/duty-cycle/

[7] « Fichier:ASCII-Table-wide.svg — Wikipédia ». https://commons.wikimedia.org/wiki/File:ASCII-Table-wide.svg(consulté le oct. 19, 2021).

[8] « LoRa Regional Parameters », The Things Network. https://www.thethingsnetwork.org/docs/lorawan/regional-parameters/ (consulté le 26 septembre 2023).

[9] « 5.2.2.4 LoRa · Pycom Documentation ». https://alepycom.gitbooks.io/pycom-documentation/content/chapter/firmwareapi/pycom/network/lora.html (consulté le 26 septembre 2023).

 

Laisser une réponse

Votre adresse e-mail ne sera pas publiée.