# Déploiement d'une passerelle LoRaWAN dans le but de transmettre des données dans un lieu totalement isolé pour les stations instrumentées ECOLOGGING (rapport et tutoriel).

Ambre Jarrier, Pierre Bordenave

► To cite this version:

Ambre Jarrier, Pierre Bordenave. Déploiement d'une passerelle LoRaWAN dans le but de transmettre des données dans un lieu totalement isolé pour les stations instrumentées ECOLOGGING (rapport et tutoriel). INRAe UEFP. 2025. hal-05421052

HAL Id: hal-05421052

https://hal.inrae.fr/hal-05421052v1

Submitted on 17 Dec 2025

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

Public Domain
RAPPORT DE STAGE
JARRIER Ambre

Station Météorologique de recherche
Ecologging avec transmission LoRaWAN

<figure><img src="image_1.png" /></figure>

https://doi.org/10.57745/IVTWZH et https://hal.inrae.fr/hal-05421052

Projet réalisé au sein de INRAE, Unité Expérimental de la forêt de Pierroton (UEFP 0570),
69 route d'Arcachon 33610 CESTAS

Du 1 mai 2024 au 12 juillet 2024

Nom Tuteur **professionnel** : Monsieur Luc LASNE

Maître de stage : Monsieur Pierre BORDENAVE

2023-2024
REMERCIEMENTS :

Je tiens tout particulièrement à remercier Pierre BORDENAVE qui m'a accompagné et conseillé tout au long de ce stage ainsi que l'Unité Expérimentale de la Forêt de Pierroton qui m'ont beaucoup appris sur le domaine de la recherche.

J'ai pu aussi avancer dans le projet grâce à l'aide de Cedric GOBY et Alan UGUET qui m'ont apporté leurs expériences dans le domaine de la transmission LoRaWAN ainsi que beaucoup de bons conseils.

Sans l'aide de Loïc KERDRAON et de Philippe CHAUMEIL, l'un pour l'aide précieuse apporté au début du projet, l'autre pour ses conseils qui m'ont permis de le finaliser.

Aussi, Mahamat OUMAR avec qui nous avons partagé un projet et de nombreuses discussions qui m'ont donné une nouvelle vision sur les problèmes rencontrés.

De plus, je tiens à remercier l'université de Bordeaux et tous les professeurs qui m'ont accompagné cette année dans le cadre de ma licence. En particulier Luc LASNE, Laurent FOUQUET, Stéphane YGORRA, et Sophie FASQUEL-PERRIN.

Sans oublier, madame Frédérique GENERALE sans qui je n'aurais pas pu travailler dans d' aussi bonne condition si elle n'avait pas pu obtenir si rapidement les matériaux nécessaires au projet.

Enfin, je remercie Frédéric BERNIER et Alexia MATHOU, le directeur d'unité et son adjointe, qui m'ont permis de travailler sur un site aussi agréable que celui de Pierroton.

Finalement, je tiens à remercier ma famille et mes amis qui ont toujours été là à me soutenir quand j'en avais besoin.
## RESUME :

L'Unité Expérimentale de la Forêt de Pierroton, une composante de l'INRAe, développe de nouvelles méthodes pour observer et protéger les forêts, et prévoit leur développement futur.

Pour cela, les réseaux de capteurs sont essentiels, mais les méthodes de transmission de données telles que la 4G ou les connexions filaires sont coûteuses et souvent inefficaces dans les zones blanches des forêts. Le protocole LoRaWAN, qui couvre de grandes zones avec des antennes abordables et utilise peu d'énergie, est une solution prometteuse.

Le projet ECOLOGGING propose une alternative économique aux stations météorologiques actuelles, mesurant divers paramètres environnementaux tout en étant modulable et déplaçable. Cependant, les transmissions en 4G posent des problèmes dans les zones sans couverture réseau, d'où le besoin de passer à LoRaWAN.

Ce rapport décrit l'adaptation de la station ECOLOGGING au LoRaWAN, couvrant les outils nécessaires, la mise en place de la transmission pour un module Arduino, les tests effectués et l'application finale. L'objectif de ce stage a été atteint, démontrant les avantages énergétiques de LoRaWAN par rapport à la 4G. Le projet continuera d'évoluer, notamment avec l'ajout d'une connexion 4G pour l'indépendance réseau, l'intégration de Node-RED pour récupérer les données et leur analyse via Grafana.

## Mots clés :

LoRaWAN, IOT, protocole, Node Red, Ecologging, météorologie, transmission, passerelle

## Définition :

**L'internet des objets (IOT):** un nom désignant le lien d'un objet connecté entre l'objets physique et l'objet numérique. Il désigne aussi la communication entre les objets connectés.

**Serveur d'applications :** Permet d'héberger des données et d'exécuter des commandes pour des composants connectés.

**Fichier JSON :** Format de fichier qui permet de transmettre des données entre un serveur et une application web.

**Commande AT :** Ensemble d'instruction qui permet de contrôler à la fois des modems et des outils de communication grâce à une interface.

**Modem :** Convertis des signaux numériques envoyés par un ordinateur en signaux analogiques pour la transmission.
ABSTRACTS :

The Experimental Forest Unit of Pierroton, a component of INRAe, develops new methods for
observing and protecting forests, and forecasts their future development. For this, a network of
sensors is essential, but data transmission methods such as 4G or wired connections are costly and
often ineffective in forest white zones. The LoRaWAN protocol, which covers large areas with
affordable antennas and uses little energy, is a promising solution.

The ECOLOGGING project proposes an economical alternative to current weather stations, measuring
various environmental parameters while being modular and portable. However, 4G transmissions pose
problems in areas without network coverage, hence the need to switch to LoRaWAN. This report
describes the adaptation of the ECOLOGGING station to LoRaWAN, covering the necessary tools, the
implementation of the transmission for an Arduino module, the tests carried out, and the final
application. The goal of this project was achieved, demonstrating the energy advantages of LoRaWAN
compared to 4G. The project will continue to evolve, notably with the addition of a 4G connection for
network independence, the integration of Node-RED to retrieve data, and their analysis via Grafana.

**Keywords:** LoRaWAN, IoT, protocol, Node-RED, Ecologging, meteorology, transmission,
gateway

**Definition :**

**Internet of Things (IoT):** A term referring to the connection of a physical object to a digital object, also describing the communication between connected objects.

**Application Server:** Allows hosting data and executing commands for connected components.

**JSON File:** A file format that enables data transmission between a server and a web application.

**AT Command:** A set of instructions used to control modems and communication tools through an interface.

**Modem:** Converts digital signals sent by a computer into analog signals for transmission.
TABLE DES MATIERES

<table><tr><td>REMERCIEMENTS :</td><td>2</td></tr><tr><td>RESUME :</td><td>3</td></tr><tr><td>ABSTRACTS :</td><td>4</td></tr><tr><td>TABLE DES MATIERES</td><td>5</td></tr><tr><td>LISTE DES TABLEAUX</td><td>6</td></tr><tr><td>LISTES DES FIGURES</td><td>7</td></tr><tr><td>LISTE DES ANNEXES</td><td>8</td></tr><tr><td>CAHIER DES CHARGES</td><td>9</td></tr><tr><td>INTRODUCTION GENERALE</td><td>10</td></tr><tr><td>CORPS DU RAPPORT</td><td>11</td></tr><tr><td>I. Descriptif détaillé des outils nécessaires</td><td>11</td></tr><tr><td>1. Protocole LoRaWAN</td><td>11</td></tr><tr><td>2. Passerelle et module de transmission LoRaWAN</td><td>13</td></tr><tr><td>3. Serveur d'application</td><td>14</td></tr><tr><td>II. Mise en place de la transmission entre chaque composant</td><td>15</td></tr><tr><td>4. Transmission du module</td><td>15</td></tr><tr><td>5. Interface de la passerelle</td><td>16</td></tr><tr><td>6. Récupération des données grâce à The Things Network</td><td>16</td></tr><tr><td>III. Test du module d'essai</td><td>17</td></tr><tr><td>7. Données de température</td><td>17</td></tr><tr><td>8. Distance</td><td>18</td></tr><tr><td>IV. Application au système réel : antenne ECCOLOGING</td><td>18</td></tr><tr><td>9. Différence entre la station ECOLOGGING et le module</td><td>19</td></tr><tr><td>10. Test en situation réels</td><td>19</td></tr><tr><td>CONCLUSION ET PERSPECTIVES</td><td>21</td></tr><tr><td>BIBLIOGRAPHIE</td><td>22</td></tr><tr><td>ANNEXES</td><td>23</td></tr></table>
LISTE DES TABLEAUX

<table><tr><td>Tableau 1: Tableau représentant les fréquences LoRaWan utilisé en fonction du continent fait par Claudio Ferreira Dias, Eduardo Rodrigues De Lima et G.Fraidenraich accessible sur le site ResearchGate</td><td>12</td></tr><tr><td>Tableau 2: Tableau de comparaison des différentes passerelles</td><td>14</td></tr><tr><td>Tableau 3: Comparaison de distances de réception LoRaWAN des passerelles intérieur et extérieur mais aussi comparaison avec les distances de la documentation</td><td>18</td></tr><tr><td>Tableau 4: Comparaison des résultats des tests de consommation électrique du prototype ECOLOGGING en LoRaWAN et en 4G</td><td>20</td></tr><tr><td>Tableau 5: Comparaison des résultats des tests d'autonomie du prototype ECOLOGGING en LoRaWAN et en 4G</td><td>20</td></tr></table>
LISTES DES FIGURES

