python - pyserial reading serial port and show on web page in flask -
i want read , write data serial port pyserial
in flask
. want through web page. codes 1 below. writing data on web page without problems, can not read data, runtime error during reading. how can implement solution?
i'm trying ways read data serial port. not know best way me. best way me display data serial port user connected web page?
i received error:
0 def serial runtime error exception in thread thread-1: traceback (most recent call last): file "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner self.run() file "/usr/lib/python2.7/threading.py", line 505, in run self.__target(*self.__args, **self.__kwargs) file "__init__.py", line 46, in serialread return jsonify(result='serial runtime error') file "/usr/local/lib/python2.7/dist-packages/flask/json.py", line 251, in jsonify if current_app.config['jsonify_prettyprint_regular'] , not request.is_xhr: file "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 347, in __getattr__ return getattr(self._get_current_object(), name) file "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 306, in _get_current_object return self.__local() file "/usr/local/lib/python2.7/dist-packages/flask/globals.py", line 51, in _find_app raise runtimeerror(_app_ctx_err_msg) runtimeerror: working outside of application context. typically means attempted use functionality needed interface current application object in way. solve set application context app.app_context(). see documentation more information.
python code:
app = flask(__name__) app.secret_key = "asds" @app.route('/run_write', methods=["get","post"]) def serialwrite(): print "click" message="selam zafer" if request.method == "post": attempted_writedata = request.form['writedata'] message=attempted_writedata try: if seri.isopen(): print "serial open!" seri.write(message) session['serial_write'] = true flash(message+" mesajiniz gonderildi..",'write') return redirect(url_for("usart")) except exception e: session['serial_write'] = false flash(message+" mesajiniz gonderilemedi...",'write') return redirect(url_for("usart")) def serialread(): data ="" # seri = serial.serial(port = "/dev/ttyo1", baudrate=9600) seri.close() seri.open() while 1: if seri.isopen(): try: # seri.write("hello") data=seri.read() print data if data: #flash(data,'read') return jsonify(result=data) except runtimeerror: print 'def serial runtime error' return jsonify(result='serial runtime error') seri.close() except keyboardinterrupt: print 'def serial klavye hatasi' seri.close() @app.route('/background_process') def background_process(): try: print 'background ' threadserial = thread(target=serialread) # threadserial.daemon = true threadserial.start() return jsonify(result='serial runtime error') except exception e: flash(e) @app.route('/') def homepage(): try: return render_template("pages/beagle.html") except exception e: flash(e) @app.route('/usart/',methods=["get","post"]) def usart(): #return ("hi") if not seri.isopen(): flash("seri baglanti kurulamadi",'connect') session['serial_con'] = false else: flash("seri baglati basarili",'connect') session['serial_con'] = true return render_template("pages/usart.html") if __name__ == "__main__": uart.setup("uart1") seri = serial.serial(port = "/dev/ttyo1", baudrate=9600) seri.close() seri.open() try: app.run(host='0.0.0.0', port=8082) except serialexception e: pass
and web page code
{% extends "pages/beagle.html" %} {% block body %} <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type=text/javascript> $(function() { $('a#process_input').bind('click', function() { $.getjson('/background_process', function(data) { $("#result").text(data.result); }); return false; }); }); </script> </head> <body class="body"> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">beaglebone communation</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> usart data </div> <div class="panel-body"> <div class="row"> <div class="col-lg-6"> <div class="panel panel-default"> <div class="panel-heading"> read data beaglebone </div> <div class="panel-body"> <label>send data input</label> <form class="form-signin" action="/run_write" method="post" role="form"> <input name="writedata" class="form-control"> <p class="help-block">writing data via usart on beaglebone.</p> <button type="submit" class="btn btn-primary btn-lg btn-block">send button</button> {% messages= get_flashed_messages(category_filter=["write"]) %} {% if messages %} {% message in messages %} {% if session.serial_write %} <div class="alert alert-success alert-dismissible pull-right" role="alert" style="position: relative;"> <button type="button" class="close" data-dismiss="alert" aria-label="close"<span aria-hidden="true">×</span></button> {% else %} <div class="alert alert-danger alert-dismissible pull-right" role="alert" style="position: relative;"> <button type="button" class="close" data-dismiss="alert" aria-label="close"<span aria-hidden="true">×</span></button> {% endif %} {{message}} </div> {%endfor%} {% endif %} {% endwith %} </form> </div> <!-- <button type="reset" class="btn btn-default">reset button</button> --> </div> </div> <!-- /.col-lg-6 (nested) --> <div class="col-lg-6"> <div class="panel panel-default"> <div class="panel-heading"> read data beaglebone </div> <div class="panel-body"> <!-- <h2>heading 2 --> <!-- <small>sub-heading</small> --> <!-- </h2> --> <h3>value read: <form> <small id= result name=proglang></small> <a href='#' id=process_input> <button type="submit" class="btn btn-primary btn-lg btn-block">start read </button></a> </form> </h3> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> </div> <!-- /.col-lg-6 (nested) --> </div> <!-- /.row (nested) --> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </body> {% endblock %}
thank much
Comments
Post a Comment