简体   繁体   中英

Why do only the first three lines come up in my .txt file -?! Raspberry Pi - temperature humidity readings

I am a completely inexperienced A level student trying to get to grips with python to complete an assignment. I have been given a week to complete it - I have very little knowledge of what to do and have no experience with coding - I am truly stuck and will probably seem very stupid to people on his forum.

I have to create a temperature and humidity logger with a raspberry pi and DHT22 sensor. I am to write a script that produces a loop that sleeps for 10 seconds - I will run the script for two days to collect enough data to produce graphs. So far the code I have is this and it's not working - probably for some obvious reasons. The data needs to come out in two columns in a leafpad file. Nothing seems to be happening when I sudo python execute the script - no .txt file has been created in my ls (there is one with just this in it:

    indoors  
    51.58778   
    -0.15944

But no error message in the LX terminal.. Am I doing something very obviously wrong?

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

import Adafruit_DHT   
pin = 4   
sensor = Adafruit_DHT.DHT22 
# Import Time module import time 
# open file to write   
f = open('/home/pi/my_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)  

You definitely want to at least include the file writing in the while loop; or keep track somehow of the readings for later saving.

I've modified your code to help you get started:

import Adafruit_DHT   
import time
from datetime import datetime

pin = 4   
sensor = Adafruit_DHT.DHT22 
# Import Time module import time 
# open file to write   
f = open('/home/pi/my_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() 

f = open('/home/pi/my_data.txt','a')   
begintime = datetime.now()
while True: 
    # store off the date and time details for this   
    sample_time = datetime.now()
    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.write(txt_month)    
    f.write(',')   
    f.write(txt_day)    
    f.write(',')   
    f.write(txt_hour)    
    f.write(',')   
    f.write(txt_humidity)
    f.write(',')
    f.write(num_temperature)
    f.write('\n')
    time.sleep(10) #sleep for 10 seconds
    timedelta = sample_time - begintime
    if timedelta.days >= 2:
        break
f.close()

I would try setting the timedelta requirement to something like 30 seconds to make sure it works as expected before going up to 2 days. You can do that by changing if timedelta.days >= 2: to if timedelta.seconds >= 30:

I guess you indentation is wrong. You'll get stuck in the while loop and will never write anything to the file. Try indenting everything from num_month = time.localtime().tm_mon to time.sleep(10)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM