Vous êtes sur la page 1sur 18

Département EEA - Faculté Sciences et Ingénierie

Master EEA - Parcours SME

Initiation à la Recherche - Projet TER


Année 2021-2022

Définition et mise en place d’un TP expert IoT


LoRa avec matériel STM32

Rédigé par Victor DALANÇON et Medhi KISSI


Professeur référent : Pascal BERTHOU

28 avril 2022

1
Table des matières
1 Première partie : capteur de température et d’humidité 4
1.1 La STM32L476 Nucleo-64 : carte de développement . . . . . . . . . . . . . . 4
1.2 Le DHT22 : capteur de température et d’humidité . . . . . . . . . . . . . . 6

2 La carte d’extension : STM32 Nucleo LoRaWan 9

3 Le concentrateur et la Raspberry Pi 12
3.1 Connecter la Gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Configurer la Gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Configurer l’Application Server 14

5 Annexe 15
5.1 Première partie : capteur de température et d’humidité . . . . . . . . . . . . 15
5.2 Le concentrateur et la Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . 17

2
Introduction
L’internet des objets (IoT) décrit l’interconnexion entre 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. Le
"LoRaWAN" (pour "Long Range Wide-Area Network") fait partie de ces protocoles de
communication longue distance à faible consommation d’énergie. Il utilise le LoRa qui est
une technique de modulation à spectre étalé en "Chirp", ce qui lui permet de débiter sur
une bande passante de 125kHz. Le "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.

Figure 1 – La technologie LoRaWAN

Dans ce TP, l’objectif principal est de transférer, via une communication LoRaWAN, des
données provenant d’un capteur de température. Deux cartes de développement seront
utilisées : une "STM32L476 Nucleo-64" pour le capteur et l’émetteur LoRa, et une "Rasp-
berry Pi 3" couplée à un concentrateur "IC880A" pour la Gateway, le Network Server et
l’Application Server.

3
1 Première partie : capteur de température et d’humidité
1.1 La STM32L476 Nucleo-64 : carte de développement
Durant ce TP, la carte de développement que vous allez utiliser est la "STM32L476
Nucleo-64". Cette carte offre aux utilisateurs un moyen flexible d’essayer de nouvelles idées
et de construire des prototypes. Livrée avec la bibliothèque complète STM32 et divers
exemples de programmes, cette dernière intégre le débogueur "ST-LINK". Pour pouvoir la
programmer, nous allons utiliser le logiciel de développement "STM32CubeIDE". Voici les
étapes à réaliser lorsque vous démarrez un nouveau projet :

— Lancez le logiciel "STM32CubeIDE"


— Créez un nouveau projet en cliquant sur "File", puis "New" et enfin "STM32 Pro-
ject"
— Une fenêtre apparaît, sélectionnez l’onglet "Board Selector" puis inscrivez la réfé-
rence de la carte que vous utilisez. Dans notre cas, c’est la "NUCLEO-L476RG",
validez une fois la carte sélectionnée.

Figure 2 – Création d’un nouveau projet sous CubeIDE

— Une seconde fenêtre apparaît : renseignez le nom de votre projet et son emplacement.
Vous n’avez pas besoin de modifier les options. Cliquez sur "Finish".
— On vous demande en option si vous souhaitez initialiser par défaut les périphériques
de la carte, cliquez sur "Yes".
— Une fois les bibliothèques téléchargées, il faut configurer les pins du microcontôleur.
Dans ce TP, nous allons utiliser un capteur qui communique en "Single Wire",
cliquez sur "System Core" puis sélectionnez "GPIO" pour "General Purpose Input
Output". De plus, pour vérifier les données du capteur, nous avons besoin d’un écran
LCD. Ce dernier communique via un bus I2C, cette fonctionnalité se trouve dans
l’onglet "Connectivity". Vous pouvez modifier l’emplacement des broches "GPIO"
et "I2C" en fonction de votre câblage.

4
Figure 3 – Configuration des broches du microprocesseur

— Avant de sauvegarder pour pouvoir quitter la fenêtre de configuration, allez dans


"Project Manager", puis "Code Generator" et cochez la case "Generate peripheral
initialization as a pair of ’.c/.h’ files per peripheral".
— L’arborescence de votre projet doit ressembler à la figure ci-dessous. Dans la suite
du TP, nous rajouterons des bibliothèqes, mais le code s’écrit seulement dans le
fichier "main.c".

