我是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)