<table><tr><td>Figure a: Schéma du fonctionnement LoRaWAN du projet, réalisé par Ambre JARRIER</td><td>12</td></tr><tr><td>Figure b: Module d'essai avec une carte arduino mega 2560, un shield dragino la66, un capteur pour les rayonnements VEML7700 et un capteur SHT20 pour l'humidité relative et la température</td><td>13</td></tr><tr><td>Figure c: Logo de The Things Network provenant du website officiel</td><td>14</td></tr><tr><td>Figure d: Passerelle outdoor DLOS8N de chez dragino</td><td>16</td></tr><tr><td>Figure e: Passerelle indoor LPS8v2-4G de chez dragino</td><td>16</td></tr><tr><td>Figure f: Capture d'écran de The Things Network avec le module en fonctionnement</td><td>16</td></tr><tr><td>Figure g: Image provenant du manuel d'utilisation d'un réseau LoRaWAN de The Things Network des données envoyées par le module</td><td>17</td></tr><tr><td>Figure h: Photo du module avec une alimentation dans un congélateur</td><td>17</td></tr><tr><td>Figure i: Capture d'écran de The Things Network pendant le test en Température sur la première installation</td><td>17</td></tr><tr><td>Figure j: Capture d'écran de The Things Network de l'arrêt de réception pour la distance maximum de transmission entre la passerelle intérieur et le module</td><td>18</td></tr><tr><td>Figure k: Capture d'écran de Géoportail pour la distance maximum de transmission entre la passerelle intérieur et le premier module</td><td>18</td></tr><tr><td>Figure n: Prototype station ECOLOGGING LoRaWAN</td><td>19</td></tr><tr><td>Figure o: Capture d'écran de The Things Network des données transmis par la station ECOLOGGING</td><td>19</td></tr></table>
# LISTE DES ANNEXES

Annexe a: Manuel d'utilisation LoRaWAN Dragino et The Things Network réalisé par Ambre JARRIER 24

Annexe b: Code arduino surveillance pour station ECOLOGGING avec capteur BME transmission toute les 20 secondes en LoRaWAN réalisé par Ambre JARRIER et Pierre BORDENAVE 35

Annexe c: Capture d'écran de The Things Network représentant le décodeur pour le code de surveillance des données applicable à la station ECOLOGGING réalisé par Ambre JARRIER 56
# CAHIER DES CHARGES

Durant ce stage, mon objectif est de réceptionner les données des capteurs de la station météorologique ECOLOGGING grâce au protocole LoRaWAN, émise par une carte ATMEGA 2560 avec un shield la66, via une passerelle LPS8v2, sur un serveur public The Thing Network. Afin de réaliser une transition de la station instrumentée entre une transmission de données en 4G vers le LoRaWAN.

Pour ce stage, plusieurs objectifs ont été défini au préalable puis adaptée en fonction de la difficulté des tâches.

La première est de procéder à des recherches bibliographiques dans le but d'apprendre les notions qui seront utiles pour mettre en place la transmission en LoRaWAN.

Ensuite, d'installer une communication avec le matériel déjà présent.

Pour finir, réaliser une comparaison avec le prototype de la station ECOLOGGING LoRaWAN et la station ECOLOGGING 4G.
# INTRODUCTION GENERALE

L'INRAe, Institut National de Recherche pour l'Agriculture, l'Alimentation et l'Environnement, a été fondé dans le but de mener des recherches crucales sur l'impact environnemental et agricole. Composé de 14 départements scientifiques et de 18 centres de recherche, il représente un pilier de l'innovation scientifique en France.

L'Unité Expérimentale de la Forêt de Pierroton appartient à ce grand ensemble et a pour mission de développer de nouvelle méthodologie pour observer et protéger les forêts, mais aussi prévoir et agir sur le développement des forêts futures.

Pour ce faire, il est important de mettre en place un réseau de capteurs, mais aussi de pouvoir recevoir les données qu'ils perçoivent. Ainsi, il existe plusieurs moyens de transmission : que ce soit filaire, à travers la 4G ou encore via internet. Ces moyens sont contraignants ou bien très cher à mettre en place. Pour ce qui est de la connexion 4G, l'envoi des données est difficile, en particulier dans les zones blanches où le réseau téléphonique ne passe pas. En effet, dans les forêts expérimentales, les arbres font l'effet de mur compliqué à traverser pour les ondes.

Un nouveau protocole de transmission a été créé : le LoRaWAN. Il serait intéressant de l'étudier.

Celui-ci permet de couvrir une très grande zone avec des antennes abordables et utilise très peu d'énergie. C'est une technologie encore en pleine expansion qui commence à être déployée un peu partout dans le monde.

C'est dans ce contexte que le projet ECOLOGGING a vu le jour pour proposer une solution alternative aux stations déjà existante. Moins cher et permettant de relever plusieurs paramètres météorologiques tels que la température, l'humidité relative, la vitesse du vent, son orientation, le rayonnement, et le cumul de pluie. Tout en gardant un rapport qualité coût de la donnée très intéressant. Cette station est modulable et déplaçable. Elle est déjà fonctionnelle et installée notamment sur le site de Cadouin. La transmission est faite en 4G. Ce qui pose des problèmes parce que certains endroits sont dans des zones blanches, sans accès au réseau.

Le besoin d'installer une connexion LoRaWAN est né.

C'est donc le déroulement de l'adaptation de la station ECOLOGGING en transmission en LoRaWAN que ce rapport va décrire. Tout d'abord, nous passerons par un descriptif détaillé des outils nécessaire à la mise en place d'un tel projet, ensuite de la mise en place de la transmission LoRaWAN pour un module arduino, aussi des différents tests qui ont été effectués dessus et enfin de l'application au système réel, c'est-à-dire à la station ECOLOGGING LoRaWAN.
# CORPS DU RAPPORT

Afin de pouvoir répondre au cahier des charges de la façon la plus complète possible, il faut commencer par comprendre quels outils seront utilisés et pourquoi.

## I. Descriptif détaillé des outils nécessaires

Durant ce stage, il a été important d’en apprendre plus sur les outils qui allaient être utilisé et sur leur fonctionnement. Les recherches bibliographiques ont été largement exploitées. Les plus importantes sont disponibles dans la bibliographie de ce rapport.

Pour prendre en main le projet, il faut en comprendre chaque composant séparément.

Voici donc en premier lieu, l'enjeu principal du stage : la communication en LoRaWAN et l'explication de son fonctionnement.

### 1. Protocole LoRaWAN

Pour bien cibler les enjeux d'un tel protocole, il faut en connaître l'origine.

#### i. Contexte et Enjeux

Le protocole LoRaWAN fut créé par l'entreprise française Cycléo en 2009. Elle a été ensuite été développé, car il y avait un réel besoin pour un réseau à longue portée utilisant peu d'énergie. Ce qui existait entre autres jusque-là était le protocole 4G permettant une connexion à Internet, mais demande plus d'énergie à la transmission. Or, le but pour une station de capteurs est de pouvoir tenir un maximum de temps en autonomie. C'est pourquoi le choix s'est tourné vers le LoRaWAN. Par la suite, l'entreprise qui a développé ce nouveau protocole, a été rachetée en 2012 par une entreprise américaine du nom de Semtech.

Plus précisément, le LoRaWAN est un protocole de communication radio pour l'internet des objets appelé IOT. Celui-ci est en fait le nom que désigne la communication entre les objets connectés.

Grâce au LoRaWAN, il est possible d'utiliser librement certaines bandes de fréquence dépendamment de l'endroit géographique des transmissions. De plus, il permet une grande autonomie des objets, car il ne fait transiter qu'un volume de données faible avec un débit réduit. Les objets intégrant le protocole LoRaWAN ont peu de consommation énergétique et une autonomie plus grande. Ce qui explique leur expansion récente dans les domaines de recherches et son utilisation pour les capteurs.

Pour comprendre techniquement le fonctionnement du LoRaWAN, il est intéressant de s'intéresser plus précisément au côté technique.
## ii. Fonctionnement avec Schéma

Le LoRaWAN, est donc un protocole radio, et la fréquence qu'il utilise varie en fonction du continent :

<table><thead><tr><td>Region</td><td>Frequency (MHz)</td></tr></thead><tbody><tr><td>EU</td><td>863-870</td></tr><tr><td>US</td><td>902-928</td></tr><tr><td>AU</td><td>915-928</td></tr><tr><td>CN</td><td>779-787 and 470-510</td></tr></tbody></table>

Tableau 1: Tableau représentant les fréquences LoRaWan utilisé en fonction du continent fait par Claudio Ferreira Dias, Eduardo Rodrigues De Lima et G.Fraidenraich accessible sur le site ResearchGate
Voir le lien dans la bibliographie

C'est un paramètre à prendre en compte quand on utilise ce réseau ou bien qu'on commande le matériel pour exploiter cette fréquence radio. En France, la fréquence utilisée est le 868Mhz. Il faut donc avoir des antennes qui puissent l'envoyer et le recevoir.

Le principe d'utilisation d'un réseau LoRaWAN est assez simple. Il est constitué de 3 parties :

* Les capteurs qui s'occupent de l'acquisition des données, qu'ils transmettent avec le protocole LoRaWAN.

* La passerelle qui permet de faire le lien entre les capteurs et Internet. Elle communique à la fois en LoRaWAN et avec un protocole permettant la connexion Internet. Souvent, elle peut aussi se connecter à Internet en utilisant un fil éthernet.

* Le serveur d'application qui va accumuler les données reçues et qui vont pouvoir être disponible n'importe où du moment qu'il se connecte à internet

<figure><img src="image_2.png" /><figcaption>Figure a: Schéma du fonctionnement LoRaWAN du projet, réalisé par Ambre JARRIER</figcaption></figure>

Les capteurs transmettent en LoRaWAN à la passerelle la plus proche, il n'y a pas donc besoin de renseigner les données de la passerelle.

Il existe aussi des passerelles publiques qui peuvent être utilisé que si elles sont assez proches. Toutes les passerelles publiques sont renseignées sur un lien dans le serveur d'application, à retrouver dans la bibliographie. Il est possible de rendre publique une passerelle achetée pour permettre à d'autres personnes de s'essayer au LoRaWAN. Ce n'est pas obligatoire et si le but est d'utiliser le réseau en entreprise, il est possible d'avoir des serveurs privés.

Après avoir vu comment fonctionne un réseau LoRaWAN, il est temps de voir quels outils permettent de l'exploiter.
## 2. Passerelle et module de transmission LoRaWAN

Comme vu précédemment dans le schéma, plusieurs parties constituent un réseau LoRaWAN, en premier lieu, il faut récupérer les données qui seront par la suite transmises.

### i. Module