Figure 4 – Arborescence du projet

5
1.2 Le DHT22 : capteur de température et d’humidité
Le DHT22 est un capteur permettant de mesurer une température ainsi que le taux
d’humidité dans l’air. Nécessitant une alimentation typique de 5 V, il peut capturer des
températures comprises entre -40 °C et 80 °C. Il possède une précision de ±2% pour
l’humidité et de ±0.5C pour la température. Avec une consommation de 1.5 mA lorsqu’il
est actif, le DHT22 peut être livré "nu" ou alors directement soudé sur un PCB. Dans
notre cas, nous avons le modèle monté sur circuit imprimé et qui a donc un fort avantage
car il est déjà équipé de composants additionnels indispensables pour assurer une parfaite
communication avec le capteur, notamment la résistance de pull-up sur la ligne de données,
et une capacité de filtrage sur l’alimentation.

Figure 5 – Photo du DHT22

Le DHT22 possède 4 broches : deux pour l’alimentation (VCC & GND), une pour la donnée
et la quatrième n’est pas utilisée. Les informations sont donc transmises entre le micro-
contrôleur et le capteur via un seul fil, cela signifie qu’il faudra, lors de la programmation,
configurer la broche en mode "lecture" ou en mode "écriture" (ou "entrée" / "sortie").
Pour le moment, nous souhaitons seulement afficher la température et le taux d’humidité
sur un écran LCD qui communique via un bus I2C avec le microcontrôleur. Afin de faciliter
le câblage, nous utilisons une carte "shield" que nous enmboîtons sur la Nucleo-64 et qui
permet d’étendre les capacités de cette dernière en ajoutant notamment des connectiques
analogiques, digitales, UART et I2C. Voici ci-dessous notre schéma de câblage pour le
DHT22 :

Figure 6 – Schéma de câblage du DHT22

6
Lorsqu’une température et un taux d’humidité sont collectés par le capteur, ce dernier
envoie ces informations via une trame de 40 bits :

Figure 7 – Trame de données du DHT22

Si toutefois le capteur détecte une température inférieure à 0°C, alors le bit de poids
fort de la partie "Température" est à 1. Lorsque le microcontrôleur envoie un signal de
démarrage, le DHT22 passe alors de l’état d’attente à l’état de fonctionnement. Quand
le microcontrôleur finit d’envoyer le signal de démarrage, le DHT22 enverra un signal de
réponse de 40 bits de données. Sans signal de démarrage de la part du microcontrôleur, le
DHT22 ne donnera pas de signal de réponse. Le DHT22 passe en mode veille lorsque la
collecte des données est terminée.

Figure 8 – Processus de dialogue avec le DHT22

On remarque sur le chronogramme de la figure 4 que le signal de démarrage du microcon-


trôleur doit être au niveau bas pendant minimum 1 ms, puis au niveau haut entre 20 et 40
us. Si ces consignes sont respectées, alors le capteur renvoie une réponse. Dans cette partie
du TP, nous souhaitons afficher la température et le taux d’humidité sur l’écran LCD, voici
les étapes à suivre :

— Réalisez le câblage de la figure 6. Faîtes attention au choix des connectiques utilisées


du "BaseShield V2" (cf. annexe), référez vous à sa documentation technique et à
votre configuration de la STM32.
— Rajoutez dans votre projet les bibliothèques "HT" et "lib_lcd". Elles permettent
de manipuler plus facilement le capteur ainsi que l’écran LCD.
— Les fonctions à utiliser pour le DTH22 sont les suivantes :

Figure 9 – Fonctions pour le DHT22

7
— Les fonctions pour utiliser l’écran LCD sont les suivantes :

Figure 10 – Fonctions pour l’écran LCD

— La première étape du code consiste à ouvrir une communication avec le DHT22.


Vous devez donc respecter le chronogramme de la figure 7. Pour utiliser des délais,
vous pouvez utiliser la commande "HAL_Delay() ;".
— Il faut ensuite réceptionner les bits du DHT22, pour cela il faut initialiser des entiers
(de 8 et 16 bits) et des buffers.
— La dernière étape consiste à afficher les valeurs sur l’écran LCD. Vous pouvez re-
trouver le code corrigé en annexe de ce TP.

