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