Durant ce stage, un premier module a été utilisé afin de mettre en place une transmission en LoRaWAN avant de faire des tests sur le prototype station ECOLOGGING LoRaWAN.

Le module contient plusieurs parties :

<figure><img src="image_3.png" /><figcaption>Figure b: Module d'essai avec une carte arduino mega 2560, un shield dragino la66, un capteur pour les rayonnements VEML7700 et un capteur SHT20 pour l'humidité relative et la température</figcaption></figure>

L'accès aux données prises par les capteurs est accessible par la carte arduino. Les capteurs qui y sont connectés sont présents pour tester la réception de donnée. Finalement, ceci est un module de transmission de donnée comme il en existe déjà plusieurs sur le marché.

Par exemple, les stations météo dragino sont pré configuré pour la transmission en LoRaWAN des données qu'elles récoltent, seulement un des points clef du projet et aussi d'essayer d'avoir une installation fonctionnelle avec le moins de coût possible.

Sans le shield la66, la transmission en donnée LoRaWAN n'est pas possible avec la seule utilisation de la carte arduino.

Il existe sur le marché plusieurs marques qui développent des cartes permettant de faire de la transmission en arduino : Arduino, Milesight, Dragino et Adafruit.

Le shield la66 fait partie d'un kit dragino avec une passerelle dragino LPS8v2 et d'autres outils pour apprendre à se servir du réseau LoRaWAN.

Ce n'est pas la seule passerelle qui existe et elles permettent toute de faire transiter les données reçues par un module jusqu'à un serveur d'application.

### ii. Passerelle

Il existe différents types de passerelle selon l'utilisation qui doit en être fait.

Tout d'abord, les passerelles destinées à l'intérieur d'un bâtiment et celle qui peuvent être placée en extérieur peuvent aussi envoyés des données en wifi et parfois même en 4G. Leur prix va varier en fonction des options présentes sur la passerelle.

Certaines de ces passerelles ne sont pas disponible sur toutes les fréquences LoRaWAN, donc avant d'en choisir une, voici un tableau récapitulatif de certaines déjà présente sur le marché.
<table><caption>Tableau 2: Tableau de comparaison des différentes passerelles</caption><thead><tr><th>Marques</th><th>TTN</th><th>Dragino</th><th>Wifx</th><th>Heltec</th><th>RAK</th><th>Dragino</th></tr></thead><tbody><tr><td>Nom</td><td>The Things Indoor LoRaWAN WiFi Gateway</td><td>LPS8v2-4G</td><td>Wifx-L1</td><td>HT-M2802</td><td>RAK789V2</td><td>DLOS8N-4G</td></tr><tr><td>Type</td><td>Indoor</td><td>Indoor</td><td>Outdoor</td><td>Indoor</td><td>Outdoor</td><td>Outdoor</td></tr><tr><td>Nom d'interface</td><td>Direct sur TTN</td><td>Dragino</td><td>Wifx</td><td>Heltec</td><td>WisGate</td><td>Dragino</td></tr><tr><td>Channels</td><td>8</td><td>Multi-Channel</td><td>1 for continuous TX @SF7</td><td>Ne sait pas</td><td>8 ou 16 au choix</td><td>8</td></tr><tr><td>4G ?</td><td>Non</td><td>Oui</td><td>Non</td><td>Non</td><td>Non</td><td>Oui</td></tr><tr><td>Internet</td><td>Wifi</td><td>Wifi, Ethernet</td><td>Non</td><td>Ne sais pas</td><td>Ethernet</td><td>wifi, Ethernet</td></tr><tr><td>Powered By</td><td>USB-C</td><td>USB-C</td><td>RJ45</td><td>Ne sait pas</td><td>via a dedicated power port</td><td>via a dedicated power port</td></tr><tr><td>Prix</td><td>79 €</td><td>265 €</td><td>567,22 €</td><td>199$</td><td>372$</td><td>475 €</td></tr></tbody></table>

Afin d'envoyer des données, une passerelle doit être connectée à un serveur d'application, donc en voici quelques explications.

## 3. Serveur d'application

Il existe plusieurs sortes, celui utilisé au cours du projet ECOLOGGING est The Things Network.

### iii. Fonctionnement de The Things Network

Ce serveur d'application a une version gratuite et une autre payante.

<figure><img src="image_4.png" /><figcaption>Figure c: Logo de The Things Network provenant du website officiel</figcaption></figure>

Pour réaliser les tests avec la station, la version gratuite suffit, car elle permet de créer plusieurs applications, d'y associer des modules, mais aussi d'y enregistrer des passerelles. Une fois qu'une passerelle est enregistrée au serveur d'application, il est possible de choisir si elle sera publique ou bien privée.

De plus, c'est sur les applications que se retrouveront les données envoyées par les modules de transmission. Ainsi, il est possible d'avoir un premier aperçu des données avant de les traiter.

Dans le but d'avoir les étapes pas à pas de l'utilisation de The Things Network, il y a le manuel d'utilisation retrouvable en annexe.

### iv. Alternative possible

Il existe plusieurs serveurs d'application comme The Things Network, certain sont payant et d'autre sont OpenSource, ce qui va sans doute le plus varié, c'est l'interface utilisateur. En effet, sur Chirpstack il est plus compliqué de prendre en main toutes les différentes fonctionnalités tandis que par exemple pour Antares, ils ont leur propre librairie arduino.

D'autres serveurs d'applications existent comme par exemple :

* Antares

* ChirpStack

* Loriot
Il est aussi possible de trouver des serveurs d'application spécifique pour certain pays :

* Kpn : Pays-Bas

* ER Telecom : Russie

* Proximus : Belgique

Certains serveurs sont inclus dans la passerelle elle-même ce qui permet une gestion des données en interne sans passage internet. Ce sont ceux que font les passerelles de la marque Multitech.

Après avoir vu les principes fondamentaux du réseaux LoRaWAN ainsi que ses composantes séparément, il faut maintenant les connecter les uns aux autres.

## II. Mise en place de la transmission entre chaque composant

Plusieurs connexions sont à prévoir, déjà entre la carte avec les capteurs et la passerelle, ensuite celle qui relie la passerelle et TTN. Enfin, les connexions avec le décodeur qui font le lien entre le serveur d'application et les capteurs.

Le module émet de lui-même en LoRaWAN les données des capteurs.

## 4. Transmission du module

C'est à travers le code arduino que le shield la66 reçoit l'instruction d'émettre. Il faut au préalable que l'Arduino utilise certaines bibliothèques adaptées au protocole de transmission.

### v. Les librairies arduino

Quel que soit l'outil qui va permettre d'émettre en LoRaWAN, il faut choisir une bibliothèque qui lui est associée. Dragino fournit déjà des capteurs tout intégrer qui n'ont pas besoin de supplément mais sont onéreux et non configurables. La mise en marche de la transmission LoRaWAN se fait avec le code arduino, voici donc les librairies qu'il est possible d'utiliser :

* Lmic (SX1272, SX1276 transceivers du style de WeMos D1 R2 de la famille des ESP8266 family board)

* Lorawan-loraid (fonctionne avec le serveur d'application d'antares)

* TheThingsNetwork_esp32 (carte esp32)

Finalement, nous utiliserons le SoftwareSerial. Elle est recommandée pour la transmission LoRaWAN par le site officiel d'Arduino.

Les données doivent donc être envoyées et enregistrées d'après les instructions du code qui lui a été téléversé.

### vi. Code du module en arduino

Le code de prise de mesure a été écrit par Pierre BORDENAVE. Il a fallu ensuite inclure une partie transmission pour directement envoyée les mesures qui ressortent des capteurs. En premier temps, le module transmet les données toutes les 20 secondes dans le but de pouvoir avoir un suivi en direct lors des essais. L'objectif final est d'envoyer une moyenne à l'heure pour un suivi longue durée.

Pour transmettre les données à transmettre, il faut envoyer au shield une commande AT qu'il pourra reconnaître. Les commandes AT permettent une gestion complète de la carte, mais une seule est nécessaire pour la transmission : AT+SENDB

Cette commande permet d'envoyer des données de type hexadecimal en LoRaWAN.
C'est pourquoi il faut au préalable convertir les différentes valeurs mesurées en données hexadécimales. De plus, chaque byte utilisé peut aller de 0 à 255, donc le code découpe en plus petits paquets les mesures pour pouvoir les faire passer avec des valeurs plus précise : au centième près.

Ces données seront ensuite reçues par la passerelle.

## 5. Interface de la passerelle

Afin d'assurer la bonne transmission des données, il faut configurer la passerelle en amont. Nous utiliserons l'interface dragino.

<figure><img src="image_5.png" /><figcaption>Figure e: Passerelle indoor LPS8v2-4G de chez dragino</figcaption></figure>

Il est possible de le faire via un câble RJ45(Ethernet) ou bien en se connectant directement en wifi dessus ce qui permet d'avoir accès à l'interface dragino de la passerelle. Aussi, pour toutes les étapes en rapport, se référer au guide d'utilisation en annexe. Toutes les passerelles ne fonctionnent pas de la même manière, mais le principe reste semblable.

Durant ce projet, deux passerelles différentes étaient disponibles, la LPS8v2 et la DLOS8N, toute deux de chez dragino. Cependant, après de longues

recherches, il s'est avéré que la LPS8v2 présentait des défauts : elle ne

disposait pas de fonction de réinitialisation et ne pouvait pas être utilisée simultanément comme client Wi-Fi et modem. Il a donc fallu recommander une LPS8v2 qui cette fois a en plus un fonctionnement en 4G.

<figure><img src="image_6.png" /><figcaption>Figure d: Passerelle outdoor DLOS8N de chez dragino</figcaption></figure>

Après avoir mis en place l'émission en LoRaWAN, les données passent par la passerelle et se retrouvent sur le serveur d'application The Things Network.

## 6. Récupération des données grâce à The Things Network

Dans le but d'analyser les mesures des capteurs nous allons récupérer les données et prendre en main l'interface.

Nous avons rédigé un manuel d'utilisation qui est disponible en annexe. La transmission des données a ensuite été visible sous la forme de nombre en hexadécimal.