Si tout fonctionne correctement, alors l’écran LCD doit afficher la température et le taux
d’humidité capturés par le DHT22. Il y a un rafraichissement toute les 10 secondes à peu
près. Nous savons maintenant que le capteur est fonctionnel, et que nous stockons ces
valeurs qui vont être ensuite envoyées vers un serveur via une communication LoRa.

Figure 11 – Photo du DHT22

8
2 La carte d’extension : STM32 Nucleo LoRaWan
Nous allons maintenant associé à notre carte Nucleo STM32 L476RG une carte d’exten-
sion (Shield) I-NUCLEO-LRWAN, afin de constituer notre End Node. En effet cette carte
d’extension permet de connecter une antenne afin de transmettre des données en LoRa.
De plus, on peut retrouver sur cette carte différents capteurs (que nous n’utiliserons pas
dans ce TP) tel qu’un capteur de pression, un capteur d’humidité et de température ainsi
qu’un accéléromètre/magnétomètre.

Figure 12 – I-NUCLEO-LRWAN1

Cette carte d’extension communique avec la carte STM32-L476RG par communication


UART. Il faut donc configurer deux broches en UART (Rx,Tx) dans STM32CubeIDE.

Cependant ceci est loin d’être suffisant pour pouvoir transmettre les données de l’End
Node à la Gateway.

En effet vous devez maintenant télécharger le software package contenant toutes les library
nécessaire au bon fonctionnement du End Node sur le site de STMicroelectronics. Vous le
trouverez en entrant ce lien dans votre barre de recherche :" https ://www.st.com/content/
st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-
embedded-software/stm32cube-expansion-packages/i-cube-lrwan.html#overview".
Ou vous pourrez sûrement trouver en recherchant sur internet "software package i-cube-
lrwan".

Après avoir téléchargé et ouvert ce dossier vous allez devoir configurer certains fichiers.
Mais avant cela, il faudra télécharger le logiciel "Tera Term" permettant d’établir une
communication avec la carte LoRaWAN. Il faut sélectionner "Serial" et normalement le
logiciel détecte le port USB sur lequel est branché votre carte STM32. Concernant la
configuration, il faut simplement modifier le "Baud Rate" à 115 200 et cliquer sur "New
Settings" pour mettre à jour. Un terminal doit alors s’ouvrir et transmettre des messages
provenant de la carte LoRaWAN.

9
Figure 13 – Tera Term

Figure 14 – Informations carte LoRaWAN

Grâce à "Tera Term", on reçoit donc des informations concernant la carte LoRaWaN,
notamment son adresse MAC qu’il faudra ensuite renseigner dans le code. Dans le code que
nous propose STMicroelectronics, il y a plusieurs fichiers qu’il faut modifier. Notamment
le fichier "se-identity.h" où il faut renseigner l’adresse MAC de la carte LoRaWAN utilsiée.

Figure 15 – Adresses de la carte LoRaWAN

De plus, il faut aussi renseigner la bonne région où l’on se situe (EU433) et la classe de
LoRa que l’on souhaite utiliser. Cela se fait dans le fichier "lora_app.h".

10
Figure 16 – Configuration de la région et de la classe du LoRA

Une fois que le configuration est terminée et complète, nous pouvons commencer à com-
muniquer avec notre carte LoRaWAN. Cela se fait via des commandes "AT" qui sont
transmisent en UART. Il faut donc configurer une broche UART avec l’outils de configu-
ration de CubeIDE, puis se renseigner sur quelles commandes AT il faut utiliser avec le
tableau suivant :

Figure 17 – Tableau des commandes AT - partie 1

Figure 18 – Tableau des commandes AT - partie 2

11
3 Le concentrateur et la Raspberry Pi
3.1 Connecter la Gateway
Le concentrateur IC880A ainsi que la Raspberry Pi 3 constitue notre Gateway. La
Gateway permet de récupérer les données envoyé par le End Node, dans notre cas la
température et l’humidité du capteur de température envoyées par la carte STM32, et de
les envoyer au serveur. Le concentrateur et le Raspberry communique grâce au protocole
SPI.

Figure 19 – Connexion SPI basique en duplex intégral

La communication SPI utilise un maximum de quatre lignes de signaux. Le dispositif


maître (Master), généralement un processeur ou un contrôleur, fournit et contrôle les lignes
d’horloge (SCK) et de sélection de puce (CS). Le fonctionnement en multiplex intégral est
géré par les lignes de données MOSI (Master Out, Slave In) et MISO (Master In, Slave
Out). Dans notre cas il faut donc connecter les PINs du concentrateur à celles du Raspberry.
Vous pouvez suivre ce tableau des correspondances des PINs :

