Publié le 22 mars 2019 - par

Station météo simple à base d’Arduino et de Raspberry Pi

On a tous sur un meuble, une petite station météo qui nous donne la température de la pièce, mais également l’hydrométrie et la pression atmosphérique. Nous allons voir comment réaliser une petite station météo, simple, mais un peu plus élaborée que celle posée dans la cuisine !

Le matériel

Le choix

Différentes solutions s’offre à nous, un Raspberry Pi avec des capteurs sur le GPIO. Après avoir testé quelques capteurs, on est toujours un peu embêté avec les capteurs qui délivrent une tension variable en fonction de la valeur mesurée. Il faut utiliser un Convertisseur Analogique Numérique (CAN). De plus si l’on souhaite ajouter d’autres stations météo dans la maison, bien que d’un prix raisonnable, un Raspberry Pi par station, ce n’est pas bon marché.

Pour récolter les données, je fais appel à son petit cousin, l’Arduino Nano. Petit et pas cher. Il sera complété par un module WiFi qui sera chargé d’envoyer les données au Raspberry Pi dont le rôle sera de stocker les données puis de les restituer par une interface web. Son avantage est son prix encore plus petit, sa capacité à lire une valeur analogique, et tout comme le Raspberry Pi, il peut communiquer en I2C et en Série. Cependant, sa capacité mémoire et sa puissance sont limitées.

Coté Serveur

Un Raspberry Pi avec Apache, PHP,  mySQL (ou mariaDB) et phpmyadmin installés. Pour cela, je vous invite a consulter les articles correspondant.

Si vous avez déjà un Raspberry Pi comme serveur web, il est probablement déjà prêt techniquement.

Coté Station Météo

  • Un Arduino nano (env. 3€ *)
  • une carte d’extension de broches pour Arduino nano (env. 2€)
  • des câbles Dupont Femelle-Femelle de la longueur de votre choix (moi je prend des 10cm) (env. 2€)
  • un capteur BME280 (norme I2C, relevé température, Hydrométrie, Pression atmosphérique) (env. 4€)
  • Un module wifi ESP8266 ESP-01 et son support (env. 3€)
  • Une alimentation 9V pour carte d’extension (env. 3€)

(*: prix indicatif sur Aliexpress)

Le capteur capteur BME280 est un capteur à la norme du bus I2C. Cela permet à l’Arduino de pouvoir lire directement les valeurs  de Température, Hydrométrie et pression atmosphérique. Utiliser un capteur différent pour chaque paramètre est beaucoup plus contraignant. Remarque : il est possible que le capteur soit livré avec le connecteur non soudé

Remarque sur le module WiFi, certains tutos expliquent comment l’utiliser sans son support, mais le module WiFi utilise une tension inférieure à celle de l’Arduino, il faut ajouter des résistances pour abaisser la tension. Investir dans le support dédié simplifie la connectique et évite bien des problèmes.

Principe

Arduino aura comme mission de lire les données du capteur, à intervalles réguliers et de transférer les valeurs au serveur principal, le Raspberry Pi.

Le Raspberry Pi recevra les données et les stockera dans une base de données. Il restituera ensuite les informations à la demande à travers une interface web.

 

Assemblage de la station

Si vous avez tous les éléments, commencez par installer lAarduino nano sur le support, attention au sens, la connectique mini USB, du coté de l’alimentation 9V du support.

Ensuite montez le module WiFi sur son support, le support à un petit dessin de l’antenne pour ne pas se tromper de sens.

Prenez les câbles Dupont, généralement vendus en nappe, découpez les en lots de 4. Quand je dis découper, pas de ciseaux, il suffit d’écarter en tirant.

Branchement du module WiFi et du capteur

coté support carte WiFi  <-> coté arduino

  • GND <-> sur le rail noir de la patte 9 (c’est la masse, si c’est sur une autre patte, cela n’a pas d’importance, tant que c’est une noire)
  • VCC <-> sur le rail rouge de la patte 10 ( c’est le+5V,  si c’est sur une autre patte, cela n’a pas d’importance, tant que c’est une rouge)
  • TX <-> sur le rail bleu de la patte 8 (ici pas le choix)
  • RX <-> sur le rail bleu de la patte 9 (ici pas le choix)

Capteur BME280  <-> coté Arduino

  • vous avez un rail blanc, avec 4 pins (SLC, SDA, 5V et GND)
  • Il suffit de relier le pin du capteur correspondant à celui du support de l’Arduino.

Le code

Pour l’Arduino, il faut installer Arduino IDE, que vous trouverez ici : https://www.arduino.cc/en/Main/Software

