TP Guide WAVRANT MARRAGOU

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 27

Compte-rendu de TER 2021/22

Guide de TP d’initiation IoT LoRa


avec matériel LoPy

Encadrant : P. Berthou
Ce projet a été réalisé en continuité du travail déjà réalisé par
Cheikh Tidiane Camara lors du TER 2020/21.

Guillaume Wavrant Marine Marragou


Guide de TP d’initiation IoT
LoRa avec matériel LoPy

Ce sujet a été réalisé dans le cadre d’un TER proposé par


M. Berthou à la promotion 2020/21 et 2021/22 du Master 1 SME.
La version ici présente ne nécessite aucune connaissance en STM32.
Sommaire

Installation de la partie développement python 4


Installation de la partie Chirp Stack sous Linux 5
Network server 5
Application server 7
Gateway bridge 8
Configuration de la Gateway et de l’interface web 9
Gateway 9
Interface Web 11
Liste du matériel spécifique au TP :
- Antennes X2
- LoPy4 PYCOM
- Expansion board 3.0 PYCOM
- Temp&Humi Sensor (SHT31) GROVE
- Raspberry PI 3
- IC880A LoRa concentrator IMST GMBH
- Nécessaire de câblage et d’alimentation

I. Installation de la partie développement python


Comme outil de développement python, nous avons utilisé Visual Studio Code et
Atom. Atom est installable en utilisant les commandes suivantes :

wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add


-

sudo sh -c 'echo "deb [arch=amd64]


https://packagecloud.io/AtomEditor/atom/any/ any main" >
/etc/apt/sources.list.d/atom.list'

sudo apt-get update

sudo apt-get install atom

Installez Visual Studio Code avec :

sudo apt-get install wget gpg


wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >
packages.microsoft.gpg

sudo install -o root -g root -m 644 packages.microsoft.gpg


/etc/apt/trusted.gpg.d/

sudo sh -c 'echo "deb [arch=amd64,arm64,armhf


signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg]
https://packages.microsoft.com/repos/code stable main" >
/etc/apt/sources.list.d/vscode.list'

rm -f packages.microsoft.gpg

sudo apt install apt-transport-https


sudo apt update

sudo apt install code # or code-insiders


Pour l'utilisation de la carte Pycom, Il faut ajouter l’extension Pymakr à Atom et Visual
studio code. Elle sert, par le biais d'une console REPL, à faciliter le chargement du
programme sur la carte.

De plus Il faut ajouter ajouter le langage python :

sudo apt-get install python3.7

Puis le gestionnaire pip :

sudo apt install python3-pip

Installer la bibliothèque psycopg2 qui permet de faciliter les requêtes faite à un serveur
PostgreSQL :

pip install psycopg2 ou pip install psycopg2-binary

II. Installation de la partie Chirp Stack sous Linux

Ce TP est réalisable sous Windows cependant celui-ci allonge considérablement le


temps de préparation de la séance. Nous conseillons donc fortement de réaliser ce TP sous un
OS Linux Debian ou Ubuntu. Il est aussi possible de la faire sous Fedora mais vous devrez
alors récupérer de nouveaux fichiers dans l’onglet téléchargement puis RedHat/Centos du site
de Chirp Stack.

a. Network server

Pré-requis : Afin d’installer le network server, nous aurons besoin de bases de données et
d’un courtier MQTT. Nous allons donc installer Redis, PostgreSQL et Mosquitto.

PostgreSQL : Il est utilisé par le network server pour conserver les données de la Gateway
dans une base de données. Vous pouvez l’installer avec sudo apt install
postgresql.

Redis : Il est utilisé pour conserver les données de session du périphérique ainsi que les
données non persistantes comme les données en double. Installez le avec
sudo apt install redis-server.

Mosquitto : Le network server l’utilise pour publier et recevoir des charges utiles
d’application. Vous pouvez l’installer via sudo apt install mosquito.
Vous devrez ensuite activer les softwares selon les distributions via la commande appropriée
pour Mosquitto et Redis :

Systemd :
sudo systemctl [start|stop|restart|status] <Nom_du_soft>
init.d :
sudo /etc/init.d/<Nom_du_soft> [start|stop|restart|status]

Configuration : Nous allons maintenant créer la base de données grâce à PostgreSQL :