<figure><img src="image_7.png" /><figcaption>Figure f: Capture d'écran de The Things Network avec le module en fonctionnement</figcaption></figure>

Ensuite, un décodeur en java a été programmé pour interpréter les données reçues. Finalement, les données sont analysables et récupérables sous la forme d'un fichier json.
<figure><img src="image_8.png" /><figcaption>Figure g: Image provenant du manuel d'utilisation d'un réseau LoRaWAN de The Things Network des données envoyées par le module</figcaption></figure>

Le module contenant les capteurs émet finalement en LoRaWAN et la passerelle permet de transférer les données vers Internet. Le serveur d'application permet donc de les récupérer n'importe où à partir du moment où il y a une connexion Internet.

Maintenant que le module fonctionne et que la récupération des données est assurée. Il faut pouvoir déterminer les caractéristiques de cette connexion et si le code a pris en compte tous les cas d'utilisations.

### III. Test du module d'essai

La station météorologique ECOLOGGING a pour but d'être installé dans beaucoup d'environnement différents. Ainsi, le premier test à avoir été effectué a été fait pour tester si le module continuait à marcher dans des conditions particulières telles que les changements de température.

### 7. Données de température

En effet, la station ECOLOGGING pourra être installée dans différentes régions du monde, avec différentes conditions climatiques. Il faut donc s'assurer que la connexion en LoRaWAN n'est pas affectée. Le code du module doit prendre en compte ces cas.

<figure><img src="image_9.png" /></figure>

Pour ceci, nous avons placé le module dans un congélateur et réaliser une prise de mesure avec une transmission toutes les 20 secondes.

Le test s'est fait le 24 mai 2024.

<caption>Figure h: Photo du module avec une alimentation dans un congélateur</caption>

Les données reçues montrent bien une diminution croissante vers le négatif avec un signe – qui apparaît. L'objectif est atteint.

<figure><img src="image_10.png" /><figcaption>Figure i: Capture d'écran de The Things Network pendant le test en Température sur la première installation</figcaption></figure>

Un byte de plus a été attribué pour le signe de la température. En fonction de la valeur transmise, le décodeur attribue le bon signe sur The Things Network.

Une autre des caractéristiques importantes à définir est la distance maximale à ne pas dépasser pour recevoir les données.
## 8. Distance

Afin d'effectuer le test de distance, nous avons dû contrôler les données reçues. La passerelle LoRaWAN sera fixe et le module s'éloignera jusqu'à la visualisation de la coupure d'émission, moment où il n'y aura plus de réception.

### vii. Test de distance

La passerelle LPS8v2-4G est placée à l'intérieur du bâtiment, pendant que le module s'éloigne. Avec un surveillance active des données sur le site de the Things Network, il est possible de savoir quand les données ne sont plus transmises. Ensuite grâce au site web géoportail dont le lien est disponible dans la bibliographie, il est possible de mesurer la distance entre le module qui émet et la passerelle au moment où il n'y a plus de réception.

Figure j: Capture d'écran de The Things Network de l'arrêt de réception pour la distance maximum de transmission entre la passerelle intérieur et le module

↑ 08:36:06 eui-a840417a1184e98a

↑ 08:35:26 eui-a840417a1184e98a

<figure><img src="image_11.png" /><figcaption>Figure k: Capture d'écran de Géoportail pour la distance maximum de transmission entre la passerelle intérieur et le premier module</figcaption></figure>

<table><caption>Tableau 3: Comparaison de distances de réception LoRaWAN des passerelles intérieur et extérieur mais aussi comparaison avec les distances de la documentation</caption><thead><tr><td>Modèle de Passerelle</td><td>Distance prévue (m)</td><td>Distance mesurée (m)</td></tr></thead><tbody><tr><td>LPS8v2-4G</td><td>2000</td><td>250</td></tr><tr><td>DLSO8N</td><td>5000</td><td>390</td></tr></tbody></table>

La solution pour augmenter la portée serait des relais, ou bien placer les émetteurs et la passerelle en hauteur pour qu'elle puisse recevoir des données ou encore en augmentant la puissance du signal.

Tout ce qui a été vu a pu être appliqué sur un prototype, il ne reste qu'à essayer sur le système réel ECCOLOGGING.

## IV. Application au système réel : antenne ECCOLOGING

Le module et le prototype sont assez différents et nécessitent de répondre à plus de caractéristiques.
## 9. Différence entre la station ECOLOGGING et le module

### viii. Les différents capteurs et leurs rôles

<figure><img src="image_12.png" /><figcaption>Figure 1: Prototype station ECOLOGGING LoRaWAN</figcaption></figure>

La station météorologique est composé d'un capteur de luminosité VEML7700, mais aussi du capteur d'humidité relative et de température BME280, et de l'anémomètre DAVIS qui récupère la vitesse du vent et son orientation. Enfin, il y a un pluviomètre LEXCA001 pour déterminer le cumul de pluie. Il y a aussi de nouveau un shield la66 et un arduino mega 2560.

Ces changements se traduisent aussi dans le code.

#### x. Changement dans le code arduino

En effet, les nouveaux capteurs doivent être déclarés et leurs mesures envoyées. Le code de mesure a été réalisé par Pierre BORDENAVE.

Finalement, le nouveau code permet d'avoir une idée des mesures, et de savoir si les capteurs sont en fonctionnement. Pour pouvoir faire ces changements, il a fallu organiser les données transmises en 8 bytes pour 6 données capteurs. Donc

la température en a 2, pour son signe et pour sa valeur, 1 pour l'humidité relative, 1 pour la vitesse du vent, 2 pour le rayonnement, 1 pour la direction et 1 pour le cumul de pluie.

Il y a donc une perte de précision.

Les autres changements concernent la commande AT mais aussi le décodeur de The Things Network.

Le décodeur et le code de transmission est disponible en annexe.

<figure><img src="image_13.png" /><figcaption>Figure m: Capture d'écran de The Things Network des données transmises par la station ECOLOGGING</figcaption></figure>

La capture permet de voir que la sortie a effectivement changé et qu'il y a plus de mesures qui sont comprises.

La station transmet bien en LoRaWAN, les tests pour vérifier le fonctionnement de la station peuvent commencer.

### 10. Test en situation réels

Le module permettait d'expérimenter le code et sa viabilité. En passant sur le prototype de la station ECOLOGGING LoRaWAN, il est utile de savoir s'il est possible de l'installer et combien de temps, et de connaître sa consommation électrique.
## x. Energie

Le plus rapide à mesurer est la consommation électrique avec un appareil de mesure. Nous avons utilisé est un USB UM25C, voir référence dans la bibliographie. Il permet de relever la tension, le courant, la puissance, et la température de l'appareil.

Il est important de comparer les relevés avec ceux de la station ECOLOGGING 4G.

<table><caption>Tableau 4: Comparaison des résultats des tests de consommation électrique du prototype ECOLOGGING en LoRaWAN et en 4G</caption><thead><tr><td>Consommation électrique</td><td>Tension en Vdc</td><td>Courant en A</td><td>Watt</td></tr></thead><tbody><tr><td>Station météorologique 4G</td><td>5,1</td><td>0,13</td><td>0,663</td></tr><tr><td>Station météorologique LoRaWAN</td><td>5,143</td><td>0,0984</td><td>0,506</td></tr></tbody></table>

Comme attendu, la consommation électrique en Watt, est plus importante pour la station 4G que celle en LoRaWAN. Ces mesures ne permettent pas de connaître l'autonomie finale de la station. Il faut donc effectuer le test.

## xi. Autonomie

Jusqu'à aujourd'hui la station ECOLOGGING émettait en 4G avec 57h d'autonomie. Elle est équipé d'une pile Li-ion fournissant 38,48Wh. L'autonomie est un paramètre essentiel à prendre en compte dans la conception de station car bien qu'elle ait un panneau solaire intégré, celui-ci ne suffit pas pour l'alimenter la nuit. Finalement la batterie de la station se videra petit à petit si le l'ensoleillement n'est pas assez fort. C'est pourquoi ce test est primordiale pour savoir si la station peut être placé sur le terrain.

D'après la littérature, le protocole LoRaWAN consomme moins que la 4G, donc la station LoRaWAN devrait avoir une meilleure autonomie que la station 4G avec une même pile Li-ion.

<table><caption>Tableau 5: Comparaison des résultats des tests d'autonomie du prototype ECOLOGGING en LoRaWAN et en 4G</caption><thead><tr><td>Autonomie avec pile Li-ion 38,48Wh</td><td>Temps en heure</td></tr></thead><tbody><tr><td>Station météorologique 4G</td><td>57</td></tr><tr><td>Station météorologique LoRaWAN</td><td>73</td></tr></tbody></table>

D'après les résultats cette autonomie est vérifié. Le résultat optimal est 6 jours d'autonomie sans recharge, et la station a tenu 79h. Les résultats sont donc intéressant, car la station en LoRaWAN a bien de meilleure performance d'autonomie que celle en 4G. Cependant ce n'est pas suffisant pour une installation sur le terrain. Pour atteindre l'objectif, la station disposera de 2 batteries et on s'approchera des 6 jours d'autonomie.

Donc afin que la station soit autonome, il faudra y ajouter un régulateur, une batterie supplémentaire, ainsi qu'un panneau solaire pour la recharger.
# CONCLUSION ET PERSPECTIVES

Tout au long de ce stage, l'objectif a été de mettre en place une transmission en LoRaWAN sur la station de mesure météorologique ECOLOGGING. De façon générale, l'objectif a été atteint en étudiant les outils nécessaires à la mise en place d'un tel projet. Mais aussi, en réussissant la mise en place de la transmission LoRaWAN pour un module arduino et en testant différentes caractéristiques du protocole LoRaWAN. Et finalement, en vérifiant le fonctionnement de la station ECOLOGGING. C'est au niveau de l'économie d'énergie que le protocole LoRaWAN a une véritable plus-value en comparaison avec la 4G. C'est une piste pour l'avenir, mais il est important de réfléchir à la suite du projet.

Les perspectives sont les suivantes :

* Mise en place de Node-Red pour enregistrer les données et les visualiser en graphiques.

* Analyser les données par Grafana

