반응형
이번 주제는 flask로 웹서버를 동작시키면서 동시에 serial 통신으로 아두이노로 부터 값을 계속 받아오고 싶었다.
처음에 사용한것은 thread 모듈이었는데 웹서버와 같이 thread를 돌리는 방법은 시도하다가 잘안되서 포기하였다.
그렇게 찾은 것이 flask의 Response 함수 였다. Reponse는 말그대로 실시간 (on the fly)로 데이터를 처리해주는 것이다.
아래 링크를 통해 공부하였다.
https://flask.palletsprojects.com/en/1.1.x/patterns/streaming/
내가 작성한 코드를 보고 이해해보도록 하자.
코드>>
from flask import Flask
from flask import request
from flask import render_template
from flask import Response
# from threading import Thread
import serial
web_gui = Flask(__name__)
def serial_start():
ser = serial.Serial('com18', 115200)
stop_flag = False
while not stop_flag:
if ser.readable():
res = ser.readline()
res_decode = res.decode()
print(res_decode)
@web_gui.route('/')
def hello_fnc():
Response(serial_start())
return 'Hello'
@web_gui.route("/page", methods = ["GET", "POST"])
def page_fnc():
if request.method == "POST":
return 'POST received'
else:
return render_template("page.html")
web_gui.run(debug=True, port=9999)
주석>>
serial_start 함수는 Response에서 계속 응답해주는 것이다.
http://localhost:9999/ 에 접속하자마자 serial_start 함수가 동작하면서 아두이노에서 보낸 값들이 아래 그림처럼 print 되기 시작했다.
값들이 지속적으로 올라오는 와중에 http://localhost:9999/page 접속도 아래 그림처럼 문제 없이 되었다.
반응형
'파이썬(Python) > 웹서버' 카테고리의 다른 글
serial 통신으로 받은 값 DB에 저장하기 (8) | 2020.12.18 |
---|---|
mongodb 두개의 프로그램으로 쓰면서 읽기 (0) | 2020.12.17 |
post form 으로 보낸 데이터 mongodb에 저장하기 (0) | 2020.12.14 |
virtualenv 가상환경 만들기 (0) | 2020.12.14 |
MongoDB 기본 명령어 모음, 파이썬 (0) | 2020.12.11 |