2015-08-10 1 views
2

Je suis un étudiant de niveau complètement inexpérimenté qui essaie de se familiariser avec python pour effectuer une tâche. On m'a donné une semaine pour le terminer - j'ai très peu de connaissances sur ce qu'il faut faire et je n'ai aucune expérience du codage - je suis vraiment bloqué et je vais probablement avoir l'air très stupide avec les gens sur son forum.Aide pour créer un script d'humidité de la température

Je dois créer un enregistreur de température et d'humidité avec un capteur de framboise pi et DHT22. Je dois écrire un script qui produit une boucle qui dort pendant 10 secondes - je vais exécuter le script pendant deux jours pour recueillir suffisamment de données pour produire des graphiques. Jusqu'à présent, le code que j'ai est celui-ci et il ne fonctionne pas - probablement pour des raisons évidentes - Les données doivent sortir dans deux colonnes sur un fichier leafpad.

# Assign header details to STRING variables - change manually 
txt_studentid = '999'  
txt_pi_location = '999.99999' 
txt_pi_latitude = '999.99999' 
txt_pi_longitude = '999.99999' 

import Adafruit_DHT 
pin = 4 
sensor = Adafruit_DHT.DHT22 
# Import Time module import time 
# open file to write 
f = open('/home/pi/y_data.txt','w') 
f.write(txt_studentid) 
f.write('\n') 
f.write(txt_pi_location) 
f.write('\n') 
f.write(txt_pi_latitude) 
f.write('\n') 
f.write(txt_pi_longitude) 
f.write('\n') 
f.close() 

while True: 
    # store off the date and time details for this 
    sample num_month = time.localtime().tm_mon 
    num_day = time.localtime().tm_mday 
    num_hour = time.localtime().tm_hour 
    num_min = time.localtime().tm_min 
    num_sec = time.localtime().tm_sec 
    num_humidity, num_temperature = Adafruit_DHT.read_retry(sensor, pin)  

txt_month = str(num_month) 
txt_day = str(num_day) 
txt_hour = str(num_hour) 
txt_min = str(num_min) 
txt_sec = str(num_sec) 
txt_humidity = str(num_humidity) 
txt_temperature = str(num_temperature)  

f = open('('/home/pi/my_data.txt','a') 
f.write(txt_month)  
f.write(',') 
f.write(txt_day) 
f.write(',') 
f.write(txt_hour) 
f.write(',') 
f.write(txt_min) 
f.write(',') 
f.write(txt_sec)  
f.write(',') 
# write the temperature and humidity to file 
f,write(txt_humidity) 
f.write(',') 
f,write(txt_temperature) 
f.write(',') 
# write new line 
f.write('\n')  
# close the file 
f.close() 
# wait for ten seconds 
time.sleep(10) 
+0

juste dire que je tape dans my_script.py python sudo et il n'y a pas de message d'erreur, il – codingnewbie

+0

Les 'f = déclarations open' peut utiliser quelques corrections. Dans la première, vous ouvrez un fichier appelé 'y_data.txt' et dans la seconde vous ajoutez un fichier appelé' my_data.txt'. Aussi dans la deuxième déclaration 'f = open' vous avez un' ('' à beaucoup.) –

+0

Votre boucle while est incorrecte, elle tombe dans une boucle infinie. – Rishav

Répondre

0

Vous y êtes presque. Le code que vous avez écrit est un peu inutilement long mais c'est normal si vous êtes nouveau et ne connaissez pas les astuces et les bonnes fonctions;)
Cependant, il fonctionne encore avec quelques changements mineurs!
Vous devez tout mettre en retrait après la ligne où vous avez lu le capteur. Sinon, il n'est pas inclus dans votre boucle et vous continuez à lire les valeurs, mais vous ne les écrivez pas.
Puis deux commentaires ont été foiré, d'abord vous avez commenté import time dont vous avez absolument besoin et en second lieu au commentaire juste après while True: vous avez déplacé sample dans la ligne suivante. Vous avez également écrit f,write(... deux fois. Notez le , au lieu de .
Enfin, votre dernier appel à open contient toujours le (' dont Lambert parlait déjà.
Les trois derniers problèmes sont des problèmes de syntaxe et devraient être signalés par python lui-même.

Je suggère également de mettre le chemin de fichier dans sa propre variable quelque part en haut de sorte que vous pouvez le changer plus facilement.
En outre, il n'est pas nécessaire de conserver une variable pour les versions numérique et chaîne de toutes les parties de l'horodatage. Prenez juste le temps une fois et ensuite lisez ses attributs dans une chaîne de format. Voir format string syntax et jetez un oeil à mon code.

Voici comment j'écrire le script:

import time 
import Adafruit_DHT 

# Assign header details to STRING variables - change manually 
txt_studentid = '999' 
txt_pi_location = '999.99999' 
txt_pi_latitude = '999.99999' 
txt_pi_longitude = '999.99999' 

filepath = '/home/pi/my_data.txt' 
pin = 4 
sensor = Adafruit_DHT.DHT22 
# Import Time module import time 
# open file to write 
with open(filepath, 'w') as f: 
    f.write(txt_studentid + '\n') 
    f.write(txt_pi_location + '\n') 
    f.write(txt_pi_latitude + '\n') 
    f.write(txt_pi_longitude + '\n') 

line_template = ('{time.tm_mon},{time.tm_mday},{time.tm_hour},{time.tm_min},' + 
       '{time.tm_sec},{hum},{temp}\n') 
while True: 
    # get current time 
    sampletime = time.localtime() 
    # sample sensor values 
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) 
    # append time and values to file 
    with open(filepath, 'a') as f: 
     f.write(line_template.format(time=sampletime, 
            hum=humidity, 
            temp=temperature)) 
    # wait 10 seconds 
    time.sleep(10)