2011-11-28 210 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'無法訪問端口。 –