为BMP085代码创建循环?

时间:2013-02-28 00:02:35

标签: python raspberry-pi

我正在发送一个由Raspberry Pi和BMP085传感器控制的气象气球,我正在通过I2C使用一些Python代码来运行它。我想修改每隔半小时运行一次的Adafruit BMP085示例代码:

#!/usr/bin/python

from Adafruit_BMP085 import BMP085

# ===========================================================================
# Example Code
# ===========================================================================

# Initialise the BMP085 and use STANDARD mode (default value)
# bmp = BMP085(0x77, debug=True)
bmp = BMP085(0x77)

# To specify a different operating mode, uncomment one of the following:
# bmp = BMP085(0x77, 0)  # ULTRALOWPOWER Mode
# bmp = BMP085(0x77, 1)  # STANDARD Mode
# bmp = BMP085(0x77, 2)  # HIRES Mode
# bmp = BMP085(0x77, 3)  # ULTRAHIRES Mode

temp = bmp.readTemperature()
pressure = bmp.readPressure()
altitude = bmp.readAltitude()

print "Temperature: %.2f C" % temp
print "Pressure:    %.2f hPa" % (pressure / 100.0)
print "Altitude:    %.2f" % altitude

我计划使用shell脚本运行它,但感觉shell太强大了,

#!/bin/bash

while true; do
    /gryphon7i/alt/altitude_ai >> measurements.log

    sleep 1800 
done

如何修改代码以便每半小时录制一次?我应该坚持使用shell脚本吗?感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:2)

查看以下答案posted on that page

您可能想要考虑使用Twisted实现的Reactor模式。每30分钟执行一次命令非常容易。

为了使其工作,您必须首先安装扭曲的库。你可以输入

来做到这一点
sudo easy_install twisted

sudo pip install twisted

进入你的控制台。之后,您将能够在代码中使用该库。

#!/usr/bin/python

from Adafruit_BMP085 import BMP085
from twisted.internet import task
from twisted.internet import reactor

bmp = BMP085(0x77)    

timeout = 60.0 * 30 # 30 minutes

def doWork():
    temp = bmp.readTemperature()
    pressure = bmp.readPressure()
    altitude = bmp.readAltitude()

    # write log
    f = open('measurements.log', 'a') 
    f.write("Temperature: %.2f C" % temp)
    f.write("Pressure: %.2f hPa" % (pressure / 100.0))
    f.write("Altitude: %.2f" % altitude)
    f.close


l = task.LoopingCall(doWork)
l.start(timeout) # call every sixty seconds

reactor.run()

我是从记忆中写下来的。您可能需要对代码进行一些实验。

答案 1 :(得分:1)

import time

while True:
    # sleep up until then next 1/2 hour
    time.sleep(1800-time.time()%1800)

    temp = bmp.readTemperature()
    pressure = bmp.readPressure()
    altitude = bmp.readAltitude()

    print "Temperature: %.2f C" % temp
    print "Pressure:    %.2f hPa" % (pressure / 100.0)
    print "Altitude:    %.2f" % altitude