TomKo
TomKo

Reputation: 129

PySerial [Error 5] Access is Denied

I am trying to write a program in Python that will loop to keep checking the serial port (COM4) and print out a message when the character "1" is read from the serial port. I want to send "1" over the serial port from an Arduino gadget upon the push of a button.

However, I get the error "[Error 5]: Access is Denied" when I try to create an instance of a serial object. (It automatically tries to open upon instantiation, which is where the error is, from what I can see from the file in the PySerial package that handles this.)

My code:

c = serial.Serial('COM4', 9600)
while True:
    signal = c.read()
    print signal
    print "running"
    time.sleep(2)
    c.flushOutput()

It never gets past the "c = serial.Serial('COM4', 9600), though. That's where the error pops up. How can I fix this?

Upvotes: 9

Views: 44778

Answers (7)

SoftwareEngineer
SoftwareEngineer

Reputation: 437

    At one time, there is only an application that can access one com port. If application A is accessing this com port, application B can not access it. You should do these following steps as below:
    1. Find the application that is accessing this port and then close the connection.
    2. Reconnect your application to this port. You can use the below source code.
    
     port='COM8',
 baudrate = 2400,
 parity=serial.PARITY_EVEN,
 stopbits=serial.STOPBITS_ONE,
 bytesize=serial.SEVENBITS,
 timeout=None
)

while 1:
 x = ser.readline()
 print(x)

Upvotes: 0

Seongjoon Park
Seongjoon Park

Reputation: 89

Close your serial monitor, opened from Arduino IDE.

Upvotes: 2

Lucas B
Lucas B

Reputation: 348

For me the solution didn't work but what worked was closing all the applications that were interacting with the given com port.

Upvotes: 9

David K. Hess
David K. Hess

Reputation: 17246

UPDATE: This is apparently no longer possible in PySerial 3.0.

Under Windows, I've always used the port=<int> approach with success.

I.e. change your code to:

c = serial.Serial(3, 9600)

Upvotes: 3

Dhomo
Dhomo

Reputation: 61

Please, take care with the python versions.

From the pyserial manual about: class serial.Serial https://pyserial.readthedocs.io/en/latest/pyserial_api.html#classes

...........

The port is immediately opened on object creation, when a port is given. It is not opened when port is None and a successive call to open() is required.

port is a device name: depending on operating system. e.g. /dev/ttyUSB0 on GNU/Linux or COM3 on Windows.

............

Changed in version 3.0: numbers as port argument are no longer supported

Upvotes: 2

that works with PORT COM N-1 in python (N is your number of COM)

Upvotes: 1

Jakub Czaplicki
Jakub Czaplicki

Reputation: 1847

For Python 2.6 use the zero-based COM port index. For Python 2.7.x you can use the full name "COM4". From my experience it's better to use the 2.7 version. Install Python 2.7.x and Setup Tools (aka Easy Install). Once you've got this, install pyserial module by typing easy_install -U pyserial (see pyserial installation doc).

Remember to add python path to PATH environmental variable.

Upvotes: 1

Related Questions