terça-feira, 7 de outubro de 2014

Identificando a porta serial em que o Arduino está conectado (Linux/Python)

Uma boa maneira de se comunicar com o Arduino é utilizar a interface serial (USB) que acompanha alguns modelos. A vantagem, se comparado com shields de comunicação sem fio ou ethernet, é que não é necessário comprar nenhum módulo adicional. A desvantagem é que você precisará ter um computador próximo (limite de 3 metros do padrão USB). Uma outra desvantagem, é que toda vez que se conectar, o Arduino irá reiniciar. Dependendo da aplicação, é recomendável fazer um Daemon que se conecte apenas uma vez.

Se você deseja escrever um script para se conectar ao Arduino, um problema frequente é que o nome da porta serial pode se alterar com eventuais reinícios do dispositivo.

Adaptei o código, a partir de um post que encontrei no stackoverflow.com. O código postado lá é genérico, e pode ser utilizado para vários sistemas operacionais.

O código abaixo irá se conectar à primeira porta /dev/ttyACM encontrada.


 #! /usr/bin/python  
 import serial  
 import time  
 import re  
 import os,sys  
 import glob  
 import serial  
 def serial_port():  
   #http://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python  
   if sys.platform.startswith('win'):  
     ports = ['COM' + str(i + 1) for i in range(256)]  
   elif sys.platform.startswith('linux'):  
     ports = glob.glob('/dev/tty[A-Za-z]*')  
   elif sys.platform.startswith('darwin'):  
     ports = glob.glob('/dev/tty.*')  
   else:  
     raise EnvironmentError('Plataforma nao suportada')  
   result = ""  
   for port in ports:  
     try:  
       s = serial.Serial(port)  
       s.close()  
       prog = re.compile('^/dev/ttyACM[0-9]')  
       if prog.match(port):  
         return port  
     except (OSError, serial.SerialException):  
       pass  
 ser = serial.Serial(serial_port(), 9600, timeout=1)  
 print "Conectado a " + serial_port()  

Nenhum comentário:

Postar um comentário