De plus, une amélioration de l'autonomie de la station 4G, en utilisant une batterie à décharge lente, des panneaux solaires ou bien un régulateur de charge sont des pistes à suivre.
# BIBLIOGRAPHIE

Dragino.02/05/2024,

http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LA66%20LoRaWAN%20Shield%20User%20Manual/

eWBM 02/05/2024, LoRa AT Command Manual, https://www.tme.eu/Document/6fd083ba11ae9feedaadc9c7221ab46e/eWBM_LoRa_ATzelCommand_v0.6.pdf

The Things Network.06/05/2024,

https://www.thethingsnetwork.org/map

Dragino.07/05/2024,

http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20All%20Gateway%20models/HPOC/

Arduino.07/05/2024,

https://docs.Arduino.cc/learn/communication/lorawan-101/

AEQ-WEB.21/05/2024,

https://www.aeq-web.com/dragino-la66-lorawan-shield-payload-code-ttn/

AEQ-WEB.21/05/2024,

https://www.aeq-web.com/so-funktioniert-die-lora-payload-encoder-decoder-ttn/

Geoportail.24/05/2024,

https://www.geoportail.gouv.fr/carte

Reichelt.24/05/2024,

https://www.reichelt.com/fr/fr/appareil-de-mesure-usb-um25c-joy-it-um25cp245323.html?PROVID=2810&gad_source=1&gclid=CjwKCAjw1KzBhBIEiwAWeCOF4EDQMINSIE7v1Hq9lfOipAi2T2Z2ICMvx5QHim3Xw0uLSgROV2y1hoC4R4QAvD_BwE
# ANNEXES

**Annexe a: Manuel d'utilisation LoRaWAN Dragino et The Things Network réalisé par Ambre**
université
de BORDEAUX

<figure><img src="image_14.png" /></figure>

MISE EN FONCTIONNEMENT
/CONFIGURATION D'UNE
ANTENNE LORAWAN DRAGINO

Encadré par : Pierre BORDENAVE

Rédigé par : Ambre JARRIER

2024
## Préquels :

Une connexion en LoRaWan permet d'avoir une transmission de haute portée avec un besoin énergétique très faible. C'est pourquoi, de nos jours, il y a de plus en plus de personnes qui cherchent à mettre en place une chaîne de mesures fiable en LoRa. Pourtant, bien qu'il commence à exister beaucoup de documentation sur le sujet, il parait nécessaire de sortir un papier décrivant exactement chaque étape. De la mise en place matérielle à la réception des données. Tout au long de ce manuel, il sera utilisé un matériel spécifique décrit plus bas, mais le concept reste le même pour tout ce qui est de connexion sur The Things Network (TTN).

En effet, une chaîne LoRaWAN a souvent la même architecture :

**Carte avec capteurs et antenne LoRa → Passerelle → Serveur d'application**

Le « *End Device* » va symboliser d'où viennent les données, donc souvent, ce sera un capteur avec un outil pour transmettre en LoRaWAN. La « *Gateway* » est une passerelle qui va permettre une connexion sur l'internet des objets et internet en règle général. Finalement, le « *Serveur d'application* » va héberger les données capteurs reçus, c'est dessus que nous pourrons les récupérer. Ce manuel d'utilisation s'arrête à l'étape de visualisation des données sur le serveur d'application sans donner de code arduino. Car les différences dues au matériel se feront surtout au moment de paramétrer le « *End Device* ».

Voici le **matériel** qui sera utilisé pour le manuel d'utilisation :

