4

I am new to programming and am trying to communicate with my arduino using python through serial communication. I am using the following code:

Arduino code:

int ledPin = 11;

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

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

Python code:

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

I get the following error on running the python script:

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

1
  • 1
    After you figure out why you get that error (based on the answers below) there is another potential problem in your python code - when opening the serial port the Arduino will reset, so anything sent immediately after connection will not get to your sketch. Using a delay after connection will help
    – rslite
    Apr 19, 2015 at 3:54

5 Answers 5

8

More than likely you ran the Arduino program from the Arduino IDE, and left the terminal window open. You must close it before you run the python program, as it will already 'own' the port until it closes. You dont have to quit Arduino IDE, just close the terminal window.

1
  • Not sure what 'terminal window' user6569 meant, but closing the Serial Monitor window from my Arduino IDE did help. Jan 27, 2020 at 18:33
1

There can be several reasons as highlighted in these questions:

They include:

  • port is already in use by another application
  • permissions are set to deny access to normal users
  • problems in the code (top answer in first link)

Try to run with administrator priviledges ("run as administrator"). Others claim that a simple retry might help.

1

Either run your python program in "administrator mode" or close any other programs using the port intended for

1

Are you by any chance using Jupyter Notebok? I was having a similar error today and managed to solve it by opening Jupyter Notebook through Anaconda Navigator instead of opening it through Anaconda Prompt.

1

you must use this code

>>> import serial
>>> ser.close()             # close port
1
  • Please add detail on how this solves the problem the OP is asking.
    – sa_leinad
    Nov 9, 2020 at 12:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.