Des bibliothèques sont nécessaires, il faut donc décompresser le fichier suivant dans …\Documents\Arduino\libraries de votre profil Windows, si l’IDE arduino est installé,le répertoire doit exister. 

librairies.zip

Programme à mettre dans l’IDE arduino et a transférer sur l’arduino. Pour cela il faut relier l’arduino au port USB (attention, ne pas mettre en même temps l’alimentation 9V du support et l’alimentation USB )

Complétez le partie WiFi avec votre SSID WiFi et votre mot de passe.

Pour le serveur web cible qui stockera les donnée indiquez l’adresse IP de votre serveur web ici : String host = « 192.168.1.XX »;

Et le chemin sur le serveur ici : String request = « GET /meteo/receive.php« 

 

La base de données

Sur ma version j’ai d’autres capteurs qui sont utilisés, et cela fera peut être l’objet d’un autre article. on va donc créer la totalité des champs par facilité. Vous pouvez aussi personnaliser, mais il faudra modifier le code des pages PHP en conséquence.

Sur mon serveur, j’ai créer un répertoire « meteo » mais vous pouvez changer de nom.

Voici les fichiers à mettre à l’intérieure :  meteo.zip

Configurer le fichier data/config.inc

Il permet de configurer les stations.

  • Le premier paramètre correspond a l’id de la station, il doit être identique à celui de la variable $cfg_station[1]
  • Le second paramètre est le nom de la station

Configurer le fichier data/mysql_connect.php pour la connexion à la base de données

Dans l’ordre, serveur, utilisateur, code, nom de la base

 

Si tout c’est bien passé cela devrait fonctionner.

Dans un premier temps vous pouvez faire vos tests avec le câble USB relié à l’Arduino pour l’alimenter. Ensuite débranchez l’USB et branchez l’alimentation 9V au support de l’Arduino pour mettre l’Arduino (la station météo) ou bon vous semble.

Interface de visualisation des données

Rien d’extraordinaire, l’interface est minimaliste, j’ai juste essayé que cela soit lisible sur téléphone.

Le menu propose 3 choix :

  • Courbe pour consulter l’historique sur plusieurs jours
  • Visualiser les données en direct
  • Visualiser les données en direct avec quelques infos complémentaires

 

Affichage des courbes

Le graphique affiche les 3 courbes, mais vous pouvez utiliser les boutons du haut pour isoler celle souhaitée.

En bas vous pouvez choisir la durée de l’historique, pour une longue durée il y a beaucoup de points, ce qui n’est pas forcément utile, vous pouvez donc choisir d’afficher qu’un point sur X pour accélérer l’affichage.

Courbe de température : 

Courbe d’hydrométrie

Courbe de pression atmosphérique

 

Affichage des données

L’affichage indique la date et l’heure du dernier relevé de valeurs puis les valeurs.

A noter qu’avec les trois valeurs relevées, il est possible de calculer le point de rosée et la Température Humidex. Pour le détail de ces infos reportez-vous aux liens suivant :

A noter que la tendance s’affiche sous les valeurs par des flèches vertes.

 

Affichage d’informations complémentaires

PHP, propose de calculer des informations utiles pour compléter notre station. Disposant d’un drone et sachant qu’il est interdit de voler de nuit aéronautique, j’affiche les informations afin de savoir quand je peux faire voler mon drone. J’affiche l’heure de lever et du coucher du soleil calculées en fonction de coordonnées GPS. Il faut ensuite décaler de 30 minutes les heures afin d’avoir la nuit aéronautique.

 

Conclusion

Voilà votre station météo opérationnelle, vous pouvez vous amuser à ajouter des capteurs sur l’Arduino pour transmettre d’autres données. Vous pouvez également améliorer l’interface graphique pour visualiser les données selon vos besoins.

En allant un peu plus loin, vous pouvez ajouter d’autres stations météo.

 

 

 

Share Button