* **End Device**: Shield LA66 avec Arduino MEGA 2560 et capteurs SEN0227 (pourcentage d'humidité relative et température en °C) et VEML770 (luminosité en lux).

* **Gateway**: Dragino DLSO8N

* **Serveur d'application**: The Things Network

<figure><img src="image_15.png" /><figcaption>Figure.1: DLSO8N</figcaption></figure>

<figure><img src="image_16.png" /><figcaption>Figure.2: Shield LA66 et Arduino MEGA 2560</figcaption></figure>

# GATEWAY

## Etape 1 : Alimentation (Spécifique au DLSO8N)

Pour commencer, il faut brancher les fils de la led et l'alimentation au DLSO8N comme sur la figure qui suit. Sans oublier bien sûr de vérifier la prise.
<figure><img src="image_17.png" /><figcaption>Figure.3 : Connectique du DLSO8N</figcaption></figure>

Il est possible que rien ne se passe. En effet, après avoir alimenter votre passerelle, la LED située sur l'entrée est censée brillé rouge comme sur la photo ci-dessus.

<figure><img src="image_18.png" /><figcaption>Figure.4 : Led indiquant l'état de la connexion (rouge : bien alimenté mais pas de connexion).</figcaption></figure>

Si ce n'est pas le cas, alors essayez de brancher aussi le câble USB pour fournir une alimentation secondaire. Cela est peut-être dû au fait que la gateway (GW) a besoin de plus d'énergie afin de se lancer pour la première fois ou depuis longtemps.

A partir de cette étape, c'est valable pour toute les stations dragino qui ont la possibilité d'émettre et de recevoir en wifi.

## Etape 2 : Connexion à Dragino

Une fois que la LED est rouge le DLSO8N se met à émettre en réseau wifi directement. Elle est configurée pour, dès la sortie d'usine.

Elle va pouvoir être visible en wifi sur un appareil pouvant la recevoir. Cet appareil n'a pas besoin d'être relier à quoi que ce soit avant. Cette connexion est aussi possible via un smartphone.

L'identifiant de la passerelle commence toujours par dragino, ensuite les chiffres et lettres sont variables selon l'appareil utilisé et permettent l'identification de celui-ci.

**Exemple** : dragino-27ec32
<figure><img src="image_19.png" /></figure>

Pour pouvoir se connecter, il faut entrer le code :

**dragino+dragino**

Cette méthode est valable pour toute les gateways Dragino.

Figure.5 : Connexion au wifi de la passerelle

Ensuite, sur un explorateur internet, taper l'IP :

**10.130.1.1**

Cette page demandera un identifiant mais aussi un mot de passe

<figure><img src="image_20.png" /></figure>

Figure.6: Connexion à l'interface du DLSO8N

« Username » : **root**

« Password » : **dragino**

Une fois, ceci fait, vous tomberez sur une page de chargement telle que :

<figure><img src="image_21.png" /></figure>

Figure.7: Interface Dragino de la passerelle et ses différents champs.

* Les croix rouges signifient qu'il n'y a pas du tout de connexion

* Les pastilles vertes sont donc pour une connexion établie

* Il peut arriver d'avoir aussi une pastille orange :

<figure><img src="image_22.png" /></figure>

Il y a une adresse IP, mais qu'elle n'est pas utilisée.

* Et la dernière est une pastille grise : Elle indique qu'un des paramètres de la gateway bloque l'utilisation de ce Signal
## Etape 3 : Connexion à Internet

Pour que la connexion puisse être possible, il va falloir modifier les paramètres de la GW qui doit être à la fois modem et clients pour pouvoir envoyer des données, mais aussi en recevoir.

Pour cela, allez dans :

« Network » → « Wi-Fi »

* Cochez la case « Enable Wifi Wan Client ».

Ceci permet à la passerelle de se connecter à un pont d'accès wifi existant.

* Dans « Host Wifi SSID », rentrez le nom de votre réseau

* Et dans « Passphrase », le code du réseau

* Finalement, cliquez sur « Save&Apply »

<figure><img src="image_23.png" /><figcaption>Figure.8 : Page Wi-Fi de l'interface</figcaption></figure>

Le chargement va peut-être être un peu long, mais c'est normal. De plus, la gateway va se mettre à clignoter rapidement en vert, pour finir par se stabiliser et émettre un vert stable. Félicitations, vous êtes sur Internet.

<figure><img src="image_24.png" /><figcaption>Figure.9 et Figure.10 : Led verte indiquant la connexion au réseau et les pastilles verte confirmant le bon fonctionnement du système</figcaption></figure>

(Surtout garder cette page ouverte, nous en aurons besoin par la suite)

## Etape 4 : Enregistrement sur TTN

Pour pouvoir enregistrer sa GW sur TTN, il faut au préalable avoir un compte dessus. Il faut d'abord en créer un si vous n'en avez pas encore.
Ensuite, il sera possible de commencer.

<figure><img src="image_25.png" /><figcaption>Figure.11 : Interface The Things Network</figcaption></figure>

* C'est dans la console que se trouve la zone de travail.

* Ensuite, il faudra choisir la zone dans laquelle vous vous trouvez

* Et continuer avec votre compte que vous venez de vous créer

Finalement ce qui ici nous intéresse, ce sont les GW, donc cliquez sur « Go to gateways ».

<figure><img src="image_26.png" /><figcaption>Figure.12 : Console de The Things Network page de la passerelle</figcaption></figure>

Puis allez sur « + Register gateway » pour pouvoir enregistrer votre toute nouvelle passerelle. Il est impossible d'enregistrer une passerelle en double, car celles-ci ont chacune des identifiants différents.

Il est maintenant temps d'utiliser la page Dragino qui a bien est restée ouverte, car vous y trouverez le Gateway EUI.

* Allez sur « LoRaWAN - Semtech UDP »

* Récupérez le Gateway EUI

* Vérifiez que vous êtes bien en « Service Provider » le réseau TTN V3

* Et en « Server Address » le même que sur votre adresse internet de TTN :

<figure><img src="image_27.png" /><figcaption>Figure.13 : URL de TTN</figcaption></figure>

* Si quelque chose n'est pas bon, n'hésitez pas à chercher dans la liste déroulante

* Au cas où, à la fin, appuyez sur « Save&Apply »

<figure><img src="image_28.png" /><figcaption>Figure.14 : Configuration interface LoRaWAN</figcaption></figure>

Retournez sur TTN, normalement le « Gateway ID » est automatiquement attribué. Il ne reste plus qu'à choisir le « Frequency plan » qui dépend de la région du monde dans lequel vous vous trouvez. En Europe, par exemple, choisissez « Europe 863-870 MHz (SF9 for RX2 - recommended) »

Appuyez sur le bouton « Register gateway », et le travail est fini.

Remarque : Pas besoin de cocher la case « Require authenticated connection » puisque notre GW est en LoRaWAN Semtech UDP.

Si tout se passe bien, sur la page principale ou il y a toutes les gateways la nouvelle est affichée. Si la connexion est bonne, il y aura une lumière bleue sous « Status » avec un message : « Connected ».

Si ce n'est pas le cas, c'est qu'il y a un problème dans votre déclaration de passerelle avec peut-être un mauvais EUI.
Fin de la déclaration de la GW.

Remarque : Pour beaucoup de produits dragino cela se passe de la même manière, à la différence que c'est la connexion à Internet qui va changer. Toute les draginos conservent les mêmes mots de passe et identifiants pour la connexion à l'interface Dragino.

## END DEVICE

La communication entre TTN et le « *End Device* », ici une carte Arduino Mega 2560 avec un shield la66 et des capteurs, est bien plus rapide à mettre en place, car il n'y a pas de paramètre à changer directement sur la carte. Tout va donc se passer sur TTN.

## Etape 1 : Alimentation

Branchez simplement la carte Arduino à un port USB d'un pc avec lequel vous travaillez. Vérifiez que vous avez la carte « Registration Key » fourni avec le la66. Sinon la connexion sera plus compliquée.

## Etape 2 : Création application

* Allez sur cette page

* Allez sur « Go to applications »

* Vous trouverez ensuite toutes les applications que vous avez créées :

<figure><img src="image_29.png" /><figcaption>Figure.15: Console de TTN page de l'application</figcaption></figure>

Une application correspond à l'endroit où les données de chaque capteurs sont reçu et rangé par émetteur. En effet, une application peut avoir plusieurs « end device ».

<figure><img src="image_30.png" /><figcaption>Figure.16: Page principale de la console The Things Network</figcaption></figure>

* Appuyez sur « *Create application* »

* L'« *Application ID* » vous permettra de la retrouver, mais aussi sera le nom utilisé dans les lignes de codes qui tournent en fond.

<caption>Figure.17 : Création d'une application</caption>

## Etape 3 : Création du End Device
Une fois l'application créée, il faut que celle-ci communique avec votre module. Pour cela, il faut commencer par l'enregistrer dans l'application :

Vous pourrez ensuite la retrouver avec le nom que vous lui avez donné.

<figure><img src="image_31.png" /></figure>

* Avant de commencer à paramétrer la connexion, vérifiez que votre module n'est pas disponible dans « *Select the end device in the LoRaWAN Device Repository* »

<figure><img src="image_32.png" /><figcaption>Figure.18: Page principale de l'application</figcaption></figure>

* Sinon choisissez la fréquence relative à votre région en vérifiant les recommandations de TTN

* Ensuite pour le la66, choisissez le **LoRaWAN Specification 1.0.3**, car sinon vous devrez préciser la version des paramètres régionaux.

* Dans « *JoinEUI* » il faut entrer le APP EUI fourni avec le shield.

Figure.19: Enregistrer l'emetteur

* Réutilisez le Registration Key pour entrer le « *DevEUI* » et le « *AppKey* »

* Le « *End device ID* » permet de nommer notre carte pour pouvoir la retrouver plus facilement

* Puis, appuyez sur « *Register end device* »

<figure><img src="image_33.png" /></figure>

Si tout s'est bien passé et qu'elle est bien connectée, elle affichera une pastille orange parce qu'il n'y a pas encore de lien entre l'application et le module.

<figure><img src="image_34.png" /></figure>

DRAGINO-LA66

ID: eui-a84041cf2184ddf4

↑ n/a

↓ n/a

<figure><img src="image_35.png" /></figure>

Last activity 48 minutes ago

<figure><img src="image_36.png" /><figcaption>Figure.21: Activité du Shield Dragino</figcaption></figure>

Figure.20: Plus d'information à renseigner sur l'emetteur

Pour savoir que la connexion est bonne, il faut vérifier la présence de la pastille bleue avec marquée la dernière fois que le module a été connecté à TTN.
Nous pourrons la retrouver connectée à notre application.

Pour démarrer la communication, il suffit d'envoyer un message au shield LA66, si celui-ci est bien envoyé alors tout est connecté.

<figure><img src="image_37.png" /><figcaption>Figure.22: Test de communication avec le shield</figcaption></figure>

TRANSMISSION DES DONNEES

Finalement, le gros du travail est encore à réaliser, en effet maintenant il faut coder sur la carte arduino connectée au shield la66.

Nous conseillons, pour cette installation, d'utiliser directement la doc arduino du la66 qui comporte plusieurs exemples afin de comprendre comment mettre en place la transmission :

<https://www.dropbox.com/sh/hgtycj0go4tka2r/AAACRRIRriMAudB2m3ThH7Sba?e=1&dl=0>

Nous avons aussi pu s'inspirer d'un site web allemand qui explique comment encoder et décodeur les données des capteurs. C'est un passage obligé pour pouvoir récupérer ses données.

Payload :

<https://www.aeq-web.com/so-funktioniert-die-lora-payload-encoder-decoder-ttn/

Exemple de code avec un payload associé :

<https://www.aeq-web.com/dragino-la66-lorawan-shield-payload-code-ttn/

Voici un exemple de décodeur que nous avons réalisé en java grâce à la documentation :

<figure><img src="image_38.png" /><figcaption>Figure.23: Enregistrer un décodeur pour décrypter les bytes</figcaption></figure>

Attribution d'une dizaine à chaque byte qui sont préalablement convertie en hexadecimal pour pouvoir l'envoyer en LoRa. Afin d'avoir plus de précision, 2 bytes pour le pourcentage d'humidité (bytes[1] = AB, bytes[2]= CD/100, humd = AB,CD), par exemple.
Voici les informations que nous avons quand les données sont bien reçu et sous quelle forme :

<figure><img src="image_39.png" /><figcaption>Figure.24: Visualisation des données</figcaption></figure>

Après avoir une connexion fonctionnelle, il faut quand-même automatiser la récupération des données avec par exemple Node-Red et ensuite grafana, mais pour ce qui est de la transmission LoRaWAN, elle est maintenant fonctionnelle et exploitable.

Pour pouvoir mieux vous aider, voici une liste de problème que nous avons rencontré et les solutions mises en place qui ont été efficace :

<table><caption>Tableau : Solution qui ont été efficace face aux problèmes rencontrés</caption><thead><tr><td>Problèmes rencontrées :</td><td>Solution :</td></tr></thead><tbody><tr><td>Plus d'accès à la LPS8v2 (aussi 4G)</td><td>J'avais changé le mode de ma LPS8v2 de modem à clients pour qu'elle ait une connexion internet, mais je ne parvenais plus à accéder à l'interface dragino. J'ai donc branché un fil éthernet de ma passerelle à un ordinateur. Et j'ai suivi ce que le manuel d'utilisation me disait de faire. Finalement, j'ai pu récupérer mon accès à l'interface dragino</td></tr><tr><td>LPS8v2 pas de double connexion, pas de reset</td><td>Lorsque je me connectais sur l'interface dragino propre à ma passerelle, je ne pouvais que choisir entre la configurer en client, ou bien la configurer en modem, mais il n'était pas accessible de faire les deux à la fois. De plus, la possibilité de reset n'était pas accessible à l'endroit où elle était censée être. Finalement, j'ai dû changer de matériel directement et prendre une nouvelle passerelle.</td></tr><tr><td>DLOS8N ne s'allume pas</td><td>Même quand la passerelle était sous tension, la led ne s'allumait pas, j'ai dû la brancher en plus à un ordinateur, ce qui lui à permis d'avoir un petit peu plus de jus, et la led s'est allumé d'un rouge miraculeux</td></tr><tr><td>Payload vide</td><td>Lorsque j'étais sur TTN et que je visualisais le "Live Data", je voyais : Payload { }. Après moult recherche, j'ai changé de shield la66 pour un autre neuf, et j'ai bien commencé à recevoir sous la forme de Bytes.</td></tr><tr><td>Variable vide dans un bloc imbriqué</td><td>J'essayais d'utiliser une donnée qui venait d'un bloc loop, et de l'extraire dans une boucle supérieure, mais en arduino il n'est pas possible de le faire. Donc j'ai créé une nouvelle fonction avec un pointeur qui permet de récupérer et de modifier les données.</td></tr><tr><td>Données incohérentes</td><td>Mon problème venait de la conversion de mes données en hexadecimal. La solution a donc été de changer de moyen de conversion, en utilisant la méthode de la doc arduino plutôt que celle du site allemand.</td></tr></tbody></table>

<table><tr><td>Type :</td></tr><tr><td>Arduino</td></tr><tr><td>Mix</td></tr><tr><td>TTN</td></tr><tr><td>Matériel</td></tr><tr><td>Dragino</td></tr></table>
# Annexe b : Code arduino surveillance pour station ECOLOGGING avec capteur BME transmission
float SommeL = 0;

float SommeV = 0;

float SommeD = 0;

float MoyenneHR = 0;

float MoyenneT = 0;

float MoyenneL = 0;

float MoyenneV = 0;

float MoyenneD = 0;

float hourlyMoyenneHR = 0;

float hourlyMoyenneT = 0;

float hourlyMoyenneL = 0;

float hourlyMoyenneV = 0;

float hourlyMoyenneD = 0;

float dailyMoyenneHR_till_lastHour = 0;

float dailyMoyenneT_till_lastHour = 0;

float dailyMoyenneL_till_lastHour = 0;

float dailyMoyenneV_till_lastHour = 0;

float dailyMoyenneD_till_lastHour = 0;

//+==========================+RTC+==========================+

RTC_DS3231 RTC;//RTC DS3231

RTC_Millis rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday"};//RTC DS3231

//+==========================+VEML7700+==========================+

DFRobot_VEML7700 als;

//+==========================+SEN0227+==========================+

//DFRobot_SHT20 sht20;

//+==========================+BME280+==========================+

BME280_I2C bme;

//+==========================+SHT31+==========================+

#define SHT31_ADDRESS 0x44

//SHT31 sht31_1;
unsigned int t_acq2;

unsigned int t_acq3;

//lectures du temps avec fonction millis pour augmenter la prÃ©cision d'acquisition

unsigned long finacquisition=0;

unsigned long debutacquisition=0;

const unsigned long periodacquisition = 20000;

int neg;

//-------------------------------DECLARATION-TRANSMISSION-------------------------------

--

#include <SoftwareSerial.h>

String inputString = ""; // a String to hold incoming data

bool stringComplete = false; // whether the string is complete

long old_time = millis();

long new_time;

long uplink_interval = 3000;// temps entre l'envoie de chaque donnÃ©es (30 000 = 30s)

bool time_to_at_recvb = false;

bool get_LA66_data_status = false;

bool network_joined_status = false;

SoftwareSerial ss(10, 11); // Arduino RX, TX,

char rxbuff[128];

uint8_t rxbuff_index = 0;

//------------------------------------FONCTIONS-MESURES------------------------------------
////″////ANEMOMETRE DAVIS////″////

// usr routine fr timer interrupt

void usr_timer() {

TimerCount++;

if(TimerCount == 5)

{

IsSampleRequired = true;

TimerCount = 0;

}

}

// This is the function that the interrupt calls to increment the rotation count

void usr_rotate() {

if ((millis() - ContactBounceTime) > 15 ) { // Debounce the switch contact.

Rotations++;

ContactBounceTime = millis();

}

}

// Get Wind Direction

void getWindDirection() {

VaneValue = analogRead(WindVanePin);

Direction = map(VaneValue, 0, 1023, 0, 360);

CalDirection = Direction + VaneOffset;

if(CalDirection > 360)

CalDirection = CalDirection - 360;

if(CalDirection < 0)
CalDirection = CalDirection + 360;

}

// Converts compass direction to heading

void getHeading(int direction) {

if (direction < 22.5)

Serial.print("N");

else if (direction < 45)

Serial.print("NNE");

else if (direction < 67.5)

Serial.print("NE");

else if (direction < 90)

Serial.print("ENE");

else if (direction < 112.5)

Serial.print("E");

else if (direction < 135)

Serial.print("ESE");

else if (direction < 157.5)

Serial.print("SE");

else if (direction < 180)

Serial.print("SSE");

else if (direction < 180)

Serial.print("SSE");

else if (direction < 202.5)

Serial.print("S");

else if (direction < 225)

Serial.print("SSO");

else if (direction < 247.5)

Serial.print("S0");

else if (direction < 270)

Serial.print("OSO");

else if (direction < 292.5)

Serial.print("O");
}

if (RTC.lostPower()) { //fonction ajustement du temps si il y a la perte de l'heure recalage
    RTCAdjustDateTime(F(__DATE轩), F(__TIME__));
}

if (!bme begins()) //BME280
    while (1);
}
bme.setTempCal(-1);
//sht20.initSHT20()://SEN0227
//sht20.checkSHT20()://SEN0227

