Sonde humidité et température.


11 posts
by baba » Sun May 14, 2017 3:08 pm
Bonjour,

Il y a 6 mois j'ai monté ma box et tout fonctionne parfaitement sauf l'humidité et la température.

J'ai 2 sonde de type DHT 22 (AM2302) et 1 sonde AM2305. Et aucune fonctionne correctement sur mon RPI 3.

j'ai que des résultat comme ça:
Image

Et des fois ça marche.
Étant un quiche dans le domaine et en ai un peu marre d'acheter des sondes pour rien.
Depuis 6 mois j'en suis au même point. Y aurait t'il une méthode fiable pour faire marcher ces sondes ?

Merci à vous.

Baba.
Posts: 5
Joined: Sun May 14, 2017 2:51 pm
by totoharibo » Sun May 14, 2017 7:31 pm
J'ai essayé un DHT11 : mesure pas très stable : rangé dans un placard.
Peut-être que je vais le ressortir :-)

J'utilisais DHTxxD chez :
http://abyz.co.uk/rpi/pigpio/examples.html

Mais d'autres posts existent
Posts: 3083
Joined: Thu Jan 24, 2013 8:43 am
by danjperron » Sun May 14, 2017 9:08 pm
J'ai 2 sonde de type DHT 22 (AM2302) et 1 sonde AM2305. Et aucune fonctionne correctement sur mon RPI 3.


Il ne marche jamais ou quelque fois?

Les DHT22 sont très demandant sur le cpu. Si tu as un usage cpu élevé, il y a de forte chance d'avoir une erreur de lecture.

Il faut donc vérifier et si la réponse donne une erreur il faut la relire.

Ma version qui utilise le SPI est de loin la meilleure méthode mais J'ai longtemps changé pour l'utilisation d'un Arduino avec un nRF24L01 dont le Raspiberry Pi devient un serveur.

https://www.raspberrypi.org/forums/view ... 38#p720838
Last edited by danjperron on Mon May 15, 2017 10:27 pm, edited 1 time in total.
Posts: 2617
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada
by jelopo » Mon May 15, 2017 8:13 am
Bonjour,

De mon coté, pour un relevé de données sur un site Internet, j'ai dû mettre une boucle de quelques essais car le site ne répond pas toujours.

voici à quoi ça ressemble en Python :
Code: Select all
 # fonction de recuperation des données
def get_data ():
    req = Request(url)
    try:
        rep = urlopen(req)
    except HTTPError as e:
        print 'The server couldn\'t fulfill the request.'
        print 'Error code: ', e.code
        data = 1
    except URLError as e:
        print 'We failed to reach a server.'
        print 'Reason: ', e.reason
        data = 1
    else:
        data = json.load(rep)
    return data

    # nombre d'essais max
    max_cnt = 5
    # mise à 0 du compteur
    cnt = 0
    # Boucle de max_cnt essais de recupereration des donnees
    while cnt < max_cnt :
        data = get_data()
        # Gestion des erreurs
        # data = {u'message': u'Error: Not found city', u'cod': u'404'}
        if type(data) == dict:
           cnt += 1
           # Affichage donnees si code retour OK (200)
           if (data['cod']) == 200:
              # Generation message OK si erreur precedente
              if cnt > 1:
                 sys.stderr.write("Try %s : OK - return code = %s \n" % (cnt, data['cod']))
              print_data(data)
              ec = 0
              break
           else:
              sys.stderr.write("Try %s : %s - return code = %s \n" % (cnt, (data['message']), (data['cod'])))
              time.sleep(5)
              ec += 1
              # Generation message de fin si max_cnt atteint
              if cnt == max_cnt :
                 sys.stderr.write("Max try (%s) occured: end." % (max_cnt))
        else:
           cnt += 1
           time.sleep(30)


Bien sûr ce bout de code est écrit dans un cas bien particulier. Il faut le reprendre pour l'adapter au mesure des capteurs.

Bon courage.
Posts: 1089
Joined: Wed Oct 17, 2012 7:53 pm
by baba » Tue May 16, 2017 4:04 pm
Merci à toute vos réponses.

@totoharibo: j'ai réussi à build mais n'arrive pas a avoir de valeur.

danjperron wrote:
Il ne marche jamais ou quelque fois?

ça peut marcher pendant 2 heures et après ça déconne.
Des fois je dois débrancher la sonde pour que ça refonctionne.

Je vais éditer après les testes de autres solutions.
Posts: 5
Joined: Sun May 14, 2017 2:51 pm
by totoharibo » Tue May 16, 2017 7:26 pm
la solution serait arduino avec les sondes et Rpi pour traiter : pas simple.
ou alors des sondes pas en 1-wire (i2c ou spi) :
http://www.lextronic.fr/P32717-module-h ... board.html
pas essayé bien sûr
Posts: 3083
Joined: Thu Jan 24, 2013 8:43 am
by baba » Sat May 20, 2017 2:07 pm
Salut,

Merci pour totoharibo pour ta solution. J'en avais commander une chez les chinois. Mais impossible de trouvé le numéro IC2.
ça fesait des trait sur toute les lignes. Alors j'avais abandonné.

J'ai mis à jour Adafruit ça à été les 2 premiers jour et ça recommence :evil: :evil: :evil:.
Image

On voit que la température n'a pas été modifier depuis un moment. par rapport à l'heure de mon pc.
Et quand je lance la commande:
Code: Select all
 sudo ./AdafruitDHT.py 22 18
Failed to get reading. Try again!


Je suis pas à la minute près mais 20 min c'est un peu beaucoup.

Il n'y a pas moyen de coupé la pin du 5volt pour 10 seconde. Car quand ça bug comme ça quand je débranche et j'attends un peu avant de rebrancher ça repart.
Posts: 5
Joined: Sun May 14, 2017 2:51 pm
by totoharibo » Sat May 20, 2017 2:26 pm
< Il n'y a pas moyen de coupé la pin du 5volt pour 10 seconde. Car quand ça bug comme ça quand je débranche et j'attends un peu avant de rebrancher ça repart.
>

le 5V c'est une alim. il faut du hard commandé pour un GPIO pour avoir un 5V "coupable" (interruptible).

fais attention le signal sur les GPIO c'est du 3.3V, généralement il faut alimenter en 3.3V
Posts: 3083
Joined: Thu Jan 24, 2013 8:43 am
by danjperron » Sat May 20, 2017 6:48 pm
Si tu utilises pigpio de Joan il y a du code pour couper le 5V en utilisant un GPIO.

C'est la deuxième méthode efficace si tu ne veux pas utiliser le SPI. C'est celle que j'utilisais avant de tout changer avec des capteurs sans fils.(nRF24L01 + Arduino).

http://abyz.co.uk/rpi/pigpio/examples.html#Python%20code

https://www.raspberrypi.org/forums/viewtopic.php?p=889896#p889896
Posts: 2617
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada
by baba » Sun Jun 04, 2017 6:03 pm
Merci pour vos réponses. La j'ai encore un autre problème je n'est pas accès à domoticz.
Le WE prochain je testerai ta solution @danjperron

Edit pour couper le jus de la sonde j'ai fais une chose très simple. N'étant pas programmeur. J'ai passé le cable masse dans un relais et toutes les dix minute ça coupe le jeu pendant 10 secondes.
On peut faire plus propre niveau bash :)

Code: Select all
#!/bin/bash
/usr/local/bin/gpio export 23 in #COUPE SONDE
sleep 15
/usr/local/bin/gpio export 23 out #REACTIVE SONDE
exit 0

Le tout mis dans cron.
Posts: 5
Joined: Sun May 14, 2017 2:51 pm
by baba » Mon Jun 05, 2017 3:40 pm
Bonjour,

Je testais le tuto en anglais.

J'arrive à cette ligne:
Code: Select all
 [b]sudo update-rc.d pigpiod defaults 9[/b]
insserv: warning: script 'pigpiod' missing LSB tags and overrides
insserv: There is a loop between service watchdog and pigpiod if stopped
insserv:  loop involving service pigpiod at depth 2
insserv:  loop involving service watchdog at depth 1
insserv: Stopping pigpiod depends on watchdog and therefore on system facility `$all' which can not be true!
insserv: exiting now without changing boot order!
update-rc.d: error: insserv rejected the script header

J'ai l'impression d'avoir une erreur.

Quand je lance le script python:
Code: Select all
sudo python DHT22.py
1 -999 -999 -999.00 0 0 0 0
2 -999 -999 -999.00 0 0 1 0
3 -999 -999 -999.00 0 0 2 0
4 -999 -999 -999.00 0 0 3 1
5 -999 -999 -999.00 0 0 4 1
6 -999 -999 -999.00 0 0 5 1
7 -999 -999 -999.00 0 0 6 2
8 -999 -999 -999.00 0 0 7 2
9 -999 -999 -999.00 0 0 8 2
^X^CTraceback (most recent call last):
  File "DHT22.py", line 276, in <module>
    time.sleep(0.2)


Et avec la biblio Adafruit pas mieux les résultat. Pourtant avant vendredi tout marchait bien :(

merci pour votre aide :)
Posts: 5
Joined: Sun May 14, 2017 2:51 pm