У меня есть программа python, использующая последовательный порт для подключения к Arduino. Я хочу построить некоторые данные в реальном времени, не замедляя выполнение, поэтому я стараюсь многопроцессорствовать. Тем не менее, я получил ошибкуПоследовательный порт 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)
Просто комментируя многопроцессорную часть, код может работать хорошо. Ошибка выдается при многопроцессорной обработке, но UNO.update(data)
все еще работает, а MyPlt_realtime
вообще не работает.
(Мой код довольно сложно, поэтому я упростил. Я использую другой последовательный порт для подключения другого устройства. Я использую Tkinter, как хорошо. Надеюсь, что проблема не из той части)