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

时间:2018-05-12 06:12:33

标签: python flask raspberry-pi3

我是Flask的新手,我正在考虑如何处理一个想法。

我正在使用Python在Raspberry Pi上构建一个水族馆控制器。 我已经构建了一个在Arduino上工作得很好的,但是想转移到Raspberry Pi并添加一个Web界面。

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

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

因为我正在控制topoff泵,主泵和加热器之类的东西,所以无论网络服务器如何,我都需要连续运行应用程序。

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

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

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)

0 个答案:

没有答案