1

我的问题与让 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)
4

1 回答 1

0

您在此处发出“锁定”消息:

def doEmit(pNo):
    print("Emitting Socket")
    socketio.emit('lockout', {'playerNo': 1})

我看不到您在哪里提供接收此发出代码的功能。也许通过适当的调整添加这样的东西:

@socketio.on("lockout")
def on_lockout(data):
    print("-------Lockout Player", data['playerNo'] , "-------")
于 2016-03-09T17:22:33.620 回答