Station Météo V3

MAJ Du 30/11/2015 : Mon script Python plante. J’utilise pour le moment un Particle Photon pour streamer les données du BMP085 en attendant du matériel pour Raspberry Pi…

Bonjour à tous, comment allez-vous?
Aujourd’hui, je vais vous montrer la dernière version de ma station météo que j’ai bricolée durant les vacances… Effectivement, cela faisait trop longtemps que je ne l’avais pas modifiée, je n’ai pas pu résister… Mais il était temps de passer à la vitesse supérieure : combiner deux montages utiles et centraliser les données quelque part…

En effet si vous suivez depuis un moment le blog, vous avez dût lire ces articles sur ma station météo :

  • Station Météo V1 : mon tout premier modèle fonctionnel, mais pas très beau.
  • Station Météo V2 : véritable station météo, elle souffre toutefois de problèmes de conception cachée.

Parallèlement, vous savez que j’aime aussi bien le Raspberry Pi et vous avez aussi sûrement lu les articles suivants :

Comme j’avais déjà des problèmes à résoudre sur la station V2 :

  • Créer un flux d’air, car certaines mesures étaient assez folles. La station étant en plein soleil sur les coups des 18h j’ai vu passer des 60°C et plus cet été…
  • Revoir le système d’alimentation
  • Simplifier un peu le code

Il m’est alors venu une idée un peu folle pourquoi ne pas mettre le Raspberry réalisant la caméra de surveillance et la télécommande IR de ma cuisine sur le balcon dans la station météo? Il serait alors facile d’envoyer les données sur un site pour avoir de beaux graphiques, je pourrai alors piloter les LED du balcon au lieu de celles de la cuisine et je ne verrai plus la porte du balcon de l’intérieur, mais de l’extérieur… Allez banco, on est parti dans l’aventure!!!

Modifications physiques :

J’ai tout d’abord enlevé certains capteurs de la Version 2 car je n’étais vraiment pas convaincu des valeurs qu’il renvoyaient et les exemples de code de SeeedStudio étaient assez bancals… J’ai donc éliminé :

  • Grove Loudness Sensor
  • Grove DHT 21 (la pression atmosphérique m’intéresse plus)
  • Grove Gaz sensor MQ9
  • Grove UV sensor
  • Grove 4 digits display
  • Grove Dust sensor
  • Grove OLED Display 128×68

Et hop, en simplifiant la station j’ai aussi relu et simplifier le code et la station consommera moins de courant… Ce qui nous laisse sur l’Arduino Mega :

  • Grove Chainable LED
  • Grove RTC
  • Écran LCD 20×4
  • Grove BMP085
  • Grove LED Strip Driver
  • Grove Air Quality sensor

J’ai donc eu besoin des librairies externes suivantes pour mon code Arduino :

Les LED en cascades affichent toujours la température sous forme de code couleur. Le LED Strip Driver indique la qualité de l’air renvoyé par l’Air Quality sensor. Le LCD affiche la date, l’heure, la température et la pression atmosphérique.

Sur le côté gauche, j’ai monté un ventilateur en extraction alimenté en 12V que l’on peut arrêter avec un interrupteur juste à côté.

station_V3_ventilo

Le côté droit a été percé de trous pour la ventilation afin de faciliter le flux d’air et renouveler plus facilement l’air dans le boîtier.

station_V3_trous

Sur la face arrière, j’ai remplacé le vieux convertisseur 12V DC / 5V DC par un convertisseur de chez SeeedStudio pouvant supporter 3A : Adjustable Step Down DC/DC Converter 8V-18V 3A

J’ai ensuite installé le Raspberry Pi avec la PiCam ainsi que le Grove IR Emitter directement dans le boitier. Effectivement la transparence du PMMA, son indice de réfraction suffisamment bas permettent à la vidéo de ne pas être trop déformée et au signal IR de le traverser sans être altéré pour piloter les LED. En un mot comme en cent : Parfait!!!

Par contre au niveau des fixations du Raspberry Pi et de ses composants dans le boitier, je reconnais ne pas vraiment trouver de solution miracle. Entre la longueur des câbles, la place limitée et la difficulté pour prendre des repères afin de refaire des trous, j’ai préféré tout fixer avec de la PATAFIX!!!

[quote]La Patafix est au maker ce que le scotch est à l’ingénieur : la première solution à un problème de fixation… 🙈😱👻[/quote]

Dernière chose, j’ai mis un câble USB entre le Raspberry et l’Arduino. Pourquoi un câble USB alors que les deux sont alimentés par le régulateur de SeeedStudio me direz vous? C’est assez simple, même s’il existe plusieurs façons de faire communiquer Arduino et Raspberry Pi ensemble, j’ai préféré jouer la sécurité et recycler un vieux câble USB.

