将Flask与用Python编写的核心应用程序一起使用

将Flask与用Python编写的核心应用程序一起使用,python,flask,raspberry-pi3,Python,Flask,Raspberry Pi3,我对Flask还不熟悉,我正试着思考我想如何处理一个想法 我正在使用Python在Raspberry Pi上构建一个水族馆控制器。 我已经建立了一个在Arduino上运行得很好的系统,但是我想转到Raspberry Pi并添加一个web界面 我的方法是在同一个应用程序中修改Python代码和Flask。但是当我运行代码时,我必须在应用程序实际执行之前将浏览器打开到web服务器 无论web服务器上发生了什么,我都需要运行基本代码 因为我控制着像topoff泵、主泵和加热器这样的东西,所以无论Web

我对Flask还不熟悉,我正试着思考我想如何处理一个想法

我正在使用Python在Raspberry Pi上构建一个水族馆控制器。 我已经建立了一个在Arduino上运行得很好的系统,但是我想转到Raspberry Pi并添加一个web界面

我的方法是在同一个应用程序中修改Python代码和Flask。但是当我运行代码时,我必须在应用程序实际执行之前将浏览器打开到web服务器

无论web服务器上发生了什么,我都需要运行基本代码

因为我控制着像topoff泵、主泵和加热器这样的东西,所以无论Web服务器如何,我都需要应用程序持续运行

我的问题是,可以将Flask配置为作为被动函数运行,以允许代码的关键部分在没有web服务器的情况下工作吗

我还认为我可以将web服务器数据导出到一个文件中,然后为web服务器编写一个单独的应用程序。这里的限制是我希望能够从浏览器与核心应用程序交互(即从浏览器打开/关闭泵)

从烧瓶导入烧瓶,渲染\u模板
导入日期时间
将RPi.GPIO导入为GPIO
#对rpi引脚使用通道编号
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#导入时间
将Adafruitgpio.SPI作为SPI导入
进口Adafruit_MCP3008
#软件SPI配置:
CLK=18#物理引脚12
MISO=23#物理引脚16
MOSI=24#物理引脚18
CS=25#物理引脚25
mcp=ADAFURITY\U MCP3008.MCP3008(clk=clk,cs=cs,miso=miso,mosi=mosi)
#设置继电器
继电器Ch1=26#物理引脚37
继电器Ch2=20#物理引脚38
继电器Ch3=21#物理引脚40
GPIO.setup(继电器1,GPIO.OUT)
GPIO.setup(继电器Ch2,GPIO.OUT)
GPIO.setup(继电器Ch3,GPIO.OUT)
#将继电器初始化为打开状态
GPIO.输出(继电器_Ch1,GPIO.高)
GPIO.输出(继电器Ch2,GPIO.高)
GPIO.输出(继电器_Ch3,GPIO.高)
#光开关设置
OptSw1=17#物理引脚11
OptSw2=27#物理引脚13
GPIO.setup(OptSw1,GPIO.IN)
GPIO.setup(OptSw2,GPIO.IN)
def RSVR():
值=浮点(mcp.read\U adc(0))
全球层面
级别=整数(值/1023*100)
def TOPOFF():
全局状态1,状态2
OptSwSts1=GPIO.input(OptSw1)
如果OptSwSts1==真:
Status1=“关闭”
其他:
Status1=“打开”
OptSwSts2=GPIO.input(OptSw2)
如果OptSwSts2==真:
Status2=“关闭”
其他:
Status2=“打开”
如果now.hour%4==0:
如果now.minute==59:

如果now.second有一个非常类似的问题可能会有用,我发现了一个非常好的逐步教程,使用DHT22传感器并将数据存储在数据库中,然后调用数据,最后在浏览器中显示并绘制数据图表。
from flask import Flask, render_template
import datetime
import RPi.GPIO as GPIO

#use Channel numbering for rpi pins
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#import time

import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008

# Software SPI configuration:
CLK  = 18   # physical pin 12
MISO = 23   # physical pin 16
MOSI = 24   # physical pin 18
CS   = 25   # physical pin 25
mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)

# Setup Relays
Relay_Ch1 = 26   # physical pin 37
Relay_Ch2 = 20   # physical pin 38
Relay_Ch3 = 21   # physical pin 40

GPIO.setup(Relay_Ch1,GPIO.OUT)
GPIO.setup(Relay_Ch2,GPIO.OUT)
GPIO.setup(Relay_Ch3,GPIO.OUT)

#Initialize Relays to OPEN

GPIO.output(Relay_Ch1,GPIO.HIGH)
GPIO.output(Relay_Ch2,GPIO.HIGH)
GPIO.output(Relay_Ch3,GPIO.HIGH)

#Optical Switch Setup
OptSw1 = 17   # physical pin 11
OptSw2 = 27   # physical pin 13
GPIO.setup(OptSw1, GPIO.IN)
GPIO.setup(OptSw2, GPIO.IN)

def RSVR():
        values = float(mcp.read_adc(0))
    global levels
        levels = int(values/1023*100)

def TOPOFF():
    global Status1, Status2
    OptSwSts1=GPIO.input(OptSw1)
    if OptSwSts1 == True:
        Status1 = "Close"
    else:
        Status1 = "Open"

    OptSwSts2=GPIO.input(OptSw2)
        if OptSwSts2 == True:
                Status2 = "Close"
        else:
                Status2 = "Open"

    if now.hour % 4 == 0:
        if now.minute == 59:
            if now.second <= 15:
                if OptSwSts1 == False and OptSwSts2 == False:
                    GPIO.output(Relay_Ch1,GPIO.LOW)
                    print "Topoff Relay_Ch1 engaged", now
                else:
                    GPIO.output(Relay_Ch1,GPIO.HIGH)
            else:
                GPIO.output(Relay_Ch1,GPIO.HIGH)

def RELAYS():
    global Relay1, Relay2, Relay3
        Relay1_Sts=GPIO.input(Relay_Ch1)
        if Relay1_Sts == True:
                Relay1 = "Open"
        else:
                Relay1 = "Closed"

        Relay2_Sts=GPIO.input(Relay_Ch2)
        if Relay2_Sts == True:
                Relay2 = "Open"
        else:
                Relay2 = "Closed"

        Relay3_Sts=GPIO.input(Relay_Ch3)
        if Relay3_Sts == True:
                Relay3 = "Open"
        else:
                Relay3 = "Closed"

app = Flask(__name__)
@app.route("/")

def web():
    global now
    now = datetime.datetime.now()
    timeString = now.strftime("%Y-%m-%d %H:%M:%S")

    RSVR()

    TOPOFF()

    RELAYS()


    templateData = {
        'title' : 'AquaCR',
        'time' : timeString,
        'levels' : levels,
        'OptSw1' : Status1,
        'OptSw2' : Status2,
        'Relay1' : Relay1,
        'Relay2' : Relay2,
        'Relay3' : Relay3
        }
    return render_template('main.html', **templateData)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)