Page 1 sur 2

Sonde DS18B20 LED et python

Posté : lun. 2 mars 2015 20:40
par Eddie
Hoyé,

J'ai perdu patience de chercher sur le net alors je compte sur vous pour :

- Je souhaiterais compléter la manip de lire une température, ça j'ai compris.
Par contre maintenant je souhaiterais rajouter un critère comme une plage de donnée par exemple. C'est à dire, vert si la température est supérieure à 20°C et rouge si c'est en dessous, le tout avec des LED évidement.
Si possible en français et avec un schéma :roll:

- Autre question, sur le net il y'a plein de façon de faire afficher la T°C en ligne et consultable sur tablette/iphone, etc.
Seulement il date un peu et son plus ou moins facile et exploitable. Lequel est le mieux et à la portée de débutant ?

Merci pour vos contributions. :mrgreen:

Re: Sonde DS18B20 LED et python

Posté : lun. 2 mars 2015 21:18
par phdenaujan
Bonsoir,

Avec quelques ligne de if, else et GPIO.output, tu devrais pouvoir faire quelques choses rapidement.

Pour lire la sonde en code python :

Code : Tout sélectionner

    system('modprobe w1-gpio')
    system('modprobe w1-therm')
 
    base_dir = '/sys/bus/w1/devices/'
    sonde = "/sys/bus/w1/devices/w1_bus_master1/n° de la sonde/w1_slave"

Re: Sonde DS18B20 LED et python

Posté : lun. 2 mars 2015 23:11
par Eddie
Oyé,

Merci pour tes infos mais je suis désolé, étant débutant dans python ne ne comprend pas ce que tu me dit. :|

Re: Sonde DS18B20 LED et python

Posté : mar. 3 mars 2015 18:36
par phdenaujan
Bonjour,

Pour mettre en service ta sonde, visite : http://www.framboise314.fr/mesure-de-te ... pberry-pi/ ou encore http://www.domolio.fr/monitorer-la-temp ... bien-fait/

Tu as tout à tas de tuto sur le net te permettant de la mettre en oeuvre.

Pour piloter les LED, tu auras besoins de la laibrairie RPi.GPIO à l'adresse : https://pypi.python.org/pypi/RPi.GPIO

Je te conseille de parcourir le site et d'autres, ils te donnerons tout un tas d'informations indispensables pour débuter.

Amuse toi bien,

Re: Sonde DS18B20 LED et python

Posté : mar. 3 mars 2015 20:46
par Eddie
Bonsoir,

Merci pour ces infos. j'arrive à faire fonctionner l'un et l'autre indépendamment.
Par contre maintenant je souhaiterais les faire marcher ensemble avec les critères dont j'ai parlé un peu plus haut.

Un autre lien à me proposer, exemple ou un code en python ?

En te remerciant.

Re: Sonde DS18B20 LED et python

Posté : mer. 4 mars 2015 02:27
par EVOTk
Salut,

Pour la gestion de ma chaudière, voici comment je récupère l'info de ma sonde :

Code : Tout sélectionner

def temperature():
 global temp
 tfile = open("/sys/bus/w1/devices/28-00042c77e5ff/w1_slave")
 text = tfile.read()
 tfile.close()
 temperaturedata = text.split("\n")[1].split(" ")[9]
 temperature = float(temperaturedata[2:])
 temp = round(temperature / 1000, 2)
Ensuite avec la valeur temp qui est arrondi a 2 chiffres apres la virgules, je peu faire des actions comme :

Si la température est supérieure ou égale à 20°C qui sera ma consigne, j'allume une LED verte, si je suis inférieur a la consigne, j'allume la led Rouge, ensuite en attend 30sec et on recommence.
On considère la led verte cablé sur le GPIO 17 et la rouge sur le GPIO 18 ( BCM )

( Le code n'est pas complet, et il faut évidement changé le numéro de sonde ! )

Code : Tout sélectionner

tfile = open("/sys/bus/w1/devices/28-00042c77e5ff/w1_slave")
text = tfile.read()
tfile.close()
temperaturedata = text.split("\n")[1].split(" ")[9]
temperature = float(temperaturedata[2:])
temp = round(temperature / 1000, 2)

consigne = 20
LEDVERTE = 17
LEDROUGE =18

while True:
if temp >= consigne:
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.LOW)
elif temp < consigne:
 GPIO.output(LEDVERTE,GPIO.LOW)
 GPIO.output(LEDROUGE,GPIO.HIGH)
else:
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.HIGH)

time.sleep(30)

 
J'ai rajouter le else: qui n'est pas obligatoire mais qui si jamais pour une raison x ou y la valeur de la sonde n'est pas numérique ( sonde HS par exemple ? ) les 2 LED s'allument.

Re: Sonde DS18B20 LED et python

Posté : mer. 4 mars 2015 08:41
par Eddie
Pétard c'est génial ton truc là avec ta chaudière... Je pensais faire la même chose avec la mienne quant mes connaissances se seraient améliorés. Y'a moyen d'en savoir plus ? C'est la marque Perge.

Je vais regarder tour ça prochainement car je suis en vacance et j'ai pas emené mes Rpi... :D mais dans l'idée c'est ça... Merci

Re: Sonde DS18B20 LED et python

Posté : mer. 4 mars 2015 10:55
par dbrion0606
remplacé par le suivant

Re: Sonde DS18B20 LED et python

Posté : mer. 4 mars 2015 10:56
par dbrion0606
Excusez moi d'être pédant, mais une erreur serait "mieux" gérée par une exception (un bloc "try" attrape toutes les erreurs, et les redirige vers un traitement spécifique); ceci mènerait au code suivant (testé sur PC; les instructions spécifiques au RPI ont été commentées et remplacées par des print)

Code : Tout sélectionner

consigne = 20
LEDVERTE = 17
LEDROUGE =18



def froid ():
 # GPIO.output(LEDVERTE,GPIO.LOW)
 # GPIO.output(LEDROUGE,GPIO.HIGH)
 print("froid")

def chaud ():
 print ("chaud")
 # GPIO.output(LEDVERTE,GPIO.HIGH)
 # GPIO.output(LEDROUGE,GPIO.LOW)
def panic ():
 print ("panic") # les deux leds s'allument si anomalie
# GPIO.output(LEDVERTE,GPIO.HIGH)
# GPIO.output(LEDROUGE,GPIO.HIGH)

#jeu d'essais
temperaturedata="b:21000" # -> chaud
temperaturedata="a:12000"
temperaturedata="t:18000" # froid
temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
  temperature=float(temperaturedata[2:])
  print (temperature)
  temp = round(temperature / 1000, 2)
  # while True:
  if temp >= consigne:
    chaud()
  elif temp < consigne:
    froid()
  else :
    panic()
except:
  panic()

Re: Sonde DS18B20 LED et python

Posté : dim. 8 mars 2015 22:16
par Eddie
Bonjour,

J'ai essayé de faire un mix de tout ça mais que néni.
J'ai testé la sonde et les LED indépendamment et tout marche.
Le prog plante vers la fin sur except et si j'isole cette ligne il attend une fin du prog sur la ligne 78 alors qu'il n'y a rien...

Code : Tout sélectionner

import os
import glob
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-000006a3375b')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
        f = open(device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f
while True:
        print(read_temp())
        time.sleep(1)

def temperature():
     global temp
     tfile = open("/sys/bus/w1/devices/28-000006a3375b/w1_slave")
     text = tfile.read()
     tfile.close()
     temperaturedata = text.split("\n")[1].split(" ")[9]
     temperature = float(temperaturedata[2:])
     temp = round(temperature / 1000, 2)

CONSIGNE = 20
LEDVERTE = 18
LEDROUGE = 17

def froid ():
     # GPIO.output(LEDVERTE,GPIO.LOW)
     # GPIO.output(LEDROUGE,GPIO.HIGH)
     print("froid")

def chaud ():
     print ("chaud")
     # GPIO.output(LEDVERTE,GPIO.HIGH)
     # GPIO.output(LEDROUGE,GPIO.LOW)
def panic ():
     print ("panic") # les deux leds s'allument si anomalie
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    #jeu d'essais
    temperaturedata="b:21000" # -> chaud
    temperaturedata="a:12000"
    temperaturedata="t:18000" # froid
    temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
      temperature=float(temperaturedata[2:])
      print (temperature)
      temp = round(temperature / 1000, 2)
      # while True:
      if temp >= consigne:
        chaud()
      elif temp < consigne:
        froid()
      else :
        panic()
      except :
        panic()

Un p'tit coup de pouce STP merci.