➢ Vous devez démarrer en tant que super utilisateur Postgre avec


sudo -u postgres psql
➢ Créez un rôle et un utilisateur avec un mot de passe qui deviendra le propriétaire de la
base de données avec
create role chirpstack_ns with login password 'dbpassword';
➢ Créez ensuite les bases de données en précisant le propriétaire avec
create database chirpstack_ns with owner chirpstack_ns
➢ Quittez avec \q

Remarque : Les noms chirpstack_ns peuvent être modifiés arbitrairement.

➢ Vérifiez que la base de données est correctement crée en s’y connectant via
psql -h localhost -U chirpstack_ns -W chirpstack_ns

Installation : Nous allons installer le fichier binaire précompilé.


➢ Activez le dépôt avec
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
1CE2AFD36DBCCA00

sudo echo "deb


https://artifacts.chirpstack.io/packages/3.x/deb stable main" |
sudo tee /etc/apt/sources.list.d/chirpstack.list

sudo apt update


➢ Installez le network server de Chirp Starck avec
sudo apt install chirpstack-network-server
➢ Avant de lancer le network server, configurez le fichier via
/etc/chirpstack-network-server/chirpstack-network-server.toml
.
Utilisez la commande sudo nano <chemin> puis modifiez les champs suivants avec
les informations appropriées et le mot de passe précédemment créé :
postgres://chirpstack_ns:dbpassword@localhost/chirpstack_ns?s
slmode=disable
Pensez également à éditer le plan de fréquence avec name = "EU868"
➢ Activez le software selon les distributions en tapant la commande appropriée :

Systemd :
sudo systemctl [start|stop|restart|status]
chirpstack-gateway-bridge
init.d :
sudo /etc/init.d/chirpstack-gateway-bridge
[start|stop|restart|status]

b. Application server

Configuration : Vous allez procéder comme pour le network server afin de créer les bases de
données PostgreSQL.

➢ Connectez-vous en tant que super utilisateur avec sudo -u postgres psql


➢ Créez deux rôles avec des mots de passe via
create role chirpstack_as with login password 'dbpassword';
create role chirpstack_as_events with login password
'dbpassword';
➢ Créez les bases de données de l’application server avec
create database chirpstack_as with owner chirpstack_as;
create database chirpstack_as_events with owner
chirpstack_as_events;
➢ A la différence du network server, vous aurez besoin d’extensions. Connectez-vous à
la base de données via \c chirpstack_as et \c chirpstack_as_events
➢ Ajoutez des extensions à la base chirpstack_as via
create extension pg_trgm;
create extension hstore;
create extension hstore;
➢ Quittez avec \q
➢ Vérifiez que nos bases de données ont été correctement créées en s’y connectant via
psql -h localhost -U chirpstack_as -W chirpstack_as
psql -h localhost -U chirpstack_as_events -W
chirpstack_as_events

Installation : Nous allons installer le fichier binaire précompilé.

➢ Le dépôt est normalement déjà activé mais si ce n’est pas le cas, tapez
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
1CE2AFD36DBCCA00
sudo echo "deb
https://artifacts.chirpstack.io/packages/3.x/deb stable main" |
sudo tee /etc/apt/sources.list.d/chirpstack.list

sudo apt-get update


➢ Installez l’application server de Chirp Stack avec
sudo apt-get install chirpstack-application-server
➢ Configurez le fichier avant de lancer l’application server via
/etc/chirpstack-application-server/chirpstack-application-ser
ver.toml
Utilisez la commande sudo nano <chemin> puis modifiez les champs suivants avec
les informations appropriées et le mot de passe précédemment crée :
dsn=”postgres://chirpstack_as:dbpassword@localhost/chirpstack_as?sslmo
de=disable”
➢ Cherchez la balise [application_server.integration] dans le fichier.
Modifiez enabled=[”MQTT”] en enabled=[”MQTT”,”postgresql”] puis
ajoutez [application_server.integration]
dsn=”postgres://chirpstack_as_events:dbpassword@localhost/chirpstack_a
s_events?sslmode=disable” en dessous
➢ Activez le software selon les distributions avec la commande appropriée :

Systemd :
sudo systemctl [start|stop|restart|status]
chirpstack-gateway-bridge
init.d :
sudo /etc/init.d/chirpstack-gateway-bridge
[start|stop|restart|status]

