我的问题与让 Arduino Uno 通过套接字将数据通信到另一个客户端应用程序有关。[与 Jeopardy!-esque 游戏前端通信的蜂鸣器系统] 目标是发出“锁定”事件。
目前,Arduino 运行在自己的线程上,Flask-SocketIO 服务器作为主进程运行。所有代码都有效,包括打印语句“Emitting Socket”,除了之后发出套接字数据的行。
我觉得这只是一个多线程问题,但我对多线程的经验很少。
建议?
# https://pymotw.com/2/threading/
# https://flask-socketio.readthedocs.org/en/latest/
import serial, time, threading
from flask import Flask, render_template
from flask_socketio import SocketIO
ser = serial.Serial('/dev/tty.usbmodem3d11', 9600, dsrdtr=1)
PORT = 3000
# Needed b/c Macs & DTR
time.sleep(5)
def getSerialData():
while True:
stuff = str(ser.readline().decode("utf-8"))
doEmit(1)
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
def doEmit(pNo):
print("Emitting Socket")
socketio.emit('lockout', {'playerNo': 1})
serialThread = threading.Thread(name='serialThread', target=getSerialData)
serialThread.start()
@socketio.on("questionRead")
def on_questionRead(data):
print("-------Start-------")
ser.write(b'y\r')
@socketio.on("resetLockout")
def on_resetLockout(data):
resetLockout()
def resetLockout():
print("--------Reset--------")
ser.write(b'n\r')
if __name__ == '__main__':
socketio.run(app, '127.0.0.1', PORT)