19 réflexions au sujet de « Station météo simple à base d’Arduino et de Raspberry Pi »

  1. Clemzo

    Bonjour,

    Je suis surpris de voir régulièrement des montages combinant Arduino ET ESP8266. A moins qu’il y ai des besoins particuliers (nombre d’E/S), il faut savoir que l’ESP est quand même bien plus performant que l’Arduino.
    Dans le cas présent, si l’on fait le chois d’un ESP8266-12 (+ E/S, + de RAM, + rapide), il sera capable de gérer :
    – Les mêmes type de capteurs en nombres suffisant pour une station météo.
    – Un mode « Deep Sleep » pour économiser la batterie.
    – Ecritue (et lecture) directement dans la BD sans la routine PHP.
    De plus cela fera un montage plus économique, plus compact et cerise sur le gâteau : il se programme avec le même éditeur (IDE arduino).

    Bref, j’engage vraiment tous makers à se pencher sur ce petit bijou qu’est l’ESP8266.

    Répondre
    1. Fram

      Bonjour Clemzo
      Oui et non. Pour avoir joué avec un esp8266-12F, je connais un peu les limites des ESP.
      Exemples: alimentation limitée à 3,3V sauf à le poser sur une carte adaptatrice (genre wemos) et une seule broche CAN limité à 1V.
      D’accord, après ces limites connues, la puissance et l’espace mémoire, c’est confort.
      Fram

      Répondre
      1. Clemzo

        Bonjour Fram,
        Sans entrer dans une polémique du genre « Ma solution est meilleure », le problème de l’alimentation n’en n’est pas vraiment une, surtout si l’on utilise un NodeMCU (alimentation en 5V aussi), maintenant si l’on a besoin de plus d’entrées analogiques alors l’esp32 devient plus que confortable pour élaborer ce type de montages.

        Répondre
        1. Fram

          Clemzo, c’est juste !

          Autant la série ESP8266 à quelques limites, autant l’ESP32 est top pour un prix ridicule.
          De plus, il ajoute au WiFi le Bluetooth et un gros paquets de choses en plus.

          Ceci dit, je ne suis pas pour le « conflit » « ma solution est la meilleure » mais d’avoir l’environnement le plus adapté au projet envisagé. Et quand je parle d’environnement, cela vise le matériel mais aussi la connaissance, les solutions prouvées et la communauté, dans la langue qui va bien, qui tourne autour. Et côté Arduino, ben c’est solide. Et les projets alliant Arduino et ESP8266, il y en a quelques uns…

          Je suis d’accord avec toi et si j’ai 3 ESP8266-12F sur NodeMCU chez moi, c’est bien pour éviter le couplage de deux MCU (Atmel+ESP) là où un seul peut faire largement le boulot. Mais côté communauté, c’est plus restreint.

          Fram

          Répondre
  2. Fram

    Bonjour !
    Bravo pour ce très inteéessant tutoriel qui montre bien l’intérêt de ces petites bêtes (arduino, esp et raspberry).
    Bon. J’vous laisse, j’ai un ATtiny85 à dompter et il est retord…
    Fram

    Répondre
  3. Marc

    Bonjour,

    Merci pour cette description de projet.

    Je me pose une question sur l’autonomie de la partie alimenté avec la pile 9V.
    As tu un retour d’expérience ?

    Répondre
  4. Berger

    Merci, votre projet complète bien mon projet publié sur ouiaremakers !
    La connection du ESP est capricieuse, selon le point d’accès, avec mon module du moins. C’est pas fini 🙂

    Répondre
  5. Micg77

    Bonjour,
    J’ai également ce type d’installation chez moi. La difficulté est effectivement la gestion des piles. De mon coté, j’ai opté pour une communication en RF 433Mhz.
    Après avoir usé une pile 9V en 3 jours, j’ai épluché le document ci après et me suis résolu a utiliser ATmg328P tout seul. (https://www.robot-maker.com/forum/blog/45/entry-41-tout-ce-que-vous-pourriez-vous-demander-sur-la-consommation-dune-puce-atmega328p-puce-darduino/).

    Coté récepteur RF, c’est un arduino qui récupère tout, et l’envoie via le port série au Raspberry.
    Coté raspberry, j’utilise weewx pour archiver les données, qui a le mérite de disposer d’une communauté importante utilisant le raspberry.

    On trouve pas mal de monde a procéder ainsi,
    J’espère que ca pourra vous aider dans votre projet…

    Bon courage

    Répondre
  6. tutur19

    Jolie présentation pour ceux qu’ils veulent s’initier ! Par contre effectivement attention pour l’autonomie, c’est pas l’idéal de cette manière.
    L’utilisation sur batterie est tout à fait possible mais il y a beaucoup de chose à changer en fait.
    – Supprimer le régulateur de tension qui est énergivore et passer sur 2 pile AA par exemple (3V alimentation en direct , plus de perte)
    – Supprimer la led de fonctionnement qui est un bouff pile
    – Passer l’arduino en mode veille afin qu’il ne se réveille que toutes les X min pour économiser sa batterie (possible grâce à des bibliothèques d’Arduino).
    @framboise314 , jetez un coup d’oeil sur le projet MySensors c’est des solutions DIY avec pleins d’exemple 🙂

    Répondre
  7. domos

    Sinon, en moins cher, il y a les Wemos , c’est aussi des ESP programmables directement avec l’IDE Arduino pour remplacer Nano + esp-01

    Répondre
  8. Ping : Station météo simple avec Arduino et Raspberry Pi – Radioamateurs France

  9. Rousber

    Bonjour, Christophe, et merci pour votre description de cette mini station météo.
    Je « bidouille « également Arduino Météo, avec un BMP280, entre-autre, qui est très pratique.
    Je souhaitais une précision, sur la partie « heure du lever/coucher du soleil ».
    Vous utilisez quoi comme capteur, et ensuite, ou avez-vous trouvé la formule, qui va bien, concernant le calcul de ces heures en fonction de ses coordonnées géographiques.
    Avec mes remerciements,
    Cordialement,
    Bernard

    Répondre
      1. Rousber

        Re bonjour,
        Merci beaucoup pour votre réponse, donc, vous n’utilisez pas un capteur de luminosité.
        Bonne journée, également,
        Bernard

        Répondre
        1. Christophe CILLIER Auteur de l’article

          Ca dépend ce que l’on souhaite. pour ma part j’ai besoin de l’heure officiel. Utiliser un capteur n’est pas possible car en fonction de la météo la luminosité change énormément, sans compter une belle nuit de pleine lune qui peut aussi jouer.
          Pour un projet genre allumer des spots de nuit en éclairage complémentaire c’est faisable car c’est un niveau de luminosité qui est le seuil. Pour la luminosité j’ai essayer des photorésistances mais c’est une valeur plutôt indicative . (mais pour détecter un seuil ça fait le job)
          https://fr.aliexpress.com/item/5Pcs-Photosensitive-brightness-resistance-sensor-module-Light-intensity-detect-DropShipping/1885961765.html?spm=a2g0s.9042311.0.0.8c906c37VdNWfZ

          Mais j’ai aussi un capteur de lumière qui retourne des LUX, ce qui est plus propre comme valeur avec un GY-2561 TSL2561

          https://fr.aliexpress.com/item/1pcs-lot-GY-2561-TSL2561-Luminosity-Sensor-Breakout-infrared-Light-Sensor-module-integrating-sensor-AL/32498850254.html?spm=a2g0s.9042311.0.0.27426c37KojcxJ

          Répondre
          1. Rousber

            Comme les grands esprits se rencontrent. J’utilise également de capteur (2561), ce qui est très pratique, avec le BMP280, tous les deux en I2C.
            Votre idée d’utiliser la fonction php me parait effectivement, plus judicieuse pour connaitre les heures de lever/coucher du soleil, le capteur ne servant que de mesure….
            Vous parlez dans vos texte du serveur sur le Raspberry Pi, mais je n’ai pas trouvé le lien pour visualiser….
            Bien cordialement, et au plaisir,
            Bernard
            Comme les grands esprits se rencontrent. J’utilise également de capteur (2561), ce qui est très pratique, avec le BMP280, tous les deux en I2C.
            Votre idée d’utiliser la fonction php me parait effectivement, plus judicieuse pour connaitre les heures de lever/coucher du soleil, le capteur ne servant que de mesure….
            Vous parlez dans vos texte du serveur sur le Raspberry Pi, mais je n’ai pas trouvé le lien pour visualiser….
            Bien cordialement, et au plaisir,
            Bernard

            Répondre
  10. math

    Bonjour,
    Quel système utilisez-vous pour afficher les graphs ?

    Avez vous une latence à l’affichage correcte ?

    Merci pour votre aide,

    Cdt,

    Répondre
    1. Rousber

      Bonjour,
      Pour l’instant, je ne génère pas de graphiques, je recherche des solutions.
      J’en suis juste à écrire dans une base de données SQL…
      Mes connaissances en php sont un peu limitées, mais je m’accroche….
      Je suis un jeune retraité, et j’ai bricolé dans le domaine de l’électronique depuis ma plus jeune enfance. Ensuite, je suis passé à la « petite » programmation en Delphi.
      Et il était évident, en tant que passionné de l’électronique, à un moment, je passe aux micro-controleurs, mais le pas à franchir n’est pas si simple que cela n’y parait, pour « l’ancienne génération ».
      Mais, j’avance à petits pas
      Voilà, Christophe, toute l’histoire.
      Vous êtes de quelle région. Je suis du département de l’Aisne.
      Bonne journée à vous, et bon week-end,
      Cordialement,
      Bernard

      Répondre
      1. Christophe CILLIER Auteur de l’article

        Bonjour Bernard,

        Pour les graphs j’utilise C3 en javascript https://c3js.org/

        Le script appel les données en JSON (un standard particulier) qui est généré grace a php et va récupérer les données dans la base de données.

        Je suis en Bretagne

        Christophe

        Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.