2014-01-10 4 views
3

Я подключаюсь к своему Arduino через USB-порт и отправляет ему данные с помощью модуля PySerial. Сначала я могу проверить, если устройство подключено с помощью этого кода:Как проверить, подключено ли устройство Pyserial

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

Теперь то, что я хочу сделать, это проверить периодически, если Arduino все еще подключен к компьютеру. Я пробовал ser.isOpen(), но это возвращает true, даже если Arduino отключен. Я также хотел бы знать, как подключить устройство. Я имею в виду, что после отключения устройства программа больше не может отправлять какие-либо данные в 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

я предлагаю использовать класс питона нити для istantiate последовательного соединения, в Митосе перспективы поставить время цикла, установить вар, который вы используете для глушения 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() после того, как соединение теряется, хотя вы, возможно, потребуется поместить что в «попробовать: кроме "блок также.

Смежные вопросы