一、环境安装:
pip3 install flask
pip3 install flask_socketio
pip3 install pyserial
二、演示效果
三、源码
后台源码
import time
import psutil
from threading import Lock
from flask import Flask, render_template
from flask_socketio import SocketIO
async_mode = None
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, async_mode=async_mode)
thread = None
thread_lock = Lock()
import serial
portx = "COM2"
bps = 9600
timex = 5
ser = serial.Serial(portx, int(bps), timeout=1, parity=serial.PARITY_NONE, stopbits=1)
def background_thread():
if (ser.isOpen()):
count = 0
ming = 'no'
while True:
socketio.sleep(5)
line = ser.readline()
if line:
ming = line.decode()
print(line.decode())
line = 0
else:
ming = 'no'
count += 1
socketio.emit('server_response',
{'data': [ming, count], 'count': count},
namespace='/test')
# 注意:这里不需要客户端连接的上下文,默认 broadcast = True
@app.route('/')
def index():
return render_template('index1.html', async_mode=socketio.async_mode)
@socketio.on('connect', namespace='/test')
def test_connect():
global thread
with thread_lock:
if thread is None:
thread = socketio.start_background_task(target=background_thread)
if __name__ == '__main__':
socketio.run(app, debug=True)
前端界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>串口控制视频</title>
<script type="text/javascript" src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript" src="//cdn.bootcss.com/socket.io/1.5.1/socket.io.min.js"></script>
<!-- ECharts 3 引入 -->
<script src="http://echarts.baidu.com/dist/echarts.min.js"></script>
</head>
<body>
<div>
<video src="http://39.108.68.180:8080/examples/cooks/2019002牛肉羹.mp4"
id="myVideo" controls="controls" autoplay="autoplay" height="480" width="800">
</video>
</div>
<div>
<button onclick="playVid()" type="button">播放视频</button>
<button onclick="pauseVid()" type="button">暂停视频</button>
<h2 id="t"></h2>
<h2 id="t1"></h2>
</div>
<script type="text/javascript">
var x = document.getElementById("myVideo");
function playVid(){
x.play();
}
function pauseVid(){
x.pause();
}
var update_video = function (res) {
var x = document.getElementById("myVideo");
var t = res.data[1];
var t1 = res.data[0];
if(t1=='stop'){
x.pause();
}
else if(t1 == 'play'){
x.play();
}
$("#t1").text(t1);
$("#t").text(t);
}
// 建立socket连接,等待服务器“推送”数据
$(document).ready(function() {
namespace = '/test';
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
socket.on('server_response', function(res) {
update_video(res);
});
});
</script>
</body>
</html>