为BMP085代码创建循环?

1 投票
2 回答
746 浏览
提问于 2025-04-17 17:23

我正在用树莓派和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

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答