jeudi 4 juillet 2013

TUTORIEL RAPSBERRY PI mesures météo


Raspberry PI est une carte électronique comprenant un processeur ARM cadencé à 700 MHz et disposant de 512 Mo de mémoire dans sa version B. Il est destiné à être piloté par un système Linux.
Plusieurs distributions Linux ont été créées pour le Raspberry PI ; dans mon cas j'utilise la distribution Raspbian qui est une version Debian optimisée pour ce matériel. Cette distribution Linux est installée sur une carte SD de 8 Go.
Raspbian est évidemment gratuit et sous licence GPL et est téléchargeable ici ou tapez raspbian dans google.

Le Raspberry dispose de :
  • Un port Ethernet
  • Deux ports USB
  • Un jack sortie son
  • Un port HDMI
  • D'une sortie vidéo composite
  • De plusieurs ports GPIO (interface numérique entrée / sortie)


Dans cet article nous allons voir comment exploiter les capacités du Raspberry PI pour en faire une station de mesure de température, d'humidité et de pression.
Les sondes permettant la mesure de température et humidité intérieures et extérieures sont des DHT22 (environ 11€)
La sonde permettant la mesure de pression est une BMP085 (environ 11 €)


L'abri de la sonde DHT22 extérieure est confectionné avec des coupelles de pot de fleur pour un coût total de 14 €. Il donne les mesures de la température et humidité sous abri, de la même manière que les mesures données par météo France. Les photos de la construction sont données en bas de cette page.




La sonde DHT22 intérieure :


Etape 1
Câblage de la sonde DHT22 intérieure sur le port GPIO 4 :
(La sonde DHT22 extérieure sera câblée sur le port GPIO 17, seul le fil vert change de position)




Etape 2
Câblage de la sonde BMP085 sur les ports GPIO 2 et 3 :


2--Installation du protocole I2C, protocole de communication de la sonde BMP085.
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Vérifiez que le protocole n'est pas blacklisté :
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Dans nano, l'éditeur de texte, utilisez les commandes suivantes :
   CTRL O pour écrire vos modifications, puis faites "ENTER"
   CTRL X pour sortir de nano

Il doit y avoir le signe # devant ces deux lignes ci-dessous, sinon ajoutez-les et enregistrez.
blacklist spi-bcm2708
blacklist i2c-bcm2708
Vous devez donc avoir cela dans le fichier raspi-blacklist.conf :
3--Tapez dans une console du Raspberry PI :
sudo nano /etc/modules (édition du fichier modules)

Vérifiez la présence des lignes suivantes dans ce fichier, sinon ajoutez les à la fin :
i2c-bcm2708 
i2c-dev

Votre fichier /etc/modules doit ressembler à cela :

Maintenant rebootez le Raspberry PI :
sudo reboot (attendez le re-démarrage complet)


4--Visualisation de l'adresse I2C de la sonde BMP085 :
sudo i2cdetect -y 1
Le système répond, donc tout est OK : (adresse 77)
5--Tapez dans une console du Raspberry PI :
cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085 (aller dans le répertoire...)
sudo python Adafruit_BMP085_example.py (test de la sonde)
La sonde répond :



Notez que la sonde BMP085 donne une pression absolue. Dans les systèmes météo cette pression est corrigée pour donner la valeur correspondante à la valeur au niveau de la mer. Il faut donc corriger cette pression mesurée en y ajoutant 8,3 hPa (hecto Pascal) par mettre d'altitude.
Je me trouve à 180 m au dessus du niveau de la mer.
180 / 8,3 = 21,6
Dans le test de la sonde la valeur mesurée est de 1001,64 hPa
La pression rendue au niveau de la mer est de : 1001,64 + 21,6 = 1023,24 hPa (pression haute !)
Météo France donne toujours la pression ramenée au niveau de la mer.




