1

我正在发送一个由 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脚本吗?感谢您提前提供任何帮助。

4

2 回答 2

2

查看该页面上发布的以下答案

您可能需要考虑使用 Twisted 实现的反应器模式。每 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()

我是凭记忆写的。您可能需要对代码进行一些试验。

于 2013-02-28T00:11:35.487 回答
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
于 2013-02-28T00:14:51.713 回答