#!/usr/bin/env python # -*- coding: iso-8859-15 -*- #---------------------------------------------------------------------------- # sg-eco2.py Ejemplo de manejo del puerto serie desde python utilizando la # libreria multiplataforma pyserial.py (http://pyserial.sf.net) # # Se envia una cadena por el puerto serie y se muestra lo que se recibe # Se puede especificar por la linea de comandos el puerto serie a # a emplear # # (C)2002 Chris Liechti (cliechti@gmx.net) # (C)2007 Juan Gonzalez # # LICENCIA GPL #----------------------------------------------------------------------------- import sys import getopt import serial #-------------------------------- #-- Imprimir mensaje de ayuda #-------------------------------- def help(): sys.stderr.write("""Uso: sg-eco2 [opciones] Ejemplo de uso del puerto serie en Python opciones: -p, --port=PORT: Puerto serie a emplear. Bien un numero o una cadena Ejemplo: sg-eco2 -p 0 --> Usar el primer puerto serie (Linux/Windos) sg-eco2 -p /dev/ttyS1 --> Especificar el dispositivo serie (Linux) """) #----------------------------------------------------- #-- Analizar los argumentos pasados por el usuario #-- Devuelve el puerto seleccionado #----------------------------------------------------- def Analizar_argumentos(): Puerto = 0 try: opts, args = getopt.getopt(sys.argv[1:], "hp:", ["help", "port="] ) except getopt.GetoptError: # print help information and exit: help() sys.exit(2) #-- Leer argumentos pasados for o, a in opts: if o in ("-h", "--help"): help() sys.exit() elif o in ("-p", "--port"): try: Puerto = int(a) except ValueError: Puerto = a return Puerto #---------------------- # MAIN #---------------------- #-- Analizar los argumentos pasados por el usuario Puerto = Analizar_argumentos() #-- Cadena de pruebas a enviar Cadena = "Hola como estas" #-- Sacar Mensaje inicial print "Pruebas del puerto serie" #-------------------------------------------------------- #-- Abrir el puerto serie. Si hay algun error se termina #-------------------------------------------------------- try: s = serial.Serial(Puerto, 9600) #-- Timeout: 1 seg s.timeout=1; except serial.SerialException: #-- Error al abrir el puerto serie sys.stderr.write("Error al abrir puerto %s" % str(Puerto)) sys.exit(1) #-- Mostrar el nombre del dispositivo print "Puerto (%s): (%s)" % (str(Puerto),s.portstr) #------------------------------------------------- #-- Aqui empieza la prueba #------------------------------------------------- #-- Enviar la cadena de pruebas print "ENVIADO : " + Cadena s.write(Cadena); #-- Esperar hasta recibir la cadena enviada... #-- O hasta que haya un timeout recibido = s.read(len(Cadena)); #-- Comprobar lo recibido if len(recibido)!=0: #--Cadena recibida. Imprimirla print "RECIBIDO: " + recibido #-- Comprobar si lo que se ha recibo es exactamente lo mismo que lo ##-- enviado if recibido==Cadena: print "OK!" else: print "Error!" else: #-- No se ha recibido ninguna cadena: timeout print "TIMEOUT"; #-- Cerrar puerto serie s.close()