pinMode(53, OUTPUT); //SD pour MEGA

pinMode(WindSensorPin, INPUT); //DAVIS
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr, FALLING); //DAVIS
Timer1.initialize(500000); //DAVIS
Timer1.attachInterrupt(isr_timer); //DAVIS

pinMode(RainPin, INPUT); //pluviomÃtre lecture PIN2

//ecriture des variable type a mesurer dans carte SD cad nom des colonnes

fichier20s = SD.open("ECOLO20s.csv", FILE_WRITE); //ici limite au nombre de lettre pour ecrire nom fichier
de plus si on veut un fichier txt il faut changer en .txt

fichier20s.print("Date et heure"); //nom premiere colonne date

fichier20s.print(";"); //separateur

fichier20s.print("HR_%");

fichier20s.print(";");

fichier20s.print("T_Â°C");

fichier20s.print(";");

fichier20s.print("Ray_lux");

fichier20s.print(";");

fichier20s.print("V_km/h");
fichier20s.print(";");

fichier20s.println("Dir_degree");

fichier20s.close(); //fermeture fichier

MoyH = SD.open("moyH.csv", FILE_WRITE); //ici limite au nombre de lettre pour ecrire nom fichier de plus si on veut un fichier txt il faut changer en .txt

MoyH.print("Date et heure"); //nom premiere colonne date

MoyH.print(";"); //separateur de colonne

MoyH.print("CumulPluieH en mm"); //intitule de la colonne

MoyH.print(";");

MoyH.print("HR_moy en %");

MoyH.print(";");

MoyH.print("T_moy en Â°C");

MoyH.print(";");

MoyH.print("Ray_moy en lux");

MoyH.print(";");

MoyH.print("V_moy en km/h");

MoyH.print(";");

MoyH.print("Dir_moy en deg"); //separateur de colonne

MoyH.print(";");

MoyH.println("CumulPluieday en mm"); //intitule de la colonne

MoyH.close(); //fermeture fichier

//--------------------------------------SETUP-TRANSMISSION--------------------------------------

ss.Begin(9600);

ss.listen();

// reserve 200 bytes for the inputString:

inputString.Reserve(200);

ss.println("ATZ"); //reset LA66
//remplir le payload des valeurs ascii pour les retrouver transmises

}// FIN DE SETUP

//------------------------------------FONCTIONS-TRANSMISSION------------------------------------

void adaptation(uint8_t* ptr, uint8_t value) //cette fonction me permet de sortir des variables d une boucle
inferieur a une boucle superieur

*ptr = value; // Modifier la variable pointÂ©e
}
}

void loop() {

uint8_t go = 0;

uint8_t temp1, temp3, humd, humd2;

int nbytesmes = 14; // 3 pour la temperature, 2 pour humidite, 3 pour les lux, 2 pour l'orientation du vent, 2 pour sa vitesse, 2 pour le cumul de pluie

char station[] = "ECOLOGGING_LoRa"; //nom de la station actuelle

uint8_t payload[nbytesmes + strlen Rid station);

for (int i = 0; i < strlen Rid station); i++) {

adaptation(&payload[i + nbytesmes], (int)station[i]);

}//fin de la boucle for

//------------------------------------LOOP-MESURE------------------------------------

//float humd; //SEN0227

//float temp; //SEN0227

float lux; //VEML7700

finacquisition=millis();

DateTime now = RTC.now(); //lecture RTC DS3231
t_maintenant = (now minute() * 60) + now second();

t_acq1 = (now minute() * 60) + seconde_acq1;

t_acq2 = (now minute() * 60) + seconde_acq2;

t_acq3 = (now minute() * 60) + seconde_acq3;

