Python Web 应用程序:刷新值

Python Web application: Refresh values

我使用 python 脚本模板(Raspberry Pi 上的 运行)通过 WiFi 将传感器数据 (i2c) 发送到我的电脑。问题是,这些值不是静态的。如果我启动 Web 应用程序,它只会从传感器读取一次数据。所以,如果我从我的 PC 检查这些值,我可以看到它正确地发送了数据,但它们不会改变。

如何修改脚本以刷新 i2c_output 值,而不是一遍又一遍地启动脚本?

这是我目前尝试过的方法:

import web
import sys, os
import smbus
import math

#
# Lot of initialisation... forget that part
#

accel_xout = read_word_2c(0x3b)
accel_yout = read_word_2c(0x3d)
accel_zout = read_word_2c(0x3f)
afs_sel = read_word_2c(0x28)
LSB_afs_sel = 16384.0

accel_xout_sc = accel_xout / LSB_afs_sel
accel_yout_sc = accel_yout / LSB_afs_sel
accel_zout_sc = accel_zout / LSB_afs_sel

i2c_output = str(accel_xout_sc) + str(accel_yout_sc) + str(accel_zout_sc)


urls = ( '/','Index',
)

class Index:
  def GET(self):
    return i2c_output

if __name__=="__main__":
    app=web.application(urls,globals())
    app.run()

将检索传感器数据的代码移到一个方法中,并在每次调用索引时调用该方法。

def get_sensor_output():
    #
    # Lot of initialisation... forget that part
    #

    accel_xout = read_word_2c(0x3b)
    accel_yout = read_word_2c(0x3d)
    accel_zout = read_word_2c(0x3f)
    afs_sel = read_word_2c(0x28)
    LSB_afs_sel = 16384.0

    accel_xout_sc = accel_xout / LSB_afs_sel
    accel_yout_sc = accel_yout / LSB_afs_sel
    accel_zout_sc = accel_zout / LSB_afs_sel

    i2c_output = str(accel_xout_sc) + str(accel_yout_sc) + str(accel_zout_sc)

    return i2c_output

class Index:
  def GET(self):
    return get_sensor_output()

注意:您可能希望根据调用此 get 方法的频率来实施某种缓存。目前每次调用都会检索传感器数据,这可能是也可能不是昂贵的操作,会耗尽你的 pi