2011-11-28 192 views
3

我正试图用Python编写一个程序,它将循环检查串口(COM4),并在从串口读取字符“1”时打印出一条消息。我想通过一个按钮从Arduino小工具的串口发送“1”。PySerial [错误5]访问被拒绝

但是,当我尝试创建串行对象的实例时,出现错误“[Error 5]:Access is Denied”。 (它会自动尝试在实例打开,这是错误所在,从我可以从在处理这个PySerial包中的文件中看到。)

我的代码:

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

它永远不会。过去的“C = serial.Serial(‘COM4’,9600),虽然这就是错误弹出我怎样才能解决这个

+0

您可以添加错误消息的完整调用堆栈吗? –

+0

检查其他进程是否正在使用com端口。 –

回答

5

更新:?这显然是不可能再在PySerial 3.0

在Windows下,我一直使用port = <t>方法成功。

I.e.更改您的代码:

c = serial.Serial(3, 9600) 
+0

哇,这个作品!非常感谢!为什么这个工作呢?数字3如何表示'COM4'? – TomKo

+0

端口参数可以是字符串或数字。在Windows下的数字时,它是基于零的COM端口。所以,0是COM1,3是COM4。可能“COM4:”也可以,但我从来没有尝试过。 –

+0

那么,http://stackoverflow.com/questions/5602349/problem-reading-data-from-serial-port-com3-using-pyserial-module-on-windows-xp意味着“COM4”应该工作。谷歌搜索使用虚拟串行端口的名称来解决潜在的问题。我猜port = 适用于这些命名问题。 –

1

对于Python 2.6使用从零开始的COM端口索引。对于Python 2.7.x,您可以使用全名“COM4”。根据我的经验,最好使用2.7版本。安装Python 2.7.xSetup Tools (aka Easy Install)。一旦你有了这个,通过输入easy_install -U pyserial安装pyserial模块(见pyserial installation doc)。

记得要将python路径添加到PATH环境变量中。

0

与COM端口N-1在Python (N是你的COM人数)

0

请小心使用Python版本。

从pyserial手册约:类serial.Serial https://pyserial.readthedocs.io/en/latest/pyserial_api.html#classes

...........

该端口上立即对象创建打开,当给出的端口。它在端口为None时不会打开,并且需要连续调用open()。

端口是设备名称:取决于操作系统。例如GNU/Linux上的/ dev/ttyUSB0或Windows上的COM3。

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

改变在3.0版本:数字作为端口参数不再支持

1

对我来说,解决没有工作,但什么工作被关闭与给定com端口交互的所有应用程序。

+0

好的答案IMO:在为Arduino开发时,Arduino IDE运行相当普遍,但这会导致'serial'无法访问端口。 –