c. Gateway bridge

Nous avons décidé d’installer la Gateway bridge sur la machine hébergeant le serveur
réseau et le serveur application.

➢ Activez le dépôt avec


sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
1CE2AFD36DBCCA00

sudo echo "deb


https://artifacts.chirpstack.io/packages/3.x/deb stable main" |
sudo tee /etc/apt/sources.list.d/chirpstack.list

sudo apt update


➢ Installez ensuite le Gateway bridge de Chirp Stack via
sudo apt install chirpstack-gateway-bridge
➢ Activez le software selon les distributions avec la commande appropriée :

Systemd :
sudo systemctl [start|stop|restart|status]
chirpstack-gateway-bridge
init.d :
sudo /etc/init.d/chirpstack-gateway-bridge
[start|stop|restart|status]

II. Configuration de la Gateway et de l’interface web

Nous utilisons un Raspberry PI 3 avec Wifi intégré et un concentrateur IC880A


comme Gateway.

a. Gateway

Vous allez commencer par installer l’OS sur la carte SD du Raspberry PI 3. Nous
aurons donc besoin du logiciel Raspberry pi manager :
Installez le sous Linux via sudo apt install rpi-imager ou récupérer le .exe sur
https://www.raspberrypi.com/software/ pour Windows.
Récupérez ensuite la carte SD afin de l'insérer dans votre ordinateur et suivez les instructions
du logiciel. Choisissez l’OS sans le bureau intégré et flashez la carte SD.

Utilisez la communication SSH pour accéder à votre Raspberry. Elle permet d’avoir accès à
distance au Raspberry grâce à internet lorsque l’ordinateur et le Raspberry sont connectés au
même routeur :

➢ Activez la connexion SSH en créant un fichier SSH sans extension dans la partition
Boot de la carte SD
➢ Connectez votre Raspberry à votre box internet en configurant le fichier
wpa_supplicant.conf sous la partition de la carte SD. Ajoutez les lignes
ci-dessous en remplaçant MaBoxInternet par le nom de votre box et
ClefSecurite par son mot de passe :

network={
scan_ssid=1
ssid="MaBoxInternet"
psk="ClefSecurite"
}
➢ Modifiez le fichier dhcpd.conf dans la partition Roots en ajoutant en fin de fichier
le code suivant afin de créer des adresses IP static qui permettront de se connecter via
SSH. Modifiez les adresses IP du routeur et du nom de domaine serveur par les
informations de votre routeur et l’IP address par l’adresse de votre choix en évitant les
conflits avec d’autres appareils. Cette adresse servira durant la séance de TP, il
pourrait donc être judicieux d’évoquer la salle du TP par exemple. :

Si connexion par Ethernet :


interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Si connexion par Wi-Fi :


interface wlan0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

➢ Réinstallez la carte SD dans la Raspberry et commencez la connexion SSH. Le nom


d’utilisateur par défaut est pi et le mot de passe raspberry :

Sous Linux :
Entrez dans le terminal :

Sous Windows :
Téléchargez PuTTY en ligne. Ouvrez putty.exe et la fenêtre ci-dessous devrait s’ouvrir :
Rentrez l’adresse IP de votre Raspberry dans le champ Host Name et cliquez sur Open. Vous
devriez voir un terminal avec comme utilisateur.

➢ Nous devons maintenant installer le packet forwarder et le pilote SX1301/HAL de


Semtech en entrant les commandes suivantes :

git clone https://github.com/Lora-net/lora_gateway.git


git clone https://github.com/Lora-net/packet_forwarder.git

➢ Entrez la commande suivante pour remplacer le fichier de configuration :

mv packet_forwarder/lora_pkt_fwd/cfg/global_conf.json.PCB_E336.EU868.basic
packet_forwarder/lora_pkt_fwd/global_conf.json

➢ Modifiez ensuite le fichier global_conf.json et local_conf.json avec :

sudo nano <nom_fichier>

Nous allons maintenant changer l’ID de la Gateway en un EUI de 64 bits. Il existe des
convertisseurs d’adresse MAC en EUI 64bit sur le web. Pensez à noter les adresses ID et IP.

➢ Récupérez l’adresse MAC de la Raspberry avec ifconfig


