用烧瓶实时更新pyserial数据[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我试图实时查看数据,我必须关闭python程序来刷新数据。它只在我关闭python文件并重新启动它时刷新。我希望数据实时刷新。

from flask import Flask
import serial



app = Flask(__name__)

water = serial.Serial("COM4",9600)
water1 = water.readline().decode('ascii')

# @ signifies a decorator
@app.route('/')
def index():
    return 'This is home page'

@app.route('/plant')
def plant():
    while True:
        return '<h2>soil is:</h2> ' + water1 + '%'





if __name__=="__main__":
    app.run()
python flask pyserial
1个回答
1
投票

这取决于你的“实时”的意思。让我们来看看Flask如何首先工作。

Why it doesn't work

使用@app.route装饰器的函数之外的所有内容只在服务器启动时执行一次。这就是为什么您的数据当前只被提取一次,您的数据提取代码超出了这些功能:

water = serial.Serial("COM4",9600)
water1 = water.readline().decode('ascii')

Refresh data on page refresh

现在,解决它的最简单方法是每次刷新页面时获取数据,如下所示:

@app.route('/plant')
def plant():
    water = serial.Serial("COM4",9600)
    water1 = water.readline().decode('ascii')
    # while True: // don't use while True though, it'll freeze your program forever.
        return '<h2>soil is:</h2> ' + water1 + '%'

由于plan()在每次刷新页面时执行,因此您的数据也会更新。

Refresh data in "real" real-time

但是,第三种选择是实现通常被称为“实时”的结果。不过不使用Javascript就不会绕过它。在这种情况下,您需要设置一个API,它将返回您将从Javascript调用的数据。

但是,我怀疑,您真正想要做的是刷新页面刷新数据。如果不是这样,请在下面给我写评论,我会更新我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.