Mais j’aurai pût faire du serial avec des câbles de prototypage ou bien passer par de l’I2C mais je ne l’aie pas fait principalement, car le niveau TTL de l’Arduino est de 5V alors que le TTL du Pi est en 3V à la moindre erreur le Pi aurait senti le brûlé… 😰

Encore une fois j’ai vraiment fait avec les moyens du bord… Mais je suis sûr qu’il est possible de faire la même chose avec :

Comme il n’est pas forcément évident de visualiser le tout, j’ai fait un « petit » schéma :

Code :

Comme pas mal de fonctionnalités ont déjà leurs tutoriaux (dans les liens en début d’articles) je ne vais pas revenir dessus… Je ne traiterai ici que l’envoi des données de l’Arduino au Raspberry Pi et du Pi au serveur.

Avant toutes choses il va falloir créer un compte Thingspeak (Gratuit) sur le site : https://thingspeak.com/

Comme l’interface est simple à prendre en main, je vous laisse la découvrir. Il vous faut créer un channel et récupérer la clé API de celle-ci. Vous pouvez également choisir à cet endroit si vous voulez que votre channel soit public ou non… Comme on est dans la configuration, choisissez le nombre de champs que vous voulez utiliser, dans mon exemple j’en utilise 5 :

  • Pression atmosphérique
  • Température extérieure
  • Température CPU
  • RAM disponible
  • Utilisation CPU

Une fois cela fait, vous trouverez dans le repo Git trois dossiers :

  • Arduino : librairies nécessaires et le code tournant sur le Mega.
  • Raspberry Pi : 2 scripts python pour envoyer des données sur Thingspeak.
  • Schéma : le plan précédent.

Repo Git : https://github.com/Anderson69s/Station_Meteo_V3

Exécuter en premier ces commandes sur votre Pi afin d’être sûr que tout le nécessaire pour python est bien installé :

sudo apt-get install python-dev
sudo apt-get install python-setuptools
sudo easy_install -U distribute
sudo apt-get install python-pip
sudo pip install rpi.gpio

Il va falloir installer deux librairies Python pour utiliser les scripts:

sudo apt-get install python-psutil
sudo apt-get install python-serial

ou bien :

sudo pip install psutil
sudo pip install pyserial

La première sert à récupérer des informations du système et la seconde permet à python de lire un bus série. J’ai réalisé deux scripts afin de faciliter la conpréhension :

  • thingspeak_serial.py : est aussi une adaptation du repo github précédemment cité, mais il lit une ligne du serial donc les résultats envoyés par le Mega, coupe le résultat avec la fonction split et envoie les données sur thingspeak.

Il y a quand même quelque chose que je dois vous confier… Vous gagnerez ainsi un temps précieux… Nonnnnn je n’ai pas perdu quelques heures inutilement… 😇Quand vous utilisez une librairie Python tierce : TOUJOURS, TOUJOURS, LIRE LA DOCUMENTATION DANS SON INTÉGRALITÉ!!!!!

‼️Car pour la librairie pyserial, vous ne pouvez pas utiliser Serial.println de l’Arduino IDE pour signifier une fin de ligne. Vous devez dire à l’Arduino d’afficher les caractères : \n . Sinon la librairie python ne pourra pas utiliser sa fonction readline() comme il faut…‼️

Ensuite, je vous conseille de créer un dossier thingspeak dans home/pi/ pour mettre les deux scripts dedans :

mkdir thingspeak

Placez-vous dedans :

cd thingspeak/

Et récupérez les scripts :

wget https://github.com/Anderson69s/Station_Meteo_V3/blob/master/Raspberry/thingspeak_cpu_loop.py
wget https://github.com/Anderson69s/Station_Meteo_V3/blob/master/Raspberry/thingspeak_serial.py

Il faut ajouter votre clé API dans chaque fichier et vérifier que l’Arduino branché en USB est bien sur le même port que moi (/dev/ttyACM0) :

sudo nano thingspeak_cpu_loop.py
sudo nano thingspeak_serial.py

Remplacez YOUR_KEY_HERE par votre clé API Thingspeak dans les deux scripts.

Sauvegardez vos modifications et rendez les deux fichiers exécutables :

sudo chmod +x thingspeak_cpu_loop.py
sudo chmod +x thingspeak_serial.py

Il faut ensuite lancer les scripts Python au démarrage :

sudo crontab -e

On ajoute à la fin :

@reboot sudo python /home/pi/thingspeak/thingspeak_cpu_loop.py &
@reboot sudo python /home/pi/thingspeak/thingspeak_serial.py &

On sauvegarde et on reboot :

sudo reboot

Et là miracle les données commencent à arriver : https://thingspeak.com/channels/50560

Mais il est aussi possible d’intégrer les graphiques ailleurs que sur le site de Thingspeak :

http://anderson69s.com/raspberry-meteo/

Voilà à vous de vous amuser…

PS : Faites-moi signe sur Twitter si les données n’arrivent plus…

@Bientôt Anders

Laisser un commentaire

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

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

Traduction :