python - 为什么我的 .txt 文件中只出现前三行 -?! Raspberry Pi - 温度湿度读数

标签 python raspberry-pi

我是一名完全没有经验的 A-level 学生,试图掌握 Python 来完成作业。我被给了一周的时间来完成它 - 我对该怎么做知之甚少,也没有编码经验 - 我真的被困住了,并且对于他论坛上的人来说可能会显得非常愚蠢。

我必须使用树莓派和 DHT22 传感器创建一个温度和湿度记录器。我要编写一个脚本,生成一个休眠 10 秒的循环 - 我将运行该脚本两天以收集足够的数据来生成图表。到目前为止,我的代码是这样的,但它不起作用 - 可能是由于一些明显的原因。数据需要以两列形式出现在 leafpad 文件中。当我 sudo python 执行脚本时似乎没有发生任何事情 - 在我的 ls 中没有创建 .txt 文件(其中只有一个:

    indoors  
    51.58778   
    -0.15944

但是 LX 终端中没有错误消息..我是否在做一些非常明显错误的事情?

# 将 header 详细信息分配给 STRING 变量 - 手动更改 txt_studentid = '999'
txt_pi_location = '室内'
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)  

最佳答案

您肯定至少希望将文件写入包含在 while 循环中;或以某种方式跟踪读数以供以后保存。

我修改了您的代码以帮助您入门:

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()

我会尝试将 timedelta 要求设置为 30 秒之类的值,以确保它在最多 2 天之前按预期工作。您可以通过将 if timedelta.days >= 2: 更改为 if timedelta.seconds >= 30:

来实现此目的

关于python - 为什么我的 .txt 文件中只出现前三行 -?! Raspberry Pi - 温度湿度读数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919031/

相关文章:

python - 如何跟踪 python 脚本的内存

python - 如何使用selenium和python通过id定位谷歌搜索栏

javascript - 如何在电子中重建 epoll 包?

c - "string of digits into its numeric equivalent"示例无法根据 K&R 正常工作

linux - 有人在 Raspberry pi 3(ARM) 上正确安装了 aws-cli v2(x86_64; zipped) 吗?

java - pi4J 适用于橙子派 Plus 2

python - 我如何获得有关我正在编写的模块的信息?

python - 如何使用 PUT 方法编辑序列化数据

python - DLL加载失败(无法导入tensorflow)

javascript - 如何使用异步 I/O 将实时数据集写入磁盘?