2013-02-28 4 views
1

Я отправляю воздушный шар, управляемый датчиком малины Pi и BMP085, и я использую код Python через I2C для его запуска. Я хочу изменить Adafruit BMP085 Пример кода, который запускает его каждые полчаса:Создание цикла для кода 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 

Я планировал запустить его с помощью сценария оболочки, но он чувствует себя слишком много энергии на раковине,

#!/bin/bash 

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

    sleep 1800 
done 

Что я могу сделать, чтобы изменить код для записи его каждые полчаса? Должен ли я просто придерживаться сценария оболочки? Спасибо за любую помощь заранее.

+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 
+0

, так что добавьте время для импорта и добавьте время. Истинная строка к началу кода? – sharksfan98

2

Заканчивать следующие ответы posted on that page

Вы могли бы хотеть рассмотреть реактор шаблон реализован с 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() 

Я написал это из своей памяти. Возможно, вам придется немного поэкспериментировать с кодом.

+0

как, где в моем приложении я могу поместить петлю? Я не очень хорош с python – sharksfan98

+0

Я отредактировал свой ответ. – Dennis

+0

ни одно из этих приложений не было установлено. Может быть, sudo apt-get install python-pip поможет? – sharksfan98