Visualisation de données issues de capteurs de luminosité

De Ensiwiki
Aller à : navigation, rechercher


Project schedule.png
Titre du projet Visualisation de données issues de capteurs de luminosité
Cadre Projets Réseaux Mobiles et Avancés

Équipe Sophie COURTEL, Thibaud GODON, Marcos RIBEIRO, Thibault SELLIN
Encadrants Franck Rousseau


Présentation

Objectif

L'objectif de ce projet est de collecter les données de deux capteurs de luminosité pour une serre connectée. Il s’agit d’effectuer des relevés de luminosité en temps réel et de les stocker dans une base de données. Une interface web permettra ensuite au gestionnaire de la serre connectée de connaître l’historique de l'ensoleillement, et ainsi d'optimiser l’exploitation agricole. La transmission des données s’appuie sur la technologie LoRa, un protocole prometteur pour le développement de l’IoT en général.

Le projet est disponible dans le répertoire gitlab suivant : https://gitlab.ensimag.fr/courtels/reseau

Matériel utilisé

  • 2 cartes Nucleo STM32 avec LoRa shield
  • 2 capteurs de luminosité IDUINO
  • 6 fils

Architecture

Architecture du projet

  • Capteur de luminosité IDUINO
  • Carte Nucleo et LoRa shield
  • Driver pour la conversion des données analogiques en données numériques
  • Réseau LoRa pour la transmission des données
  • Réseau TTN pour la réception des données par le réseau LoRa
  • Script Python pour la transmission de TTN vers Firebase
  • Base de données Firebase pour le stockage des données
  • Application web simpliste

Tutoriel

Prérequis logiciels

Configuration de TheThingsNetwork

 Application ID: Name_Of_Your_Application 
 Description: Description_Of_Your_Application
 Application EUI: Laisser vide
 Handler registration : ttn-handler-eu
  • Enregistrer ensuite un device à votre application :
 Device ID: saisisser_un_id_unique_pour_votre_device
 Device EUI: passer ce champ en génération automatique
 App Key: passer le champ en génération automatique
 App EUI: ne pas toucher
  • Dans l'application, activer le stockage de données Swagger UI en cliquant sur "add integration" dans l'onglet Integrations -> choisir l'option "Data Storage".
    • Cela active une API qui permet de récupérer les données envoyées via TTN.

Branchement des capteurs de luminosité

Trois fils sont nécessaires pour brancher chaque capteur IDUINO à une carte Nucleo. Le branchement se fait de la façon suivante :

  • Le fil jaune est le GND, branché sur le pin CN6-GND de la carte Nucleo
  • Le fil noir (carré blanc dans l'image) est le VCC, branché sur le pin CN6-3V3 de la carte Nucleo
  • Le fil rouge est la sortie analogique du capteur, branché sur le pin A1 du shield LoRa

* merci Leonardo ! *

St.png

Configuration des LoRa shields

Pour ce code, nous avons utilisé un projet fourni par ST Microelectronics. Voici la marche à suivre pour le télécharger :

I cube lrwan.png

  • Importer le projet suivant dans STM Cube : Projects/STM32L073RZ-Nucleo/Applications/LoRa/End_Node/SW4STM32/sx1272mb2das
  • Modifier le fichier Commissioning.h, trouvé en Projects/STM32L073RZ-Nucleo/Applications/LoRa/End_Node/LoRaWAN/App/inc
#define OVER_THE_AIR_ACTIVATION                   0
#define LORAWAN_PUBLIC_NETWORK                  true
#define IEEE_OUI                                rouge
#define STATIC_DEVICE_EUI                         1
#define LORAWAN_DEVICE_EUI               { IEEE_OUI, orange }
#define LORAWAN_JOIN_EUI                      { jaune }
#define STATIC_DEVICE_ADDRESS                     1
#define LORAWAN_DEVICE_ADDRESS            ( uint32_t )vert
#define LORAWAN_F_NWK_S_INT_KEY               { bleu }
#define LORAWAN_S_NWK_S_INT_KEY               { bleu }
#define LORAWAN_NWK_S_ENC_KEY                 { bleu }
#define LORAWAN_APP_S_KEY                    { violet }

Les couleurs sont données dans l'image :

Commisioning.png

  • Dans la méthode main, nous avons commenté la ligne DBG_Init() pour activer le debbuger :

Dbg.png


À ce stade, des données apparaissent dans TTN lorsque le projet est lancé depuis STM Cube (avec le debbuger) :

Ttn.png

Après, nous avons changé la méthode Send dans main.c pour l'adapter à notre projet :

Send.png

Nous nous sommes basés sur la méthode LORA_GetBatteryLevel() de main.c. Nous avons ajouté les méthodes suivantes:

  • LORA_GetLightLevel(void) dans main.c

Lora.png

  • HW_GetLightLevel(void) dans stm32l0xx_hw.c

Hw.png

Il faut bien ajouter les definitions des méthodes

  • static uint16_t LORA_GetLightLevel(void); dans main.c
  • uint16_t HW_GetLightLevel(void); dans hw_msp.h

Finalement, le résultat obtenu était:

Ttn intensite.png

Configuration du décodeur

Pour le moment, les données reçues ne sont pas exploitables. Il faut d'abord configurer un décodeur pour reconstruire la valeur envoyée à partir des octets du payload. Pour cela, se connecter au compte TTN et ouvrir l'onglet Payload Formats de l'application. Dans la section "decoder", saisir le code suivant :

Decoder.png

À présent, les données sont stockées dans Swagger UI et disponibles via une API pendant quelques jours.

Configuration de Firebase

Transfert des données de TTN à Firebase

Pour transférer les données du stockage temporaire de TTN vers Firebase, nous avons écrit le script Python ttn_to_firebase.py à exécuter manuellement. Dans l'idéal, ce script devrait être placé sur une machine serveur, et être exécuter automatiquement de façon journalière (à l'aide d'un cron par exemple).

Interface web

Pour visualiser les données dans le navigateur, il suffit d'ouvrir la page index.html de notre projet.

Compléments

Format des données

Les données envoyées par les capteurs de luminosité ne sont pas des données de luminosité à proprement parlé. Il s'agit de données se rapportant à la tension mesurée dans la résistance du capteur. Cette valeur évolue de 0 à 4096, le maximum correspondant à une intensité lumineuse nulle. Pour notre projet, nous avons supposé que la répartition des valeurs est linéaire. Cependant, dans la réalité, il aurait fallu réaliser un étalonnage des capteurs de façon empirique, puis déterminer des plages de tensions correspondant à des luminosités différentes.

Débogage

Afin de faciliter le débuggage du projet, nous avons utilisé le debugger fourni avec l'IDE STM Cube. Nous avons eu besoin de changer la configuration "Reset behaviour" du debugger pour utiliser l'option "Connect under reset" :

Debugger.png

Ressources