I. Sommaire :
I. Introduction générale
II. Cahier des charges et organisation du projet
1. Analyse fonctionnelle
2. Cahier des charges
3. Les matériels et outils utilisés
4. Diagramme de GANTT
5. Répartition des tâches
IV. Le Projet
Description détaillée
1. MQTT, c’est quoi?
2. ESP8266, c’est quoi?
3. Utilisation de l’environnement Arduino
4. Connexion Wi-Fi et serveur Adafruit.io
5. Acquisition et envois des données vers le serveur
6. Gestion de la consommation
7. Mise en boîte
V. Conclusion
VI. Annexe/code
Membres du projet :
Quentin ANGUELOV (GEII)
Mustafa HANCER (GEII)
I. Introduction générale :
Étudiants en deuxième année de DUT Génie électrique et informatique industrielle, nous devons réaliser au sein de notre université, un projet de fin d’études.
Ce projet consiste en la réalisation d’une station météo autonome permettant de connaître différentes mesures grâce à des capteurs puis les consulter rapidement et simplement sur internet.
Notre objectif pour ce projet est de concevoir une station pouvant être placée à l’extérieur au sein de l’IUT.
II. Cahier des charges et organisation du projet :
1) Analyse fonctionnelle :
2) Cahier des charges :
- La station météo devra intégrer les caractéristiques et les mesures du tableau ci-dessous.
- Les données seront envoyés par le protocole MQTT vers un site qui fera office d’interface. Dans notre cas nous le ferons sur Adafruit.io
- Les données doivent être consultables facilement et protégées pas un mot de passe et un identifiant.
- L’archivage devra être conservée sur le site pendant un mois.
Mesure de la température | -30 à +50 °C |
Mesure de la pression atmosphérique | 500 hPa à 1100 hPa |
Mesure de l’humidité de l’air | 0% à 100% |
Mesure de la luminosité | 0% à 100% |
Consultation des mesures | Dashboard Adafruit.io |
Archivages des mesures | 1 mois |
Autonomie énergétique | 1 année |
3) Les matériels et les outils utilisés :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4) Diagramme de Gantt :
5) Répartition des tâches :
Mustafa | Quentin |
Gestion du capteur d’humidité | Recherche de composants |
Gestion du capteur de pression | Gestion du capteur de luminosité |
Gestion du capteur de température | Interface Adafruit.io |
Calcul/test de l’autonomie | Création du boîtier |
IV. Le projet :
Description détaillée :
Le but de ce projet est de réaliser une station météo qui sera placée à l’extérieur, dans l’enceinte de l’IUT. Cette station sera fait à partir d’un module ESP8266 (explication dans la partie 2) et permettra d’acquérir différentes mesures météorologiques grâces à des capteurs qui l’intègre (température, humidité, luminosité, pression atmosphérique). La station sera connectée à internet par une connexion Wi-Fi et les mesures seront envoyées vers le site Adafruit.io par un protocole MQTT. L’interface nous indiquera les différentes mesures qui seront archivées pendant un mois. La station sera autonome grâce à l’alimentation du module par un panneau solaire et une batterie lithium.
Les différentes étapes de réalisation sont les suivantes :
- Compréhension du protocole MQTT.
- Compréhension et utilisation de l’environnement de programmation ARDUINO IDE avec la carte qui contient le module wifi ESP8266.
- Connexion au serveur/broker Adafruit.io via le module wifi ESP8266 (Arduino IDE).
- Acquisition des mesures des différents capteurs sur le module ESP8266 (sans connexion Wi-Fi).
- Envoie des mesures vers Adafruit.io via le module wifi de l’ESP8266.
- Gestion de l’interface Adafruit.io.
- Gestion de l’autonomie de la station météo.
- Mise en forme du boîtier et test en conditions réelles.
1) MQTT, c’est quoi ?
MQTT est un protocole de messagerie « publish-subscribe » basé sur le protocole TCP/IP. Ce protocole suit un modèle de communication de type publication/abonnement via un broker (dans notre cas le serveur Adafruit.io). Pour publier un message il faut créer un topic (par exemple « GEII/température ») dans notre serveur et paramétrer la liaison avec ce topic dans le code. Le message envoyé vers ce topic pourra être lu en s’abonnant à ce topic sur notre interface . Donc si on veut réceptionner des messages, on s’abonne à un topic et on attend que quelqu’un envoie un message sur le même serveur et dans ce même topic.
Pour notre projet nous utiliserons un serveur gratuit de test : Adafruit.io.
Si on souhaite un jour améliorer ce projet nous pourrons toujours réfléchir à la création de notre propre serveur MQTT.
-> Pour plus de détails sur ce type de protocole et voir quelques exemples, vous pouvez visionnez la vidéo suivante :
2)L’ESP8266, c’est quoi ?
L’ESP8266 est un module Wi-Fi qui peut être utilisée de deux manières :
- associé à un autre micro-controlleur (par exemple un Arduino), l’ESP8266 s’occupera juste de la partie « communication Wi-Fi ». L’Arduino va envoyer des commandes à l’ESP8266 (commandes comme « connecte-toi à tel réseau Wifi », « envoie tel message à tel serveur », etc.).
- L’ESP8266 peut aussi être utilisé de manière totalement autonome, en exécutant lui-même des applications que vous aurez programmées. L’ESP8266 ne va pas se contenter d’ajouter des fonctionnalités Wi-Fi à votre Arduino, il va exécuter lui-même le programme Arduino, tout en prenant en compte la partie Wi-Fi. On ne charge plus votre programme sur l’Arduino, mais directement sur l’ESP8266. Cependant le nombre de port GPIOs sont limités.
Dans notre cas l’ESP8266 est sur un kit Wemos D1, il est donc associé à un autre microcontrôleur qui permet la programmation sur Arduino IDE et la connexion à un ordinateur par un cable USB 2.0. Pareillement, si on souhaite améliorer la station nous pouvons réfléchir à l’utlisation de l’ESP8266 de manière autonome.
3) Utilisation de l’environnement Arduino IDE :
Pour la prise en main de l’environnement Arduino nous avons commencé par réaliser de simples codes comme allumer/éteindre une led. Ensuite, nous avons programmé la connexion Wi-Fi du module ESP8266 et essayé de nous connecter à un serveur MQTT (mosquitto.org puis Adafruit.io). Une fois connecté nous avons crée des topics sur Adafruit.io sur lesquels on envoi des messages. Finalement nous avons travaillé sur la réception et l’interfaçage des messages reçus sur Adafruit.io.
Pour nous entraîner nous avons donc d’abord réalisé le montage ci-dessous qui permet d’allumer et éteindre une LED via notre smartphone connecté sur un topic mosquitto.org qui est lui-même connecté avec le module ESP8266.
- Carte Wemos relié à une LED piloté depuis le smartphone :
Une fois l’environnement ARDUINO et MQTT maîtrisés, nous avons commencé la programmation de l’ESP8266 avec un capteur de température et d’humidité DHT11 et une photorésistance.
- Le DHT11 et la photorésistance reliés à l’ESP8266 :
4) Connexion Wi-Fi et serveur Adafruit.io :
Pour se connecter au réseau Wi-Fi avec l’ESP8266 sur l’environnement arduino, on définit d’abord le nom du réseau et le mot de passe de celui-ci. Ensuite, il nous suffit d’entrer la fonction suivante et de vérifier son état :
- WiFi.begin(SSID, PASSWORD); // lancement de la connexion
- while(WiFi.status() != Connected) ; //attente de connexion
Pour se connecter au serveur MQTT Adafruit.io, on télécharge le code d’initialisation sur Adafruit.com et on entre le nom du serveur, notre identifiant, mot de passe et pour finir nos topics. Le port par défaut est 1883.
Paramétrage :
Souscription en tant que Publisher :
Nous nous souscrivons aux topics tempGEII, humidityGEII, luxGEII, pressionGEII et altitudeGEII en tant que publieur. C’est-à-dire que notre module Wi-Fi publie les messages vers le serveur Adafruit.io et que pour lire les message sur le serveur, on doit souscrire en tant qu’abonnés sur chaques topics précédemment énoncés.
Maintenant que nous sommes connecté à Adafruit.io avec notre module Wi-Fi, nous allons nous occuper de la gestion des capteurs des envois des mesures vers le serveurs.
5) Acquisition et envois des mesures des capteurs vers Adafruit.io :
Pour la gestion des capteurs, nous n’avons pas fait l’étude approfondie de chaque composant, nous nous sommes servi de composants adaptés pour l’environnement Arduino. Nous avons donc pris un DHT11 pour la lecture de la température et de l’humidité et une simple photorésistance.
Pour la gestion du DHT11 et l’envoi des mesures vers Adafruit.io il faut :
- télécharger la libraire DHT.h
- appeler la fonction dht.readHumidity() pour lire l’humidité
- appeler la fonction dht.readTemperature() pour lire la température
- envoyer les résultats vers les topics sur le serveur : TempGEII.publish(temperature); et HumidityGEII.publish(humidity);
Pour la gestion de la photorésistance et l’envoi des mesures vers Adafruit.io il faut :
- brancher le capteur sur un port analogique
- faire une lecture de ce port avec la fonction analogRead(number of the pin);
- mettre le résultat en pourcentage avec un produit en croix.
- envoyer le résultat vers le topic lux sur Adafruit.io : luxGEII.publish(lux);
Evidemment il est possible d’ajouter d’autres capteurs. Faute de budget nous en resterons en cela pour le moment.
Interface Adafruit.io :
6) Gestion de la consommation :
Pour que la station météo soit autonome elle va être alimentée par une batterie lithium qui va se recharger à l’aide d’un panneau solaire. Le panneau solaire, la carte et la batterie vont être reliés à un module Lipo Rider qui va permettre d’envoyer le courant reçu du panneau solaire vers la batterie et d’alimenter la carte avec une tension stable de 5V.
Pour mettre en place le bon panneau et la bonne batterie il faut connaître la consommation de notre carte. Pour cela nous branchons un ampèremètre en série sur notre carte alimenté et nous relevons le courant de consommation. Ce dernier est de 48mA.
Nous avons choisi de prendre une batterie lithium de 2500mAh ce qui veut dire que notre station peut tenir au maximum 52 heures sans être rechargé, ce qui suffit amplement pour tenir toute la nuit quand le panneau n’apportera aucun courant à la batterie.
Nous avons choisi de prendre un panneau solaire 3.5W et 6Volts car il est adapté à notre module Lipo Rider et c’est un produit à très bon rapport qualité prix. Il nous fournit au maximum courant de 580 mA ce qui est largement suffisant pour recharger notre batterie, même pendants une journée nuageuse.
Une fois le panneau reçu nous avons crée un support en bois pour celui-ci à l’IUT LAB avec l’aide de Monsieur Sabbata.
Support et panneau solaire :
7) Mise en boîte :
Le boîtier nous a été donné par notre entreprise (et nous les remercions). Nous l’avons modifié et ajouté une ouverture vitrée sur le dessus pour que la lumière puisse pénétrer et d’autres petites ouvertures pour que l’air puisse circuler à l’intérieur.
Les amélioration à apporter :
Le choix de ce boîtier n’est pas le meilleur car il est noir est donc absorbe la chaleur. De plus, lorsque que les températures augmentes et que le soleil est présent, comme le boîtier est vitré, les rayons du soleils entrent à l’intérieur… Il faudrait donc changer de boîtier et opter pour un boîtier blanc et une séparation alimentation/capteurs.
Le couvercle du boîtier :
Comme on peut le voir 4 visses on été ajoutés pour fixer fortement la vitre sur le couvercle et de la colle a été répandue tout autour pour ne pas laisser passer l’eau durant de fortes pluies.
Le boîtier final :
Une sortie isolée à été ajouté avec une prise USB mâle qui va venir sur brancher sur le panneau solaire.
Le meilleur endroit pour ce boîtier, à l’état actuel, serait de le placer à l’ombre (mais toujours à la lumière) tout en réussissant à placer le panneau solaire au soleil. Effectivement lors de journées ensoleillées les données sont faussées par la chaleur présente dans le boîtier.
V. Conclusion :
Le plus difficile a été la mise en place du protocole MQTT pour la liaison avec le publisher (ESP8266) et le subscriber (Dashboard Adafruit.io). Mais après plusieurs essais nous sommes parvenus a l’utiliser et une fois compris il a été assez facile de continuer avec ce protocole.
Si nous pouvions refaire ce projet, nous changerions le boîtier et sortirions le capteur de température puisque durant une journée bien ensoleillée, la température est faussée par la chaleur présente à l’intérieur de la boite. Ensuite, nous ajouterions d’autres capteurs comme la un pluviomètre et un anémomètre. Pour finir pour pourrions supprimer la carte Wemos D1 et n’utiliser que le module ESP8266 pour le rendre autonome et miniaturiser la station.
Nous tenons à remercier les professeurs qui étaient présents pour nous aider lorsque nous rencontrions des difficultés mais aussi l’IUT de nous avoir mis à disposition l’IUT LAB.