➢ Changez l’ID Gateway dans global_conf.json et local_conf.json
➢ Modifiez l’adresse IP du serveur dans le fichier global_conf.json
➢ Entrez ensuite dans le dossier lora_gateway et faites un make all
➢ Reproduisez l’opération dans le dossier packet_forwarder/lora_pkt_fwd

b. Interface Web

Configuration : Connectez vous à http://localhost:8080/. L’utilisateur par défaut est admin et


le mot de passe est également admin.

➢ Créez le network server sur l’interface :


- Entrez un nom dans le champ Network-server name*
- Entrez localhost:8000 dans le champ network-server server*. Vous pouvez
remplacer localhost par l’adresse IP où est hébergé le network server.
➢ Créez le Gateway Profil :
- Rentrez un nom pour le profil dans le champ Name*
- Entrez 30 dans Stats interval* et 1,2 et 3 dans Enabled channels*
- Sélectionnez ensuite votre network server
➢ Créez une organisation :
- Rentrez un nom d’organisation et d’affichage
- Cochez la case Organisation can have gateways
- Entrez le nombre max de Gateways et Devices
➢ Créez un service profile :
- Donnez-lui un nom
- Ajouter le network server et ne cochez pas les cases suivantes
- Ajoutez la fréquence de requête du End Node par jour
- Fixer les débits max et min (au choix)

➢ Créez un Device profile :


- Dans l’onglet général :
- Donnez-lui un nom
- Rentrez la version : LoRaWAN MAC version 1.0.2
- Rentrez le paramètre révision régional : LoRaWAN RP002-1.0.1
- Laissez l’algorithme ADR par défaut
- Mettez le Max EIRP à 0
- Rentrez l’intervalle Uplink : 30

- Dans l’onglet join (OTAA/ABP) :


- Cochez la case Device supports OTAA

➢ Créez une application :


- Donnez-lui un nom et une description
- Sélectionnez le service profile précédemment crée

La préparation pour le TP est terminée. N’oubliez pas de fournir aux étudiants les adresses IP
de la Raspberry et de la machine où est hébergé le Gateway bridge, l’application server et le
network server ainsi que l’ID de la Gateway.
Compte-rendu de TER 2021/22
Sujet de TP d’initiation IoT LoRa
avec matériel LoPy

Encadrant : P. Berthou
Ce projet a été réalisé en continuité du travail déjà réalisé par
Cheikh Tidiane Camara lors du TER 2020/21.

Guillaume Wavrant Marine Marragou


TP d’initiation IoT LoRa
avec matériel LoPy

Ce sujet a été réalisé dans le cadre d’un TER proposé par


M. Berthou à la promotion 2020/21 et 2021/22 du Master 1 SME.
La version ici présente ne nécessite aucune connaissance en STM32.

2
TABLE DES MATIÈRES
TABLE DES MATIÈRES 3

I - Introduction 4
II - END NODES 4
Allumer une LED avec un LoPy 4
Connecter un capteur et afficher ses données sur la console 4
III - Communication LoRa avec la Gateway 5
Branchement du Raspberry Pi 3 avec le concentrateur IC880A 5
Vérification du fonctionnement de la Gateway 7
IV - Application server 8
Configuration de l’interface web 8
Envoyer des données du LoPy vers l’application server 9
Récupération des données du serveur grâce à un script Python 9
V - Annexes 9

3
I - Introduction
L’internet des objets (IoT) décrit l’interconnexion des objets et internet. Il permet
notamment de pouvoir récolter des données en temps réel à distance via différents réseaux de
communication comme le réseau mobile, le Wifi ou les réseaux basse consommation.
LoRaWAN (Long Range Wide-Area Network) fait partie de ces protocoles de
communication longue distance à faible consommation d’énergie. Il utilise LoRa qui est une
technique de modulation à spectre étalé en Chirp ce qui lui permet de débiter sur une bande
passante de 125kHz. LoRaWAN peut être déployé partout dans le monde grâce à son
indépendance des réseaux externes. Il se compose de 4 éléments principaux : les appareils
LoRa, les Gateways, le Network Server et l’Application Server :

Ce TP est une introduction à l’utilisation du protocole LoRaWAN dont l’objectif final


est d’afficher la température de la salle de TP voisine sur votre écran d’ordinateur. Toutes les
étapes nécessaires à la réussite de ce TP sont listées dans ce sujet. Vous devrez néanmoins
demander certaines adresses à votre enseignant.

