1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #!/usr/bin/python
# Station Meteo
# on importe le pilote
import RPi_I2C_driver
import time
from time import sleep
from datetime import datetime
import os
import sys
from subprocess import *
GPIO.setwarnings(False)
# on initialise le lcd
lcd = RPi_I2C_driver.lcd()
# Fonction qui permet de passer une commande OS
def run_cmd(cmd):
p = Popen(cmd, shell=True, stdout=PIPE)
output = p.communicate()[0]
return output
# On definit les GPIO associes au sondes DHT22
sonde1 = 14
sonde2 = 23
sonde3 = 15
# On definit la commande OS dans les variables lire_*
lire_temp1 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $3 }'" % (sonde1)
lire_hum1 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $7 }'" % (sonde1)
lire_temp2 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $3 }'" % (sonde2)
lire_hum2 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $7 }'" % (sonde2)
lire_temp3 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $3 }'" % (sonde3)
lire_hum3 = "sudo nice -20 ./Adafruit_DHT 22 %d |grep Temp |awk '{ print $7 }'" % (sonde3)
# Boucle qui lit les valeurs de la sonde et verifie que ce sont des float
while True :
temperature1 = run_cmd(lire_temp1) # Lance la commande de lecture de la sonde et met en variable le resultat
humidite1 = run_cmd(lire_hum1) # Lance la commande de lecture de la sonde et met en variable le resultat
try: # Test des ...
float(temperature1) and float(humidite1) # ... valeurs pour voir si ce sont des float
print "sonde 1 => Ok"
break # Si oui on casse la boucle
except ValueError: # Sinon
print "sonde 1 erreur, nouvel essai..." # On affiche un message et on reessaye
sleep(1) # On s endors 1 seconde et on recommence la boucle
while True : # Idem au bloc du dessus avec temperature2
temperature2 = run_cmd(lire_temp2)
humidite2 = run_cmd(lire_hum2)
try:
float(temperature2) and float(humidite2)
print "sonde 2 => Ok"
break
except ValueError:
print "sonde 2 erreur, nouvel essai..."
sleep(1)
while True : # Idem au bloc du dessus avec temperature2
temperature3 = run_cmd(lire_temp3)
humidite3 = run_cmd(lire_hum3)
try:
float(temperature3) and float(humidite3)
print "sonde 3 => Ok"
break
except ValueError:
print "sonde 3 erreur, nouvel essai..."
sleep(1)
# Bloc d affichage du LCD ligne par ligne
lcd.lcd_display_string(datetime.now().strftime(' %d %b %H:%M'), 1) # Affichage de la date et heure sur la 1ere ligne
lcd.lcd_display_string(" Sal. Ch.1 Ext" , 2) # Affichage de la ligne 2
lcd.lcd_display_string("Temp :%s%s%s" %(temperature1, temperature2, temperature3) , 3) # Affichage de la ligne 3 avec t°
lcd.lcd_display_string("Hum :%s%s%s"%(humidite1, humidite2, humidite3) , 4) # Affichage de la ligne 3 avec hum |
Partager