使用Flask运行多个Python函数
第二次更新
快到了!!但是出现了一个错误:“ValueError: 尝试使用一个未打开的端口”。
File "c:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__ return self.wsgi_app(environ, start_response) File "c:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app response = self.make_response(self.handle_exception(e)) File "c:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app response = self.full_dispatch_request() File "c:\Python27\lib\site-packages\flask\app.py", line 1360, in full_dispatch_request rv = self.handle_user_exception(e) File "c:\Python27\lib\site-packages\flask\app.py", line 1358, in full_dispatch_request rv = self.dispatch_request() File "c:\Python27\lib\site-packages\flask\app.py", line 1344, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "G:\OverAir\arduino\server.py", line 19, in light_off board.output([pin]) File "G:\OverAir\arduino\arduino.py", line 16, in output self.__sendData(len(pinArray)) File "G:\OverAir\arduino\arduino.py", line 56, in __sendData while(self.__getData()[0] != "w"): File "G:\OverAir\arduino\arduino.py", line 61, in __getData return self.serial.readline().rstrip('\n') File "c:\Python27\lib\site-packages\serial\serialwin32.py", line 221, in read if not self.hComPort: raise portNotOpenError ValueError: Attempting to use a port that is not open
更新
下面@Blender的代码可能是正确的。现在我遇到的问题是,我收到了“SerialException: 无法打开端口 COM5: [错误 5] 访问被拒绝。”
不过,如果我单独运行我的原始脚本 on.py 或 off.py,都是可以正常工作的……我不明白为什么新代码不行……难道它尝试打开 COM5 两次吗??
更新结束
我正在尝试使用 Flask 运行多个 Python 函数,或者分开的 .py 脚本,以生成不同的 URL。只是想在本地控制 Arduino 的开关。
例如,我有 on.py 和 off.py,想要构建一个 server.py。所以,当我打开 127.0.0.1:5000/on 时,它会运行 on.py,类似地,127.0.0.1:5000/off 会运行 off.py。
经过几个小时的尝试,我决定把这两个 .py 函数都放进 server.py,但当然它并没有工作……我想我只是对参数的使用不太理解。
非常感谢你的帮助!
## Open a serial connection with Arduino.
from time import sleep
from arduino import Arduino
from flask import Flask
b = Arduino("COM5",9600)
pin = 13
num = 5
ON = Flask("Light_ON")
OFF = Flask("Light_OFF")
def LightON():
#declare output pins as a list/tuple
b.output([pin])
b.setHigh(pin)
b.close()
return 'Light is ON'
def LightOFF():
#declare output pins as a list/tuple
b.output([pin])
b.setLow(pin)
return 'Light is OFF'
@ON.route('/ON')
@OFF.route('/OFF')
ON.run()
OFF.run() //I know this doesn't run, just not sure how to include it.
1 个回答
0
像这样应该可以工作:
from arduino import Arduino
from flask import Flask
app = Flask('light_control')
board = Arduino('COM5', 9600)
pin = 13
@app.route('/on')
def light_on():
board.output([pin])
board.setHigh(pin)
board.close()
return 'Light is ON'
@app.route('/off')
def light_off():
board.output([pin])
board.setLow(pin)
# board.close() ???
return 'Light is OFF'
if __name__ == '__main__':
app.debug = True
app.run()