1

私の質問は、Arduino Uno がソケットを介して別のクライアント アプリにデータを通信することに関連しています。[Jeopardy! 風のゲーム フロントエンドと通信するブザー システム] 目標は、「ロックアウト」イベントを発生させることです。

現在、Arduino は独自のスレッドで実行されており、Flask-SocketIO サーバーがメイン プロセスとして実行されています。「Emitting Socket」という print ステートメントを含むすべてのコードは機能しますが、ソケット データを後で放出する行は除きます。

これは単なるマルチスレッドの問題だと思いますが、マルチスレッドに関する私の経験は最小限です。

提案?

# 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