Pyserialを使用してArduinoからのシリアル出力を表示するWebインターフェイスを作成しようとしています。私はHTML文字列を更新するためにAjax($ .getJSON)を使用しています。Flaskの.getJSONでリクエストしたときに一度だけコマンドを実行する
私の今の問題は、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);});
は、私は私の小さなWebインターフェイスを作ることを学ぶしようとしているとStackOverflowのは、私には大きな助けとなっています。私はこの問題を捜索して解決しようと努力しましたが、今はそれを手に入れる価値があると思います。 ありがとうございました!
編集:私はそれは私が今のやりたい作ってそれを少しハッキングしている
。 しかし、serial.Serial
行を実行する前に、ユーザーからポート値を取得するためにフォームを使用する予定です。私はまだsession/global variable
を見ています。たぶん、あなたはそれを毎回開く必要はありません(あなたが複数のプロセスベースの労働者を使用する場合、これは問題になる可能性がありますが)グローバル変数としてser
を保つだけseek
または何が入るために必要とされる
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)
OK!問題ない。申し訳ありませんが、まだコミュニティにはかなり新しいです。 –
素晴らしい!ありがとう。 – halfer