if (((finacquisition - debutacquisition) >=
periodacquisition) && ((t_maintenant == t_acq1) || (t_maintenant == t_acq2) || (t_maintenant == t_acq3))) {
debutacquisition = finacquisition;

bme.readSensor();

//humd = sht20.readHumidity(); //SEN0227
//temp = sht20.readTemperature(); //SEN0227
//sht31_1.read();
als.getALSLux(lux); //VEML7700
getWindDirection();

if (abs(CalDirection - LastValue) > 5) {
LastValue = CalDirection;}

WindSpeed = ((Rotations * 0.75) * 1.60934); //multiplication par 1.60934 pour passer en km/h formule pour
calculer la vitesse windspeed : V = P(2.25/2.5) = P * 0.9

Rotations = 0;
IsSampleRequired = false;

//sommation
SommeHR += bme.getHumidity();
SommeT += bme.getTemperature_C();
//SommeHR += humd;
//SommeT += temp;
//SommeHR += sht31_1.getHumidity();
//SommeT += sht31_1.getTemperature();
SommeL += lux;
SommeV += WindSpeed;
SommeD += CalDirection;

//affichage monitoring ARDUINO
Serial.print(now.day(), DEC); //premiere colonne date
Serial.print(''); //format jour _/_/_/_/_
Serial.print(now.month(), DEC);
Serial.print('');
Serial.print(now.year(), DEC);
Serial.print('');
Serial.print(now hour(), DEC); //deuxième colonne heure
Serial.print(''); //format heure _ : _ : _ _
Serial.print(now.minute(), DEC);
Serial.print('');
Serial.print(now.seconde(), DEC);
Serial.print('');
Serial.print(bme.getHumidity(), 1); Serial.print("H_env %t"); // HR en %
Serial.print(bme.getTemperature_C(), 1); Serial.print("T_env *C_t"); // T en Â°C
//Serial.print(humd, 1); Serial.print("H_env %t"); // HR en %
//Serial.print(temp, 1); Serial.print("T_env *C_t"); // T en Â°C
//Serial.print(sht31_1.getHumidity(), 2); Serial.print(" %t"); // HR en %
//Serial.print(sht31_1.getTemperature(), 2); Serial.print("*C_t"); // T en Â°C
Serial.print(lux); Serial.print("Lux_t");
Serial.print(WindSpeed); Serial.print("km/h_t");
getHeading(CalDirection); Serial.println("\t");

/*-------------------------------------------RECUPERATION-MESURE-POUR-TRANSMISSION----------------------------------
-------*/
adaptation(&temp1, bme.getTemperature_C());
adaptation(&temp3, ((bme.getTemperature_C() - (int)(bme.getTemperature_C())*100));
adaptation(&humd, bme.getHumidity());
adaptation(&humd2, ((bme.getHumidity() - (int)(bme.getHumidity())*100));

/*-------------------------------------------FIN-RECUPERATION-MESURE-POUR-TRANSMISSION----------------------------------
-------*/

//écriture sur la carte micro SD du fichier ECOLOGING acquisition toutes les 20secondes

File fichier20s = SD.open("ECOLO20s.csv", FILE_WRITE); //écriture des données dans la carte SD
fichier20s.print(now.day());
fichier20s.print("/"); //format jour _/_/_/_/_
fichier20s.print(now.month());
fichier20s.print("/");
fichier20s.print(now.year());
fichier20s.print(" ");//separateur de colonne
fichier20s.print(now hour());
fichier20s.print(":");//format heure _ : _ : _
fichier20s.print(nowsecond());
fichier20s.print(":");
fichier20s.print(nowsecond());
fichier20s.print(" : ");
//fichier20s.print(humd, 1);
//fichier20s.print(";");
//fichier20s.print(temp, 1);
fichier20s.print(bme.getHumidity(), 1);
fichier20s.print(":");
fichier20s.print(bme.getTemperature_C(), 1);
// fichier20s.print(sht31_1.getHumidity(), 1);
// fichier20s.print(":");
// fichier20s.print(sht31_1.getTemperature(), 1);
fichier20s.print(":");
fichier20s.print(lux, 1);
fichier20s.print(" : ");
fichier20s.print(WindSpeed);
fichier20s.print(" : ");
fichier20s.println(CalDirection);
fichier20s.close();//fermeture fichier

/*----POUR-AVOIR-LA-TRANSMISSION-A-CHAQUE-CHANGEMENT-DE-DATA----*/

adaptation(&go,1);

/*----FIN-DE-LA-PARTIE-TRANSMISSION----*/

}//fin enregistrement

} //fin acquisition 20sec
// Partie comptage de la bascule
// PluviomÃ©trie+avec enregistrement 60min

//Partie enregistrement, moyenne Â l'heure HR, T, L, V, D et cumul pour la pluie

if ((bucketPositionA==false)&&(digitalRead(RainPin)==HIGH)){
    bucketPositionA=true;
    dailyRain+=bucketAmount; // update the daily rain
}

if ((bucketPositionA==true)&&(digitalRead(RainPin)==LOW)){
    bucketPositionA=false;
}

//
//Partie enregistrement, moyenne Â l'heure HR, T, L, V, D et cumul pour la pluie

if (now minute() != 0) first = true; // after the first minute is over, be ready for next read

if (now minute() == 0 && first == true)

hourlyRain = dailyRain - dailyRain_till_lastHour; // calculate the last hour's rain

dailyRain_till_lastHour = dailyRain; // update the rain till last hour for next calculation

MoyenneHR = SommeHR(A);

MoyenneT = SommeT(A);

MoyenneL = SommeL(A);

MoyenneV = SommeV(A);

MoyenneD = SommeD(A);

hourlyMoyenneHR = MoyenneHR - dailyMoyenneHR_till_lastHour;

dailyMoyenneHR_till_lastHour = MoyenneHR;

hourlyMoyenneT = MoyenneT - dailyMoyenneT_till_lastHour;

dailyMoyenneT_till_lastHour = MoyenneT;

hourlyMoyenneL = MoyenneL - dailyMoyenneL_till_lastHour;

dailyMoyenneL_till_lastHour = MoyenneL;

hourlyMoyenneV = MoyenneV - dailyMoyenneV_till_lastHour;

dailyMoyenneV_till_lastHour = MoyenneV;
hourlyMoyenneD=MoyenneD - dailyMoyenneD_till_lastHour;
dailyMoyenneD_till_lastHour= MoyenneD;

Serial.print(now.day(), DEC); // premiere colonne date

Serial.print(''); // format jour _/_/_/_

Serial.print(now.month(), DEC);

Serial.print('');

Serial.print(now.year(), DEC);

Serial.print('');

Serial.print(now hour(), DEC); // deuxième colonne heure

Serial.print(''); // format heure _ : _ : _

Serial.print(nowminute(), DEC);

Serial.print('');

Serial.print(now 第 second(), DEC);

Serial.print('');

Serial.print (hourlyRain, 2); Serial.print("cumul en mm	"); // Pluie en mm

Serial.print (hourlyMoyenneHR, 2); Serial.print("MoyHR %	"); // HR en %

Serial.print (hourlyMoyenneT, 2); Serial.print("MoyT Â°C	"); // T en Â°C

Serial.print (hourlyMoyenneL, 2); Serial.print("MoyL Lux	"); // L en Lux

Serial.print (hourlyMoyenneV, 2); Serial.print("MoyV Kmh	"); // V en km/h

Serial.print (hourlyMoyenneD, 2); Serial.println("MoyD Â°	"); // D en Â°

File MoyH = SD.open("moyH.csv", FILE_WRITE); // ecriture des donnees dans la carte SD

MoyH.print (now.day());

MoyH.print(''); // format jour _/_/_/_

MoyH.print (now.month());

MoyH.print('');

MoyH.print (now.year());

MoyH.print(''); // separateur de colonne

MoyH.print (now hour());

MoyH.print (':'); // format heure _ : _ : _

MoyH.print (nowminute());

MoyH.print (':');

MoyH.print (now second());
MoyH.print(" "); //separateur de colonne

MoyH.print hourlyRain, 2);

MoyH.print(" ");

MoyH.print hourlyMoyenneHR, 1);

MoyH.print ( "; ");

MoyH.print (hourlyMoyenneT, 1);

MoyH.print ( "; ");

MoyH.print (hourlyMoyenneL, 1);

MoyH.print ( "; ");

MoyH.print (hourlyMoyenneV, 1);

MoyH.print ( "; ");

MoyH.print (hourlyMoyenneD, 1);

MoyH.print (" "); //separateur de colonne

MoyH.println (dailyRain, 2);

MoyH.close(); //fermeture fichier

} //fermeture enregistrement fichier SD

first = false; // execute calculations only once per hour

} //fermeture condition pluviometre

if (now hour() == 0) {

dailyRain = 0.0; // clear daily-rain at midnight

dailyRain_till AgendaHour = 0.0; // we do not want negative rain at 01:00

} //fermeture de la remise a zero cumul pluie a minuit

//--------------------------------------LOOP-TRANSMISSION---------------------------------------$

//DONNEES METEO

if (temp1 < 0) { // permet de savoir si la valeur de la temperature est negative ou bien positive

neg = 1;

}

else {

neg = 0;

}
0,2,(nbytesmes + strlenstation)),

//Relevé Météorologique

payload[0] & 0xFF, payload[1] & 0xFF,
payload[2] & 0xFF, payload[3] & 0xFF,
payload[4] & 0xFF, payload[5] & 0xFF,
payload[6] & 0xFF, payload[7] & 0xFF,
payload[8] & 0xFF, payload[9] & 0xFF,
payload[10] & 0xFF, payload[11] & 0xFF,
payload[12] & 0xFF, payload[13] & 0xFF,

//Nom de la station

payload[14] & 0xFF,payload[15] & 0xFF,
payload[16] & 0xFF,payload[17] & 0xFF,
payload[18] & 0xFF,payload[19] & 0xFF,
payload[20] & 0xFF,payload[21] & 0xFF,
payload[22] & 0xFF,payload[23] & 0xFF,
payload[24] & 0xFF,payload[25] & 0xFF,
payload[26] & 0xFF,payload[27] & 0xFF,
payload[28] & 0xFF);

//le snprint permet de choisir ce qui va etre envoye au serveur d'application

ss.println Projects the data buffer to the serial port.

adaptation(&go,0); //remise a zero du go

}

if (time_to_at_recvb == true) {
    time_to_at_recvb = false;
    get_LA66_data_status = true;
    delay(1000);

ss.println("AT+CFG");

}

while (ss available()) {
// get the new byte:

char inChar = (char) ss.read();

// add it to the inputString:

inputString += inChar;

rxbuff[rxbuff_index++] = inChar;

if (rxbuff_index > 128)
    break;

// if the incoming character is a newline, set a flag so the main loop can
// do something about it:

if (inChar == '\n' || inChar == '\r') {
    stringComplete = true;
    rxbuff[rxbuff_index] = '\0';

if (strcmp(rxbuff, "JOINED", 6) == 0) {
    network_joined_status = 1;
}

if (strcmp(rxbuff, "Dragino LA66 Device", 19) == 0) {
    network_joined_status = 0;
}

if (strcmp(rxbuff, "Run AT+RECVB=? to see detail", 28) == 0) {
    time_to_at_recvb = true;
    stringComplete = false;
    inputString = "\0";
}

if (strcmp(rxbuff, "AT+RECVB=", 9) == 0) {
    stringComplete = false;
    inputString = "\0";
    Serial.print("\r\nGet downlink data(FPort & Payload) ");
Serial.println(&rxbuff[9]);
}

rxbuff_index = 0;

if (get_LA66_data_status == true) {
    stringComplete = false;
    inputString = "\0";
}

}

}

while (Serial available()) {
  // get the new byte:
  char inChar = (char) Serial.read();
  // add it to the inputString:
  inputString += inChar;
  // if the incoming character is a newline, set a flag so the main loop can
  // do something about it:

if (inChar == '\n' || inChar == '\r') {
    ss.print(inputString);
    inputString = "\0";
}

}

// print the string when a newline arrives:
if (stringComplete) {
  //Serial.print(inputString);

// clear the string:
inputString = "\0";
stringComplete = false;

}

}//fermeture boucle du void loop infini
**Annexe c: Capture d'écran de The Things Network représentant le décodeur pour le code de surveillance des données applicable à la station ECOLOGGING réalisé par Ambre JARRIER**
Annexe d: Capture d'écran de The Things Network représentant le décodeur pour le code de surveillance des données applicable à la station ECOLOGGING réalisé par Ambre JARRIER

```javascript
1 function Decoder(bytes, port) {
2
3   var neg = bytes[0];
4   var temp = bytes[1] + (bytes[2]/100);
5   var humd = bytes[3] + (bytes[4]/100);
6   var lux = (bytes[5]*100) + bytes[6] + (bytes[7]/100);
7   var direction = bytes[8]*10 + (bytes[9]/10);
8   var WindSp = bytes[10]*10 + bytes[11]/10;
9   var HourlyRain = bytes[12] + (bytes[13]/100);
10
11  var asciiCodes = [bytes[14],
12  bytes[15],bytes[16],
13  bytes[17],bytes[18],
14  bytes[19],bytes[20],
15  bytes[21],bytes[22],
16  bytes[23],bytes[24],
17  bytes[25],bytes[26],
18  bytes[27],bytes[28]] ;
19
20  var nom = asciiCodes.map(code => String.fromCharCode(code)).join('');
21
22  if (neg == 1) {
23    temp = -temp;
24  }
25  return {
26    temperatureDegC: temp,
27    humidity_percent: humd,
28    lux: lux,
29    OrientationDeg: direction,
30    WindSpeed_km_per_hour: WindSp,
31    MM_Rain_per_hour: HourlyRain,
32    Nom_Station: nom
33  }
34 }
```