用flask实时更新pyserial数据

update pyserial data in real time with flask

我想实时查看数据,我必须关闭 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()

这取决于你所说的“real-time”是什么意思。我们先来看看Flask是如何工作的

为什么它不起作用

带有 @app.route 装饰器的函数之外的所有内容都只在服务器启动时执行一次。这就是为什么你的数据目前只被获取一次,你的数据获取代码在这些函数之外:

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

在页面刷新时刷新数据

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

@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() 在每次页面刷新时执行,因此您的数据也会随之更新。

刷新“真实”数据real-time

不过还有第三种选择,可以达到通常称为“real-time”的结果。但是,如果不使用 Javascript,您将无法绕过它。在这种情况下,您设置了一个 API,它将 return 您的数据,您将从 Javascript.

调用它

但是,我怀疑您真正想要做的是在页面刷新时刷新数据。