II - END NODES
Objectif : Mesurer la température de la salle de TP avec le LoPy et un SHT31.

Matériel : LoPy4 + Grove Temp and Humi Sensor SHT31 + Expansion board

La LoPy4 est une carte programmable miniature en micropython. Elle est utilisée
comme plateforme simple d’utilisation vers le LoRa. Le layout des pins est disponible sur
https://docs.pycom.io/gitbook/assets/lopy4-pinout.pdf.

4
a. Allumer une LED avec un LoPy

Le but de cette partie est purement de découvrir un premier script extrêmement simple
en micropython :

➢ Ouvrez Visual Studio Code.


➢ Créez un nouveau fichier en langage python.
➢ Tapez le code suivant dans votre nouveau fichier :

import pycom

pycom.heartbeat(False) # heartbeat fait clignoter la LED par défaut donc on le désactive.


pycom.rgbled(0xff00) #rgbled prend en paramètre un mot hexadécimal définissant une couleur.

➢ Compilez.
➢ Installez votre LoPy à l’expansion board (reset côté port micro USB) puis connectez
via USB l’ordinateur et téléversez.

Vous devriez observer une LED du LoPy s’allumer fixement.

b. Connecter un capteur et afficher ses données sur la console

Vous allez maintenant introduire le capteur de température à votre projet actuel. Ce


capteur est le Grove Temp and Humi Sensor SHT31 dont la datasheet est disponible sur
https://wiki.seeedstudio.com/Grove-TempAndHumi_Sensor-SHT31/. En résumé, il utilise un
protocole I2C, la commande a envoyer est 0x2400 et l’adresse du capteur est 0x44 :

➢ Commencez les branchements du capteur vers le LoPy en regardant le layout


disponible en début de partie II :
○ GND vers GND
○ VCC vers 5V
○ SDA vers SDA
○ SCL vers SCL

5
➢ Ouvrez Visual Studio Code
➢ Créez un nouveau fichier en langage python.
➢ Tapez le code suivant dans votre nouveau fichier :

from machine import I2C

import time

i2c = I2C(0)

i2c.init(I2C.MASTER)

while True :

i2c.writeto(0x44, "0x2400", stop = True)

time.sleep(0.02)

temperature = i2c.readfrom(0x44,2)

print("T =" + temperature)

time.sleep(2)

➢ Compilez et téléversez.
➢ Contrôlez l’affichage de la température sur votre écran.

Notre capteur fonctionne maintenant correctement avec le LoPy.

III - Communication LoRa avec la Gateway

Objectif : Créer la Gateway.

Matériel : Raspberry Pi 3 + IC880A + Antenne

La Gateway va permettre de récupérer les données du End Node (capteur de


température) et de les transmettre à l’application server par le biais du Gateway Bridge et du
Network server. Cette Gateway est composée d’un Raspberry Pi 3 permettant la
communication avec le serveur et d’un concentrateur IC880A permettant lui la réception des
données par la communication LoRa avec le End Node.
Le IC880A et le Raspberry pi 3 communiquent avec le protocole SPI.

6
a. Branchement du Raspberry Pi 3 avec le concentrateur IC880A

Le layout de notre Raspberry est donné ci-dessous :

Le layout du concentrateur est lui donné par l’image et le tableau récapitulatif suivants :

7
La communication SPI fait intervenir la CLK (14), le MISO (15), le MOSI (16) ainsi que le
NSS (17) du concentrateur. Ces broches doivent être respectivement reliées au SPIO SCLK
(23), SPIO MISO (21), SPIO MOSI (19), et SPIO CSO (24) du côté Raspberry. Vous devez
également relier GND et VDD (5V). N’oubliez pas de relier une antenne à votre
concentrateur suivant l’image ci-dessous :

Important : Le pin 13 du concentrateur correspond au reset. Celui-ci peut être source de


problèmes et doit être connecté à un GPIO du Raspberry (GPIO 21).

➢ Réalisez vos branchements. Votre montage doit correspondre au suivant :

8
➢ Vérifiez votre montage avant d’alimenter la Raspberry via le câble micro USB.

La Gateway est maintenant assemblée et prête à être testée.

