我正在尝试制作一个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 variable
路线。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/