2010-02-20 76 views
5

我有一個非常簡單的python腳本,它使用pySerial通過串口將數據發送到我的Arduino。當我在python shell中逐行執行時,它工作得很好,但是當我把它放在一個「.py」文件中,然後嘗試運行它時,沒有任何反應。儘管我的UART上的串行燈閃爍。所以有些東西正在通過,但它是垃圾(我檢查)。PySerial應用程序在shell中運行,不是py腳本

這是簡單的代碼。

import serial 

ser = serial.Serial('COM3',9600,timeout=.2) 
ser.write('A') 
ser.close() 

我已經嘗試添加睡覺,但似乎沒有任何修復它。有任何想法嗎?

+0

您是否嘗試過版畫,以及睡覺,就證明了這代碼實際執行?另外,你怎麼定義「沒有發生」?這是基於觀察你的Arduino嗎? 「A」角色應該做什麼? – 2010-02-20 15:21:01

+1

我已經添加了打印件,而且實際上正在執行。當arduino收到「A」時,它應該開始閃爍LED。當我手動執行此操作時,該行爲可以正常工作,但在嘗試運行腳本時不行。 – 2010-02-20 17:58:59

+0

所以沒有人知道如何解決這個問題? – 2010-02-21 22:28:38

回答

7

好吧,我已經想通了!

因此有必要在執行寫入之前,使用這樣的代碼:

time.sleep(1) 
ser.setDTR(level=0) 
time.sleep(1) 

否則,Arduino的自動接收後因某種原因串行連接重置。好極了!

+1

復位是編程arduino所必需的。如果需要,您可以修改您的arduino以不重置串行連接。 – Dustin 2010-02-25 19:16:26

0

也許是愚蠢的,但只要在Windows上嘗試在cmd.exe中輸入「myscript.py」即可。我注意到,在Windows上,你不需要在腳本名稱前輸入「python」。這當然適用於Windows上的標準CPython安裝。

+0

這種方法沒有運氣... – 2010-02-20 18:22:46

+0

任何人有任何其他的想法!我在網上看到過其他人都遇到同樣的問題,似乎沒有人能回答! – 2010-02-21 05:57:22

1

我注意到,如果你使用Windows 64位,那麼pyserial根本不起作用。我使用Python 2.7,並通過管理員帳戶安裝x86版本後,使用上述

time.sleep(1) 

ser.setDTR(level=0) 

time.sleep(1) 

提到的代碼寫入之前附加,事後想起了關閉端口,我能得到它作爲腳本工作,而不僅僅是通過CLI工作。另外,請確保您以管理員身份運行python GUI或命令行。這對我來說也是一個成功的區別。另外,在運行代碼之前,確保Arduino上的串口監視器已關閉。

0

可以在關閉串口之後再次建議再睡一次。

import serial 

ser = serial.Serial('COM3',9600,timeout=.2) 

ser.write('A') 

ser.close() 

time.sleep(3000) 

//for a first test, give a whopping 3 seconds 

//sleep(100), 100 ms (0.1 second) may be enough in final product 

的理由是,該電腦正在變得如此之快(超過1百萬的時候我的第一款x86的性能在4.77 MHz的,大概十萬的時間比航天飛機更快船上原來的電腦),它可能有時間啓動Python,執行數百萬條指令......關閉控制檯,所有這些在單個字節可能已經在串行端口上發送之前。

0

在我的情況下,以下工作。

time.sleep(1) 
    ser.setDTR(level=1) 
    time.sleep(1) 
1
import serial 
import time 

ser = serial.Serial('/dev/ttyACM1', 9600, timeout=1) 
time.sleep(3)  # this will needed for initializing arduino 
serial.write(b'1') # b is necessary for byte 
+0

重新接線後,更換電源,並將我的大部分頭髮拉出來,這爲我解決了它。 – 2017-09-30 12:24:34