Не удается связаться с ардуино с помощью python (Windows)

Я новичок в программировании и пытаюсь взаимодействовать с arduino с помощью python через последовательную связь. Использую следующий код:

Код Arduino:

int ledPin = 11;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin,OUTPUT);
}

void loop() {
  digitalWrite(ledPin,LOW);
    if (Serial.read() == 'M'){
      digitalWrite(ledPin,HIGH);}
}

Код на Python:

import imaplib
import serial
ser = serial.Serial("COM3",9600)
ser.write(b'T')
ser.close()

Я получаю следующую ошибку при запуске скрипта python:

serial.serialutil.SerialException: could not open port 'COM3': PermissionError(13, 'Access is denied.', None, 5)

, 👍4

Обсуждение

После того, как вы выясните, почему вы получаете эту ошибку (на основе ответов ниже), в вашем коде Python есть еще одна потенциальная проблема - при открытии последовательного порта Arduino сбрасывается, поэтому все, что отправляется сразу после подключения, не попадет в ваш скетч. Использование задержки после подключения поможет, @rslite


5 ответов


1

Причин может быть несколько, как указано в этих вопросах:

  • https://stackoverflow.com/questions/6032568/using-serial-on-python-win7
  • https://stackoverflow.com/questions/6105182/error-while-opening-port-in-python

Они включают в себя:

  • порт уже используется другим приложением
  • разрешения установлены так, чтобы запрещать доступ обычным пользователям
  • проблемы в коде (верхний ответ в первой ссылке)

Попробуйте выполнить запуск с правами администратора ("запуск от имени администратора"). Другие утверждают, что простая повторная попытка может помочь.

,

8

Скорее всего, вы запустили программу Arduino из Arduino IDE и оставили окно терминала открытым. Вы должны закрыть его перед запуском программы Python, так как он уже будет "владеть" портом до тех пор, пока не закроется. Вам не нужно выходить из Arduino IDE, просто закройте окно терминала.

,

Не уверен, что означало "окно терминала" user6569, но закрытие окна последовательного монитора из моей Arduino IDE помогло., @Anton Daneyko


1

Либо запустите свою программу на python в "режиме администратора", либо закройте любые другие программы, используя порт, предназначенный для

,

1

Вы случайно не пользуетесь Jupyter Notebok? Сегодня у меня была аналогичная ошибка, и мне удалось решить ее, открыв Jupyter Notebook через Anaconda Navigator вместо того, чтобы открывать его через Anaconda Prompt.

,

1

вы должны использовать этот код

>>> import serial
>>> ser.close()             # close port
,

Пожалуйста, добавьте подробную информацию о том, как это решает проблему, которую задает ОП., @sa_leinad