串行通信、FlaskSocketIO和Python多线程处理

2024-10-05 14:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是让Arduino Uno通过一个套接字与另一个客户端应用程序通信数据。[一个蜂鸣器系统与危险区通讯!-风格游戏前端]目标是让“锁定”事件发射。在

目前,Arduino在自己的线程上运行,Flask SocketIO服务器作为主进程运行。所有代码都正常工作,包括打印语句“emittingsocket”,除了后面发出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)

Tags: nameimportappflaskondefarduinoser
1条回答
网友
1楼 · 发布于 2024-10-05 14:21:21

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

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

我看不出您在哪里提供函数来接收发出的代码。或许在适当的调整下加入这样的内容:

^{pr2}$

相关问题 更多 >