b. Vérification du fonctionnement de la Gateway

Vous avez maintenant besoin d’accéder à notre Raspberry. Vous utiliserez la


communication SSH qui donne cet accès grâce à internet lorsque le Raspberry et votre
ordinateur sont connectés au même routeur. Afin de se connecter, vous devez obtenir
l’adresse IP de votre Raspberry puis suivre les étapes suivantes :

Remarque : Le nom d’utilisateur par défaut est pi et le mot de passe raspberry.

***************************************************************************

Sous Linux : Il suffit d’entrer dans le terminal.

Sous Windows : Ouvrez putty.exe. Vous devriez voir la fenêtre suivante apparaître :

9
Rentrez l'adresse IP de votre Raspberry dans la case “Host Name” puis cliquez sur
“Open”. Vous devriez observer un terminal s’ouvrir avec
comme utilisateur.

***************************************************************************

Rentrez le nom d’utilisateur et le mot de passe dans la fenêtre qui s’affiche alors si vous avez
correctement réalisé les étapes précédentes.

Vous êtes maintenant connecté à votre Raspberry et pouvez donc utiliser votre terminal dédié
pour diriger votre Gateway.

➢ Affichez les dossiers disponibles avec la commande ls. Vous devriez trouver deux
dossiers (packet_forwarder et lora_gateway).
➢ Utilisez la commande pour accéder au dossier lora_gateway.
➢ Utilisez la commande ls pour vérifier la présence du fichier . Si
vous ne parvenez pas à le retrouver, tapez et revérifiez.
➢ Réinitialisez le concentrateur IC880A grâce à la commande
puis .
Rappelons que “21” est le pin du GPIO pour le reset.
➢ Dirigez-vous vers le dossier util_spi_stress. Tapez un ls et vérifier la présence du
fichier util_spi_test. Exécutez le avec .

Si la connexion est correctement établie, vous devriez observer les lignes suivantes défiler sur
votre terminal :

Si ce n’est pas le cas, votre communication SPI ne fonctionne pas. Vous devez donc revérifier
vos précédentes étapes ou remplacer le pin de reset par un autre pin de GPIO (ne pas oublier
de modifier le numéro de pin lors de la réinitialisation du concentrateur).

Lorsque votre communication fonctionne, arrêtez le défilement des lignes sur le terminal
avec Ctrl + Z et passez à la suite du TP :

➢ Accédez au dossier lora_pkt_fwd via le terminal Raspberry. Ce dossier est contenu


dans le dossier packet_forwarder.

10
➢ Tapez la commande . Vous obtiendrez l’ID de votre
Gateway. Notez là.
➢ Déplacez-vous dans le dossier packet_frowarder/lora_pkt_fwd.
➢ Exécutez le fichier lora_pkt_fwd.

La Gateway est maintenant à l’écoute. Laissez le dernier programme lancé s'exécuter pour la
suite de la séance de TP.

IV - Application server
Objectif : Transmettre les données du capteur de température sur l’application server Chirp
Stack et en extraire les données.

a. Configuration de l’interface web

Vous devez maintenant configurer la connexion entre le serveur en ligne Chirp Stack
et votre Gateway LoRa :

➢ Accédez au serveur en tapant http://localhost:8080/#/login sur un moteur de


recherche. N’oubliez pas de remplacer “localhost” par l’adresse IP de la machine
hébergeant le serveur.

➢ La fenêtre ci-dessous devrait s’afficher :

Le nom d’utilisateur et le mot de passe sont admin.


➢ Créez votre propre Gateway :
○ Donnez lui un nom, une description et l’ID précédemment relevée.
○ Cochez network server, service profile et gateway profile mais ne
sélectionnez pas Gateway discovery enabled.
○ Appuyez sur Create Gateway.
➢ Vérifiez que la Gateway est connectée en visitant l’onglet Gateway puis Last seen.
Vous devez voir écrit “en activité” ou “en activité il y a quelques minutes”.
➢ Créez maintenant votre Device :
○ Donnez lui un nom et une description.

11
○ Obtenez votre DevEUI en exécutant le code suivant sur le LoPy via Visual
Studio Code :

lora = LoRa()
print("DevEUI: %s" % (binascii.hexlify(lora.mac()).decode('ascii')))

○ Rentrez le DevEUI et sélectionnez Device profile.


