我正在尝试制作一个 Web 界面,使用 Pyserial 显示 Arduino 的串行输出。我正在使用 Ajax ($.getJSON) 来更新我的 HTML 字符串。
我现在遇到的问题是,每次我请求 JSON 数据时,它也会初始化我的 ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
,这使得查询速度慢并禁止串行输出的实时更新。
我的代码如下:
我尽力只执行 serial.Serial()
一次。
@app.before_request
def before_request():
g.status = False
@app.route('/')
def template():
return render_template('index.html')
@app.route('/result')
def serial_monitor():
#connect to serial port for once
if g.status == False:
ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
g.status = True
result = str(ser.readline())
voltage = {'value':result}
else:
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
我的 JavaScript:
我正在使用 setInterval
自动重复它。
$.getJSON($SCRIPT_ROOT + '/result', function(data)
{$('#voltage').text(data.value);});
我一直在努力学习制作我的小网络界面,Stackoverflow 给了我很大的帮助。我已经搜索并努力解决这个问题,但我认为现在值得伸出援手。 提前谢谢大家!!
<小时/>编辑:
我对它进行了一些修改,让它做我现在想做的事情。
但是,我计划在运行 serial.Serial
行之前使用表单从用户获取端口值。我仍在查看 session /全局变量
路线。
global ser
ser = serial.Serial('port',9600)
@app.route('/')
def template():
return render_template('index.html')
@app.route('/result')
def serial_monitor():
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
最佳答案
以下是我找到的解决方案。
通过正确设置全局变量状态(在函数内部),我现在可以只运行一次任何代码。
@app.route('/')
def template():
return render_template('index.html')
status = False
@app.route('/result')
def serial_monitor():
global status
#connect to serial port for once
if status== False:
ser = serial.Serial('/dev/cu.wchusbserialfa140',9600)
status = True
result = str(ser.readline())
voltage = {'value':result}
return jsonify(voltage)
关于javascript - 在 Flask 中使用 .getJSON 请求时仅运行一次命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092591/