为BMP085代码创建循环?
我正在用树莓派和BMP085传感器发射一个气象气球,我用Python代码通过I2C来控制它。我想修改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 个回答
2
可以看看下面这个页面上的回答
你可以考虑使用Twisted库实现的反应器模式。每30分钟执行一次命令其实很简单。
不过要先安装twisted库。你可以在控制台输入
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
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
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。