Скрипт Python не может подключиться к последовательному порту
Я хочу управлять светодиодами рукой, для этого я использовал репозиторий https://github.com/paveldat /finger_counter/tree/main. Хочу управлять светодиодами рукой, для этого воспользовался репозиторием. Для подключения к последовательному порту Arduino Mega я использую библиотеку pyserial, вот код, которому я передаю переменные.
arduinoData = serial.Serial("com9", 9600)
arduinoData.write(bytes(str(variable), "utf-8"))
для управления светодиодами и обработки данных из последовательного порта я написал в Arduino IDE следующий код:
void setup() {
Serial.begin(9600);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
/*
if (Serial.available() > 0){
serialData = Serial.read();
for (int i = 3; i<serialData; i++){
digitalWrite(i, HIGH);
}
}
*/
if (Serial.available() > 0){
char serialData = Serial.read();
if (serialData == '3'){
digitalWrite(3, HIGH);
}
else if (serialData == '4'){
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
else if (serialData == '5'){
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
}
else if (serialData == '6'){
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}
else if (serialData == '7'){
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
}
else if (serialData == '0'){
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
//Serial.println(serialData);
//digitalWrite(serialData, HIGH);
//задержка(1000);
}
}
Когда я запускаю этот код без подключения камеры и просто передаю значения в последовательный порт, то все работает. Однако когда я пытаюсь запустить этот код вместе с камерой, возникает следующая ошибка:
serial.serialutil.SerialException: could not open port 'com9': PermissionError(13, 'Access denied.', None, 5)
Камера представляет собой веб-камеру ноутбука. Я не проверял код с USB-камерой, предполагается, что USB-камера не будет занимать все последовательные порты.
@Дмитрий Насонов, 👍0
Обсуждение1 ответ
Лучший ответ:
Проблема с доступом к порту решена, он был занят, так как я каждый раз пытался его открыть в цикле приема изображения и вывода его на экран. Вынул код цикла, но светодиоды не запустились. вот обновленный код:
import cv2
import time
import os
import serial
import HandTrackingModule as htm
wCam, hCam = 640, 480
cap = cv2.VideoCapture(0)
cap.set(3, wCam)
cap.set(4, hCam)
folderPath = "fingers" # name of the folder, where there are images of fingers
fingerList = os.listdir(folderPath) # list of image titles in 'fingers' folder
overlayList = []
for imgPath in fingerList:
image = cv2.imread(f'{folderPath}/{imgPath}')
overlayList.append(image)
pTime = 0
detector = htm.handDetector(detectionCon=0.75)
totalFingers = 0
def arduino_write(totalFingers):
arduinoData = serial.Serial("com9", 9600)
arduinoData.write(bytes(str(totalFingers+2)+"\n", "utf-8"))
arduinoData.close()
while True:
sucess, img = cap.read()
img = cv2.flip(img, 1)
img = detector.findHands(img)
lmList, bbox = detector.findPosition(img, draw=False)
if lmList:
fingersUp = detector.fingersUp()
totalFingers = fingersUp.count(1)
h, w, c = overlayList[totalFingers].shape
img[0:h, 0:w] = overlayList[totalFingers]
cTime = time.time()
fps = 1/ (cTime-pTime)
pTime = cTime
cv2.putText(img, f'FPS: {int(fps)}', (400, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 3)
cv2.rectangle(img, (20, 225), (170, 425), (0, 255, 0), cv2.FILLED)
cv2.putText(img, str(totalFingers), (45, 375), cv2.FONT_HERSHEY_PLAIN, 10, (255, 0, 0), 25)
arduino_write(totalFingers)
cv2.imshow("Image", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- Распаковка бинарных данных Arduino на скетче Python
- Отправка значений с плавающей запятой из Python в Arduino с использованием последовательной связи
- Отладка различного поведения последовательного приема/отправки между Uno и Mega
- Как разделить входящую строку?
- Не удается связаться с ардуино с помощью python (Windows)
- Какова максимальная длина провода для последовательной связи между двумя Arduino?
- Последовательная связь Arduino с Python: отправка массива
- Построение графика на Python с использованием Tkinter Canvas
Какую операционную систему вы используете? Вы уверены, что «com9» — правильный порт, особенно когда подключена камера? (поскольку это может измениться) Можете ли вы подключить камеру, а затем открыть порт в Arduino IDE?, @chrisl
Существует вероятность того, что вы _также_ открыли последовательный монитор Arduino IDE при подключении USB-камеры. Это может показаться несвязанным, но последовательный монитор блокирует использование COM-порта другими программами во время его работы., @orithena
когда я тестировал код, моя IDE была практически закрыта @orthena, @Дмитрий Насонов
Я использую windows 10 при включении камеры в диспетчере устройств, а также до того, как COM9 будет занят ардуино мега @chrisl, @Дмитрий Насонов
Если с одной частью все работает нормально, а с другой нет, возможно, обе части пытаются использовать одни и те же ресурсы, или ваш старый запуск все еще использует порт и не был уничтожен. Завершите свой кусок Python вызовом выхода или просто
del arduinoData
, @Abel