1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Infographiste
    Inscrit en
    décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : décembre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut [WIP] Newbie qui fait sa station météo (Raspberry Pi Zero W)

    Bonjour !

    Je me présente rapidement avant d'entrer dans la supplication J'ai 27 ans, je suis infographiste auto-entrepreneur et co-gérant d'une société de gestion technique événementielle, donc autant dire que je suis plutôt du côté hardware de la force... Si je me débrouille bien en maitrise des logiciels, je n'ai en revanche aucune base en codage si ce n'est les logiques simples (if then while or ...etc) que j'utilise dans certains soft. Ah si, j'ai fait du HTML et CSS à la Fac

    En mai dernier je me suis lancé dans l'inconnu avec un projet en tête, celui de réaliser une sonde météo avec affichage en temps réel et une liaison WiFi avec gestion graphique des températures et de l'humidité via ThingSpeak ! L'idée était de pouvoir afficher différentes infos sur l'écran, et de passer de l'une à l'autre en basculant le bouzin, à l'aide donc d'un tilt-switch (par exemple : info 1 = Temp + HR + Heure, info 2 = Graph dernières 24h, info 3 = prévisions météo 5j)

    Le matos que j'ai acheté (en avril) :
    - Rasp Pi Zero Wifi
    - Sonde température DS18B20
    - Sonde humidité (et température) DHT22
    - Un breadboard pour vérifier mon montage

    J'ai donc assemblé mes 2 sondes en fouinant sur internet pour savoir sur quel port brancher, téléchargé les librairies correspondantes (c'est l'équivalent de drivers pour Raspberry ?)
    Ensuite j'ai trouvé différents bouts de codes que j'ai arrangé à ma sauce afin de récupérer les 2 données de température, d'en faire une moyenne (tmoyenne) et d'afficher cette valeur avec l'humidité relative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import sys
    import Adafruit_DHT
    import time
    
    
    tempfile = open("/sys/bus/w1/devices/28-031652910aff/w1_slave")
    thetext = tempfile.read()
    tempfile.close()
    tempdata = thetext.split("\n")[1].split(" ")[9]
    temperature2 = float(tempdata[2:])
    temperature2 = temperature2 / 1000
    
    sensor = Adafruit_DHT.AM2302
    pin = 5
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
    tmoyenne = (temperature+temperature2*2)/3
    
    print('Temperature Moyenne={0:0.1f}*C  Humidite={1:0.1f}%'.format(tmoyenne, humidity))
    Bon j'ai passé une journée entière à faire ça, mais j'étais super content car ça marchais impecc !
    Je suis ensuite passé à l'étape IoT...pareil, bout de code adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import sys
    import Adafruit_DHT
    from time import sleep
    import urllib2
    
    myAPI = "touchezpasàmonserveur"
    
    def getSensorData():
        tempfile = open("/sys/bus/w1/devices/28-031652910aff/w1_slave")
        thetext = tempfile.read()
        tempfile.close()
        tempdata = thetext.split("\n")[1].split(" ")[9]
        temperature2 = float(tempdata[2:])
        temperature2 = temperature2 / 1000
        
        sensor = Adafruit_DHT.AM2302
        pin = 5
        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    
        tmoyenne = (temperature+temperature2*2)/3
        
        T = tmoyenne
        RH = humidity
    
        return (str(RH), str(T))
    
    def main(): 
       print 'starting...' 
       baseURL = 'https://api.thingspeak.com/update?api_key=%s' % myAPI 
    
       while True: 
           try: 
               RH, T = getSensorData() 
               f = urllib2.urlopen(baseURL + 
                                   "&field1=%s&field2=%s" % (RH, T)) 
               print f.read() 
               f.close() 
               sleep(60) 
           except: 
               print 'exiting.' 
               break 
    
    # call main 
    if __name__ == '__main__': 
       main()
    Ça marchait ! (bien qu'au bout d'une heure ou deux, le script s'arrêtait sans que je comprenne pourquoi)
    Nom : Screenshot_2017-12-14-09-36-46.png
Affichages : 110
Taille : 232,7 Ko

    J'ai ensuite eu un peu moins de temps et j'ai totalement laissé le projet de côté...pour reprendre il y a quelques jours en achetant l'écran et le switch.
    Problème : plus rien ne marche.

    J'ai remarqué (après avoir allumé) que ma sonde DS18B20 avait son cable GND cassé (mal rangé )...j'ai éteint, réparé, mais voici le message d'erreur que j'obtiens :
    Nom : erreur.jpg
Affichages : 112
Taille : 116,6 Ko

    Dans un premier temps, j'aimerai que cela remarche comment avant...le hic c'est que je n'ai aucune idée de comment aborder la chose...

    Ensuite, j'aimerai trouver une solution de câblage propre (j'utilise des fil de breadboard) pour le modèle final, et surtout comprendre comment ajouter à mon câblage l'écran et le switch...
    Voici mon câblage actuel, avec celui recommandé pour le switch que je n'ai pas encore relié :
    Nom : Cablage.jpg