Etape 3
Installation des paquets logiciels nécessaires à l'exploitation de la sonde DHT22 :
Dans la console du Raspberry tapez les lignes vertes :
sudo apt-get clean (nettoyage des informations des paquets logiciels)
sudo apt-get update (mise à jour de la liste des paquets)
sudo apt-get upgrade (mise à jour de la distribution Raspbian)
sudo reboot (reboot système)
sudo apt-get install python-dev (installation paquets de développement python)
sudo apt-get install python-rpi.gpio (installation bibliothèque GPIO)
sudo apt-get install git-core build-essential (pas indispensable dans ce cas mais dans d'autres cas c'est utile et conseillé)
sudo apt-get install python-matplotlib (bibliothèque traçage de graphique)
wget https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/archive/master.zip
unzip master.zip (décompression)

cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/ (aller dans répertoire ...)

Test de lecture de la sonde :
sudo ./Adafruit_DHT 22 4 (pour DHT22 connectée en GPIO 4)

Le système répond :
Il arrive de temps en temps que la sonde ne réponde pas correctement. Les températures et humidités ne sont pas affichées. Il faut relancer l'interrogation. Le script python de Thierry JOUVE que nous allons voire plus bas tient compte de ce désagrément et relance automatiquement la mesure en cas de non réponse de la sonde.

Etape 4
Si vous obtenez une erreur de ce style :
sudo: unable to execute ./Adafruit_DHT: No such file or directory

Alors tapez les lignes suivantes : (sinon passez cette étape)
wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.8.tar.gz
tar -zxvf bcm2835-1.8.tar.gz
cd bcm2835-1.8
./configure
make
sudo make install

Refaites le test pour obtenir une réponse de la sonde :
cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/
sudo ./Adafruit_DHT 22 4 (pour DHT22 connectée en GPIO 4)


Etape 5
Rendons les mesures automatiques et créons le graphe par un script python.

  • Dans le répertoire /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/ vous devez copier les fichiers suivants.
  • Aller dans le répertoire : cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver/
  • Rendez-le executable par sudo chmod u+x raspmeteo.py
  • Installation de pygal par sudo apt-get install pygal
          sudo apt-get install python-pip
          sudo apt-get install libxml2-dev libxslt1-dev gcc
          sudo apt-get install python2.7-dev
          sudo pip install pygal
          sudo apt-get install python3-lxml
  • Installation de SQLlite par sudo apt-get install sqlite3
  • Création de la table QSLlite par sudo sqlite3 raspmeteo.db puis à l'invite entrez cette ligne : 
CREATE TABLE measures(sensor INTEGER, date DATETIME DEFAULT CURRENT_TIMESTAMP, measure REAL);


  • Allez dans le répertoire : cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085 puis copier tous les fichiers qui s'y trouvent dans le répertoire /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver

  • Revenez dans le répertoire cd /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver

  • Allez dans le répertoire de votre page internet sur votre serveur web du raspberry : 
          cd /media/www-dev/public/charts   (dans mon cas,   mettez votre chemin à vous)

         
  • Lancer le script des mesures météo après avoir rebooté le raspberry : sudo raspmeteo.py &


Dans un navigateur, tapez l'adresse de votre site internet et vous obtiendrez le graphe des mesures en pleine page internet.



Mon ami Thierry JOUVE à créé le script python qui permet l'acquisition des mesures ainsi que la constitution automatique du graphe.

Pour créer un site internet sur le Raspberry ou sur un Pc Linux basé sur une distribution debian c'est ICI.


Le développeur du script python raspmeteo.py : Thierry JOUVE
---------------------------------------------------------------------
  • Pour afficher les processus en cours d’exécution : ps -ef (chercher le numéro de processus correspondant au script python raspmeteo.py)
  • Pour arrêter un processus en cours : sudo kill -9 9303 (numéro du processus)
--------------------------------------------------------------------


Ma position géographique :
Détail de la construction de l'abri de sonde extérieure DHT22 :


arrière plan : http://nobru54.blogspot.fr/2012/08/nouveau-barbecue-692-kg-de-beton-et.html