Estos últimos días he necesitado comunicarme con un dispositivo a través de un puerto serie. Como python y yo teníamos una conversación pendiente he aprovechado esta tarea para hacer mis primeros pinitos con este lenguaje tan interesante.
Para el que, como yo, no conozca nada de Python, la página de
wikipedia en español tiene muchísima información que permite al menos soltarte las manos y tontear un poco antes de ponerte con algo "serio". Información con más profundidad se puede encontrar en su
manual de referencia.
Para conseguir mi objetivo he usado la librería pySerial. En este
enlace se encuentra toda su documentación. Muy detallada y con ejemplos útiles.
En primer lugar y por probar he hecho un script que escanea la disponibilidad de los puertos del sistema. No tiene mucha historia, por lo que se entiende fácilmente.
import serial
disponibles = []
for i in range(10):
try:
s = serial.Serial(i)
disponibles.append((i, s.portstr))
s.close()
except:
pass
print "Puertos disponibles: "
for numpuerto,nombre in disponibles:
print "%d -> %s" % (numpuerto, nombre)
Veamos el resultado:
En mi sistema se han encontrado cuatro puertos serie disponibles. Con el siguiente script se consigue enviar una cadena de texto por un puerto elegido y recibir una respuesta... si es que la hay.
import serial
import sys
#-- Se abre el puerto elegido y se establece el tiempo de espera máximo
try:
s = serial.Serial(1)
s.timeout=2;
except serial.SerialException:
print "Error al abrir el puerto."
sys.exit()
# Se envía el texto
texto = "Texto a enviar"
s.write(texto)
# Se recibe la respuesta del dispositivo
# 10 son los bytes máximos que se esperan
respuesta=s.read(10);
if len(respuesta)>0 :
print "Respuesta: " + respuesta
else:
print "Tiempo de espera agotado."
Sí. Habría sido más interesante tener algún dispositivo que respondiera y así poder tratar su respuesta o configurar parámetros del puerto con más detalle, o que al menos hiciera eco. La próxima vez será :)