Affichages : 121
Taille : 865,8 Ko

    Dans le genre bombe artisanale on est bien
    Nom : 2017-12-14 08.50.57.jpg
Affichages : 115
Taille : 409,6 Ko


    Thanks ! et merci d'avance pour vos contributions

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Infographiste
    Inscrit en
    décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : décembre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    j'ai isolé les 2 infos provenant des sondes dans mon code de base...

    Le problème vient de la DHT22 qui ne répond plus.
    La DS18B20 me retourne bien la température

    [EDIT BECAUSE GROS BOULET] Le cablage a dû changer entre Avril et aujourd'hui car je viens de remarquer que je demandais au Pin N°5 les infos sur la sonde DHT22, or elle était branché au Pin N°13...
    Bref, good news je peux passer à l'étape supérieure, où là par contre j'ai vraiment besoin d'un coup de pouce

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Infographiste
    Inscrit en
    décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : décembre 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Je viens de connecter le tilt-switch pour le tester, voici mon code, dont l'essentiel est récupéré de Sunfounder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/env python
    import RPi.GPIO as GPIO
    
    TiltPin = 17
    
    def setup():
            GPIO.setmode(GPIO.BCM) 
    	GPIO.setup(TiltPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    	GPIO.add_event_detect(TiltPin, GPIO.BOTH, callback=detect, bouncetime=1000)
    	
    def Print(x):
    	if x == 1:
    		print '    ***'
    		print '    *1*'
    		print '    ***'
    
    def detect(chn):
    	Print(GPIO.input(TiltPin))
    
    def loop():
    	while True:
    		pass
    
    def destroy():
    	GPIO.cleanup()                     # Release resource
    
    if __name__ == '__main__':     # Program start from here
    	setup()
    	try:
    		loop()
    	except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.
    		destroy()
    Si je tilt mon projet, s'affiche *1*. J'ai supposé que le bouncetime représentait le temps pendant lequel, après un tilt, le Pin du Tilt-switch ne serait plus "observé" par la RPi... Donc j'ai mis 1000, pour avoir un temps mort de 1sec (ça à l'air de coller, je me trompe ?).

    L'idée maintenant c'est qu'à chaque tilt, j'avance dans une liste d'éléments...car à terme, quand j'aurai défini mes différents affichages, je pourrai les réunir en une liste d'éléments non ?
    Si je dis que :
    A = Affichage de la Température + Heure
    B = Affichage de l'HR + Heure
    C = Affichage de Tmoyenne + HR

    Et que je crée une liste : liste = [A,B,C]
    Il faudrait que je puisse switcher de l'une à l'autre en "tiltant" la boite.

    Il me manque donc la fonction qui découle de 'if x == 1" alors tu passe à l'affichage suivant...

Discussions similaires

  1. [SQL] une requete qui fait mal a la tete
    Par MailOut dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/02/2005, 17h22
  2. bibliothèque qui fait : [ avi ou dv] ->sous séquence ima
    Par Eric_A dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 09/12/2004, 17h19
  3. probleme de requette qui fait planter powergres
    Par fehmitn dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/09/2004, 19h48
  4. Réponses: 12
    Dernier message: 16/03/2004, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo