Un petit tutoriel pas à pas pour bien démarrer avec les cartes disponibles au fablab la Lopy4 de Pycom.
Plus d’infos ici
et des tutos ici
Merci à Sylvain Montagny de l’Université Savoie Mont Blanc pour l’accès à son Mooc LoRa et LoRaWAN pour l’internet des objets
Etape 1 : installation des outils logiciels
Les PC du fablab sont déjà installés avec Visual Studio Code. L’extension Pymakr2 est également installée. NE FAITES PAS d’UPDATE de version. Si vous allez installer cet outil sur votre PC perso, suivez les indications ci-dessous.
https://docs.pycom.io/gettingstarted/software/vscode/
Installation de Visual Studio Code et de l’extension Pymakr qui permet de reconnaitre la carte.
Il existe parfois des problèmes de compatibilité entre VSC et Pymakr notamment lors des sauts de version de VSC avec une mise à jour de Pymakr qui tarde un peu. Dans ce cas, vous pouvez rétrograder la version de VSC pour garder la compatibilité.
Selon la distribution Linux, peut nécessiter l’installation de pyserial. et de dialog.
python -m pip install pyserial (ou python3 -m pip install pyserial) sudo apt-get install dialog
Nécessite également NodeJS (sur Linux, à installer à partir d’un dépôt, sinon ici from the NodeJS website.).
apt-get install -y nodejs
Etape 2 : se connecter à la LoPy4 et lui donner quelques instructions
Pour comprendre l’utilisation de Pymakr dans VS Code (qui n’est pas si simple …), il faut consulter le Get Started et le what’s new.
Suivre les instructions pour communiquer avec la carte et tester des instructions en micro python directement sur la LoPy4 via le port USB :
https://docs.pycom.io/gettingstarted/
Connecter le device
Connectez le device sur un port USB, Sélectionnez le device dans VSCode/Pymakr:Devices, puis cliquez sur connecter le device (éclair). Puis cliquez sur Create terminal. Une fenêtre terminal doit s’ouvrir avec l’invite de commande >>> qui vous permet d’envoyer des commandes au device.
Vous pouvez tester ces instructions :
import pycom
pycom.heartbeat(False)
pycom.rgbled(0x330033)
Modifiez le code RGB pour changer de couleur à la led.
Quelques raccourcis et commandes bien utiles …
REPL (Read Evaluate Print Loop) est le nom donné à l’invite interactive de MicroPython accessible sur les appareils Pycom. Il permet de lancer des commandes et de tester du code Micro Python.
Voici les raccourcis clavier les plus utiles :
Ctrl-C : interrompt le code actuel en cours d’exécution, pour récupérer l’invite REPL >>>
Ctrl-D : sur une ligne vide, soft reset (pour un Hard reset, bouton noir RST juste à côté de la led RGB du LoPy)
Ctrl-F : effectue un « safe-boot » du périphérique sans relancer boot.py et main.py
Tab : auto-complétion
Vous pouvez les retrouver en cliquant sur l’onglet Extensions puis Pymakr > Details.
Vous pouvez également utiliser le menu contextuel de votre device (dans PYMAKR:DEVICES) : Stop script, Hard reset (pour lancer le code de la flash), Safeboot device (pour initialiser la carte sans lancer le code de la flash).
Si vous n’avez plus accès à l’invite de commandes REPL >>> parce que votre code a planté la carte, vous pouvez tout d’abord essayer le safe boot (menu contextuel du device, ou safe boot sur la carte voir ci-dessous).
Pour le safe boot sur la carte directement, appuyer en même temps sur le reset de la LoPy et le safe boot de l’expansion board (voir image ci-dessous) puis relâcher d’abord le reset de la LoPy (la led flashe orange).
Puis, une fois l’invite REPL récupérée, vous pouvez ré-initialiser la mémoire flash [5] :
import os
os.fsformat('/flash')
L’appui sur le bouton reset de la LoPy ré-initialise la carte mais relance le code chargé sur la mémoire flash !
Etape 3 : tester des exemples
Maintenant vous allez créer un projet Pymakr et y placer le code à charger sur le device. Dans le dossier de votre projet, il y aura les fichiers suivants : main.py , boot.py, pymakr.conf, et un dossier lib.
My-project
|-lib
| |- some_library.py
|-boot.py
|-main.py
Connecter le device
Sélectionnez le device dans VSCode/Pymakr, puis cliquez sur connecter le device. Une fenêtre terminal doit s’ouvrir avec l’invite de commande >>> qui vous permet d’envoyer des commandes au device (comme dans l’étape 2).
Créer le projet Pymakr
Dans VSCode/Pymakr, créez un nouveau projet Pymakr (Pymakr:Projects, create new project) et choisissez le dossier (ex : Documents) qui contiendra votre projet. Project name = nom du projet et nom du dossier qui contiendra les sources (ex : My-Project). Validez par entrée. Validez l’emplacement du projet (ex : Documents/My-Project) Choisissez le template empty project. remplacez empty project dans pymakr.conf par le nom de votre projet (ex : My-Project, utilisez le même nom que le dossier). Associez le device qui est branché sur l’ordinateur avec le projet (ADD DEVICES).
Compléter le main.py
Au moment de la création du projet, 3 fichiers ont été créés : main.py, boot.py et pymakr.conf.
Modifiez main.py en insérant le code que vous voulez tester (cf. 1er test ci-dessous avec le projet RGBLed)
Charger le device avec le code du projet (cf. 1er test ci-dessous)
Dans VSCode/Pymakr:Projects, sélectionnez le device associé au projet et cliquez sur sync project to device.
Une fois le code chargé, il faut faire un hard reset. 2 options : bouton à côté de la LED (reset de la Lopy), ou sur les … du device dans VSCode/Pymakr:Devices choisir Hard reset device.
Si le code est constitué d’une boucle infinie, alors vous n’avez plus accès à l’invite de commande. Le device est « occupé ». Pour retrouver la main, Ctrl+alt+C dans le terminal. Le code étant chargé dans le device, vous pouvez le relancer par un hard reset. De même si vous déconnectez le device de l’ordinateur, puis si vous le remettez sous tension, le code va se relancer automatiquement. Cela peut-être un problème si le code fait planter votre carte. Dans ce cas, il faut effectuer un safe boot dès que la mise sous tension de la carte (voir à l’étape 2).
1er test : utiliser la led RGB disponible pour vérifier que vous pouvez charger un programme sur la LoPy4
Le code est disponible ici [1].
2e test : récupérer l’adresse MAC LoRa du noeud
from network import LoRa import binascii lora = LoRa(mode=LoRa.LORA, region=LoRa.EU868) print(binascii.hexlify(lora.mac()).upper())
Vous en aurez besoin pour le TP2.
Etape 4 Constructeur et méthodes en lien avec LoRa pour la LoPy4
Sur cette page [4], on trouve des méthodes permettant d’initialiser les paramètres LoRa de la LoPy et de récupérer ou de modifier un certain nombre de paramètres.
- à partir de la datasheet de la LoPy4 [6], cherchez :
- le nom du chip Semtech qui réalise la transmission LoRa ;
- la sensibilité pour les spreading factor de 6 à 12 pour la bande 125 kHz (LNA Boost for band 1 à 868 MHz) ;
- à partir de la page [4], identifiez les paramètres que vous pouvez modifier en mode LoRa (dit LoRa RAW ou LoRa MAC).
- Faites la même chose pour le mode LoRaWAN.
Etape 5 : Say Hello! et paramétrage du LoRa MAC
Nous allons maintenant tester une transmission (TX -> RX) dite LoRa MAC ou LoRa RAW parmi les LoPy de la salle.
Le code est disponible ici [2].
Toutes les LoPy vont émettre puis recevoir des trames. Il faut donc au moins 2 LoPy qui émettent et reçoivent en même temps. Une boucle while avec un délai aléatoire est utilisée pour minimiser les risques que les deux LoPy transmettent en même temps.
- Insérez votre prénom dans le code. Exemple : ‘Hello I am Charlotte!’ Vérifiez qu’une ou plusieurs LoPy de la salle ont bien reçu votre message !
- En utilisant la méthode lora.stats(), affichez les paramètres de la transmission LoRa MAC. Notez le RSSI, le spreading factor (tx et rx), le tx-power, et le time on air sur le TX et le RX. Comparez le RSSI avec la sensibilité récupérée dans la data sheet à l’étape 4.Pourquoi le RSSI est-il à 0 sur le TX ?
- Il est possible de changer les paramètres de la transmission LoRa MAC en ajoutant des paramètres dans le constructeur de la classe LoRa. Changez par exemple le coding rate à LoRa.CODING_4_8. Observez la modification du tx_time_on_air. Il est possible que cela change également le RSSI sur le device RX. Cela dépend des conditions de transmission. Vérifiez.
Note : lorsque vous modifiez votre code, et si votre carte est bloquée, effectuez un safe boot (cf. Etape 2) avant de faire upload.
Avant de partir
- formatez la Lopy4
import os
os.fsformat('/flash')
- rangez-la dans le carton en faisant attention au câble d’antenne
TP Pour aller plus loin dans l’utilisation de la Lopy4 et de la couche PHY LoRa
consultez l’article https://telefab.fr/2021/10/04/aller-plus-loin-avec-la-lopy4/
Références bibliographiques
[1]https://docs.pycom.io/tutorials/basic/rgbled/
[2] https://docs.pycom.io/tutorials/networks/lora/lora-mac/
[3] https://docs.pycom.io/tutorials/networks/lora/module-module/
[4] https://docs.pycom.io/firmwareapi/pycom/network/lora/
[5] https://docs.pycom.io/gettingstarted/programming/safeboot/
[6] https://docs.pycom.io/gitbook/assets/specsheets/Pycom_002_Specsheets_LoPy4_v2.pdf