シリアルポートを使用してArduinoに接続するPythonプログラムがあります。実行を遅くすることなくリアルタイムでデータをプロットしたいので、私はマルチプロセッシングを試みます。しかし、私はエラーが発生しましたシリアルポートWindowsError(5、 'アクセスが拒否されました。')マルチプロセスで
serial.serialutil.SerialException: could not open port 'COM6': WindowsError(5, 'Access is denied.') # COM6 is the port connected to Arduino
驚いたことに、Arduino間の接続は、マルチプロセッシングの機能が動作していない間はまだ生きています。私のコードは次のようになります。
class ArduinoThread(threading.Thread):
def __init__(self, portnum):
threading.Thread.__init__(self)
self.setName("Arduino")
self.Arduino = serial.Serial(port="COM"+str(portnum), baudrate=19200)
def run(self):
# some function
def MyPlot_realtime(DATA):
while True:
data = DATA.get(False)
plt.plot(data)
UNO = ArduinoThread(6)
UNO.start()
plt.ion()
pltQ = multiprocessing.Queue()
pltP = multiprocessing.Process(target=MyPlot_realtime, args=(pltQ,))
pltP.start()
while True:
# some calculation on data
UNO.update(data)
if pltQ.empty():
pltQ.put(data)
簡単に言えば、コードはうまく動作します。 MyPlt_realtime
がまったく動作していないのに、マルチプロセッシングがあるのに、エラーが出ていますが、UNO.update(data)
はまだ動作しています。
(私のコードはかなりので、私は、私は別のデバイスを接続するために別のシリアルポートを使用しています。それを簡素化。私もTkinterのを使用しています複雑になる。問題は、これらの部分から来なかったホープ)