【问题标题】:Help with creating temperature humidity script帮助创建温度湿度脚本
【发布时间】:2015-08-10 11:30:11
【问题描述】:

我是一个完全没有经验的 A 级学生,我试图掌握 Python 来完成一项作业。我有一周的时间来完成它——我对做什么知之甚少,也没有编码经验——我真的被困住了,在他论坛上的人看来可能很愚蠢。

我必须创建一个带有树莓派和 DHT22 传感器的温度和湿度记录器。我要编写一个脚本来生成一个休眠 10 秒的循环 - 我将运行该脚本两天以收集足够的数据来生成图表。到目前为止,我拥有的代码是这样的,但它无法正常工作 - 可能是出于一些明显的原因 - 数据需要在 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)  

【问题讨论】:

  • 只是说我输入 sudo python my_script.py 并没有错误信息
  • f = open 语句可以使用一些更正。在第一个中,您打开一个名为y_data.txt 的文件,在第二个中,您将附加到一个名为my_data.txt 的文件中。同样在第二个f = open 声明中,您有一个(' 很多。
  • 你的while循环不正确,陷入无限循环。

标签: linux python raspberry-pi temperature


【解决方案1】:

你快到了。您编写的代码有点不必要地长,但是如果您是新手并且不知道技巧和正确的功能,这很正常;)
但是,它仍在进行一些小的更改!
您需要在读出传感器的行之后缩进所有内容。否则,它不会包含在您的循环中,您会继续读取这些值,但您没有写入它们。
然后两个 cmets 搞砸了,首先你注释掉了你肯定需要的 import time,然后在 while True: 之后的注释中你将 sample 移到下一行。
您还写了两次f,write(...。注意 , 而不是 .
最后,您对 open 的最后一次调用仍然包含 Lambert 已经在谈论的 ('
最后三个问题是语法问题,其实应该是python自己指出来的。

我还建议将文件路径放入顶部某个位置的自己的变量中,以便您可以更轻松地更改它。
此外,不必为时间戳的所有部分的数字版本和字符串版本都保留一个变量。只需获取一次时间,然后在格式字符串中读取其属性。请参阅format string syntax 并查看我的代码。

这就是我编写脚本的方式:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多