TP Guide WAVRANT MARRAGOU
TP Guide WAVRANT MARRAGOU
TP Guide WAVRANT MARRAGOU
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.
rm -f packages.microsoft.gpg
Installer la bibliothèque psycopg2 qui permet de faciliter les requêtes faite à un serveur
PostgreSQL :
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]
➢ 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
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.
➢ 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
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.
Systemd :
sudo systemctl [start|stop|restart|status]
chirpstack-gateway-bridge
init.d :
sudo /etc/init.d/chirpstack-gateway-bridge
[start|stop|restart|status]
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. :
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.
mv packet_forwarder/lora_pkt_fwd/cfg/global_conf.json.PCB_E336.EU868.basic
packet_forwarder/lora_pkt_fwd/global_conf.json
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.
b. Interface Web
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.
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 :
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 :
import pycom
➢ Compilez.
➢ Installez votre LoPy à l’expansion board (reset côté port micro USB) puis connectez
via USB l’ordinateur et téléversez.
5
➢ Ouvrez Visual Studio Code
➢ Créez un nouveau fichier en langage python.
➢ Tapez le code suivant dans votre nouveau fichier :
import time
i2c = I2C(0)
i2c.init(I2C.MASTER)
while True :
time.sleep(0.02)
temperature = i2c.readfrom(0x44,2)
time.sleep(2)
➢ Compilez et téléversez.
➢ Contrôlez l’affichage de la température sur votre écran.
6
a. Branchement du Raspberry Pi 3 avec le concentrateur IC880A
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 :
8
➢ Vérifiez votre montage avant d’alimenter la Raspberry via le câble micro USB.
***************************************************************************
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 :
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.
Vous devez maintenant configurer la connexion entre le serveur en ligne Chirp Stack
et votre Gateway LoRa :
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')))
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 :
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
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
14
print('Joined')
# create a LoRa socket
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
15