○ Appuyez sur Create Device. Nous vérifierons que le Device est bien connecté
plus tard dans le TP.

Le serveur est maintenant prêt à être utilisé.

b. Envoyer des données du LoPy vers l’application server

Vous aurez d’abord besoin de la bibliothèque LoRa de Network. Vous pouvez


consulter https://docs.pycom.io/tutorials/networks/lora/lorawan-otaa/. Référez-vous ensuite à
l’annexe pour le code type à utiliser sur votre Visual Studio Code :

➢ Branchez votre antenne au Lopy4 :

Votre montage est complet et doit maintenant ressembler au suivant :

12
➢ Ajoutez au code de la partie II.b. celui disponible en annexe.
➢ Rentrez votre DevEUI dans la ligne prévue à cet effet.
➢ Compilez et téléversez.
➢ Vérifiez que votre Device est bien connecté en allant dans l’onglet Application puis
Device sur Chirp Stack. Cliquez sur Data. Si vous observez les “join” et “up”, c’est
que votre Device envoie effectivement des données au serveur :

Du capteur au serveur, notre système communique correctement.

c. Récupération des données du serveur grâce à un script Python

Vos données de température sont sur le serveur en ligne et il faut maintenant visualiser
cette information.
Vous utiliserez la bibliothèque psycopg2 qui permet de faire des requêtes à un serveur
PostgreSQL pour obtenir les données d’une base. Ouvrez un éditeur de texte, utilisez le
squelette ci-dessous, compilez et exécutez pour récupérer et visualiser vos données.

import psycopg2
import psycopg2.extensions
try:
#creation d'un objet conn pour la connexion au server
conn = psycopg2.connect(
user = "chirpstack_as_event",
password = "ter",
host = "localhost",
port = "5432",
database = "chirpstack_as_event"
)

#creation d'un objet cur pour pour créer le cursor pour la lecture de
données
cur = conn.cursor()

#requete porstgreSQL
cur.execute("SELECT data FROM device_up") #on selectionne toutes les
lignes de la table device_up
res = cur.fetchall() #on recupere tout dans la variable

13
#Affichage des données
for data in res :
print("\n***** Requete *****")
print("Data = ",bytes(data[0])) #affichage des données recues par le
server

#fermeture de la connexion à la base de données


cur.close()
conn.close()
print("La connexion PostgreSQL est fermée")

except (Exception, psycopg2.Error) as error :


print ("Erreur lors de la connexion à PostgreSQL", error)

Vous devriez maintenant être en mesure d’afficher la température de la pièce sur votre
écran. Vous pouvez expérimenter votre montage en éloignant votre LoPy du Raspberry.
L’objectif de départ est maintenant rempli.

V - Annexes
Squelette du programme pour l’envoie de données en utilisant LoRa :
from network import LoRa
import socket
import time
import binascii

# Initialise LoRa in LORAWAN mode.


# Please pick the region that matches where you are using the device:
# Asia = LoRa.AS923
# Australia = LoRa.AU915
# Europe = LoRa.EU868
# United States = LoRa.US915
lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868)

# create an OTAA authentication parameters, change them to the provided credentials


app_eui = binascii.unhexlify('ADA4DAE3AC12676B')
app_key = binascii.unhexlify('11B0282A189B75B0B4D2D8C7FA38548B')
#uncomment to use LoRaWAN application provided dev_eui
dev_eui = binascii.unhexlify('70B3D549938EA1EE')

# join a network using OTAA (Over the Air Activation)


#uncomment below to use LoRaWAN application provided dev_eui
lora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)
#lora.join(activation=LoRa.OTAA, auth=(dev_eui, app_eui, app_key), timeout=0)

# wait until the module has joined the network


while not lora.has_joined():
time.sleep(2.5)
print('Not yet joined...')

14
print('Joined')
# create a LoRa socket
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)

# set the LoRaWAN data rate


s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)

# make the socket blocking


# (waits for the data to be sent and for the 2 receive windows to expire)
s.setblocking(True)

# send some data comme les données de température


s.send(bytes([0x01, 0x02, 0x03]))

# make the socket non-blocking


# (because if there's no data received it will block forever...)
s.setblocking(False)

# get any data received (if any...)


data = s.recv(64)
print(data)

15

Vous aimerez peut-être aussi