IC880A Raspberry Pi 3
21 (VDD) 2 (+5V)
22 (GND) 6 (GND)
14 (SPI_CLOCK) 23 (SPI0_CLOCK)
15 (SPI_MISO) 21 (SPI0_MISO)
16 (SPI_MOSI) 19 (SPI0_MOSI)
13 (Reset) 11 (GPIO_17))
17 (SPI_NSS) 24 (SPI0_CE0)

Il ne faut également pas oublier de brancher l’antenne à votre concentrateur. Vous trou-
verez en annexe des images représentant les Pinout (brochages) du concentrateur et du
Raspberry.

3.2 Configurer la Gateway


Pour configurer votre Gateway il faut connecter votre ordinateur au Raspberry. Nous allons
utilisé le protocole de communication SSH, qui nécessite que la Raspberry et votre PC soit
connecté au même routeur.

Si vous utilisez Linux, il suffit d’entrer dans le terminal la commande : ssh pi@192.168.1.X

Si vous utilisez Windows, il faut exécuter putty.exe. Une fenêtre s’ouvrira alors, dans
laquelle il faudra mettre le type de connection en SSH et entrer l’adresse IP du Raspberry
dans la case "Host Name".

12
Il est maintenant temps d’entrer votre nom d’utilisateur et votre mot de passe. Par défaut
l’ID est pi et le mot de passe raspberry.

La connexion est donc établi entre votre Raspberry et votre PC, et vous pouvez donc
utiliser votre terminal dédié pour controler la Gateway.

Depuis le terminal vous pouvez accéder à deux dossier : packet_forwarder et lora_gateway.


Deplacez vous dans le dossier lora_gateway.
Vous pouvez maintenant réinitialiser le concentrateur IC880A avec la commande : sudo
./reset_lgw.sh start 17 puis : sudo ./reset_lgw.sh stop 17.
Si il y’a un problème entrez la commande make all et reessayez.

Déplacez vous ensuite vers le dossier _spi_stress puis entrez la commande : sudo ./util_spi_stress.

Si tout fonctionne vous devriez observer ça sur votre terminal :

Si ce n’est pas le cas, le problème doit sûrement de la communication SPI. Vous devez
donc revérifier que vous avez bien réalisé les étapes précédentes ou bien 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).

Vous pouvez arrêter le défilement des lignes sur le terminal, lorsque la communication
est établie.

Retournez à la racine dans le terminal, et déplacez vous dans le dossier packet_forwarder,


puis entrez la commande : sudo nano local_conf.json.
Vous obtiendrez l’adresse IP de votre Gateway.

Deplacez vous dans packet_frowarder/lora_pkt_fwd puis executez lora_pkt_fwd.

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

13
4 Configurer l’Application Server
Notre Application Server est ,dans ce TP, le serveur en ligne Chirp Stack.
Nous allons donc lui envoyer les données de notre capteur de température.

Pour cela, il faut connecter le serveur avec la Gateway.

On accède au serveur en tapant http ://localhost :8080/#/login sur un moteur de


recherche. Il faut remplacer “localhost” par l’adresse IP de la machine hébergeant le ser-
veur.

Une fenêtre de connexion devrait alors s’ouvrir. L’ID et le mot de passe sont : admin.

Une nouvelle fenêtre va alors s’ouvrir. Vous devez y indiqué ID précédemment relevée de
votre Gateway, lui donner un nom ainsi qu’une description. Il faut également cocher "net-
work server", "service profile" et "gateway profile" mais ne pas sélectionner pas "gateway
discovery enabled". Après avoir efffectuer cela vous pouvez appuyer sur "Create Gateway".

Vous pouvez vérifier 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”.

Vous devez maintenant créer votre Device.

14
5 Annexe
5.1 Première partie : capteur de température et d’humidité

Figure 20 – Connectiques du "Base Shield V2"

Figure 21 – Initialisation des variables

Figure 22 – Communication avec le DHT22

15
Figure 23 – Réception des données

Figure 24 – Affichage sur l’écran LCD

16
5.2 Le concentrateur et la Raspberry Pi

Figure 25 – Pinout du Raspberry Pi 3

17
Figure 26 – Pinout du concentrateur IC880A

18

Vous aimerez peut-être aussi