2014-01-10 67 views
3

我通過USB端口與我的Arduino連接,並通過使用PySerial模塊向其發送數據。起初,我可以檢查設備通過使用此代碼連接:如何檢查設備是否連接Pyserial

try: 
    ser = serial.Serial("COM3", 9600) 
except serial.serialutil.SerialException: 
    print "Arduino not connected" 

現在我想要做的是定期檢查的Arduino仍連接到計算機。我試過ser.isOpen(),但即使Arduino斷開連接,它也會返回true。我也想知道如何重新連接設備。我的意思是一旦斷開設備,程序就不能再發送任何數據給Arduino了。

回答

4

您可以設置超時。

import serial 

ser = serial 

try: 
    ser = serial.Serial("COM3", 9600, timeout=10) 

    while ser.read(): 
    print 'serial open' 

    print 'serial closed' 
    ser.close() 

except serial.serialutil.SerialException: 
    print 'exception' 
0

我建議使用Python的線程類istantiate串行連接,在運行methos把你的while循環,設置您在結束使用殺IY的變種,你使用第二公共變種對於存儲數據有如果接收和主方法的數據負載..很快粘貼一個例子

class Arduino(): 
    def __init__(self,Port='/dev/ttyUSB0',Boud=9600,connState=0): 
    self.parent=self 
    self.port=Port 
    self.boud=Boud 
    self.connState=connState 
    self.timeount=1 
    self.ser=None 
    self.connect() 
    def connect(self): 
     try: 
      self.ser=serial.Serial(self.port,self.boud,timeout=0.0001) 
      self.connState=1 
      return [1,'connect'] 
     except: 
      self.connState=0 
      return [0,'no hardware found'] 


    def loadData(self):  
     self.buffer=self.ser.read(1)   
     if (self.buffer!=''): 
      try: 
      print self.buffer 
      except Exception, e: 
      pass 

    ard=Arduino() 
     while True: 
    if ard.connState: 
     ard.loadData() 
    else: 
     print "Arduino not found" 
     break 

並與開始:

import threading 
class ThController(threading.Thread): 

    # Override Thread's __init__ method to accept the parameters needed: 
    def __init__(self,parent): 
     self.parent = parent 
     threading.Thread.__init__ (self) 

    def run (self): 
     while self.parent.ctrlattive: 
      j=json.loads(data) 
      self.parent.data=j 
0
import serial 
import time 

ser = serial.Serial() 
ser.braudrate = 115200 
ser.port = "/dev/ttyUSB0" 
ser.open() 

print(ser.name) 
if ser.isOpen(): 
    print("serial is open!") 

ser.close() 
1

例如檢測ttyUSB0:

import os 

x=os.system("ls /dev/ttyUSB0") 

if x==0: 
    print "connected" 
else: 
    print "disconnected" 
+2

更好地使用'os.path.exists('/ dev/ttyUSB0')​​' – goetzc

1

不幸的是,我能找到這樣做的最好辦法是嘗試一些溝通,看看它是否失敗。一個非常安全的方法是:

try: 
    ser.inWaiting() 
except: 
    print "Lost connection!" 

你可能仍然想用ser.close()的連接丟失之後的連接,雖然你可能需要放置在一個「嘗試:除了「塊也。