Не удается связаться с ардуино с помощью 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)
@Severus, 👍4
Обсуждение5 ответов
Причин может быть несколько, как указано в этих вопросах:
- https://stackoverflow.com/questions/6032568/using-serial-on-python-win7
- https://stackoverflow.com/questions/6105182/error-while-opening-port-in-python
Они включают в себя:
- порт уже используется другим приложением
- разрешения установлены так, чтобы запрещать доступ обычным пользователям
- проблемы в коде (верхний ответ в первой ссылке)
Попробуйте выполнить запуск с правами администратора ("запуск от имени администратора"). Другие утверждают, что простая повторная попытка может помочь.
Скорее всего, вы запустили программу Arduino из Arduino IDE и оставили окно терминала открытым. Вы должны закрыть его перед запуском программы Python, так как он уже будет "владеть" портом до тех пор, пока не закроется. Вам не нужно выходить из Arduino IDE, просто закройте окно терминала.
Не уверен, что означало "окно терминала" user6569, но закрытие окна последовательного монитора из моей Arduino IDE помогло., @Anton Daneyko
Либо запустите свою программу на python в "режиме администратора", либо закройте любые другие программы, используя порт, предназначенный для
Вы случайно не пользуетесь Jupyter Notebok? Сегодня у меня была аналогичная ошибка, и мне удалось решить ее, открыв Jupyter Notebook через Anaconda Navigator вместо того, чтобы открывать его через Anaconda Prompt.
вы должны использовать этот код
>>> import serial
>>> ser.close() # close port
Пожалуйста, добавьте подробную информацию о том, как это решает проблему, которую задает ОП., @sa_leinad
- Последовательная связь Arduino с Python: отправка массива
- Построение графика на Python с использованием Tkinter Canvas
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Сброс последовательного порта Arduino в последовательном мониторе и Python
- Отправка числа с плавающей запятой из python в arduino
- Serial Comm. проблема синхронизации между Arduino и Pyserial
- Связь между Python и Arduino ненадежна
- Последовательная связь между python и arduino
После того, как вы выясните, почему вы получаете эту ошибку (на основе ответов ниже), в вашем коде Python есть еще одна потенциальная проблема - при открытии последовательного порта Arduino сбрасывается, поэтому все, что отправляется сразу после подключения, не попадет в ваш скетч. Использование задержки после подключения поможет, @rslite