1 |
2 |
nuubik |
USPP Library
|
2 |
|
|
|
3 |
|
|
Universal Serial Port Python Library
|
4 |
|
|
(Librería en Python para el acceso universal al puerto serie)
|
5 |
|
|
|
6 |
|
|
Copyright 2006 Isaac Barona
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
Contenidos
|
10 |
|
|
----------
|
11 |
|
|
1. Introducción
|
12 |
|
|
2. Motivación
|
13 |
|
|
3. Dónde encontrar la librería
|
14 |
|
|
4. Características
|
15 |
|
|
5. Pre-requisitos
|
16 |
|
|
6. Utilización y documentación
|
17 |
|
|
7. Dónde funciona
|
18 |
|
|
8. Problemas pendientes
|
19 |
|
|
9. Tareas pendientes
|
20 |
|
|
10. Portado a otras plataformas
|
21 |
|
|
11. Licencia
|
22 |
|
|
12. Autor
|
23 |
|
|
13. Versión
|
24 |
|
|
|
25 |
|
|
|
26 |
|
|
1. Introducción
|
27 |
|
|
---------------
|
28 |
|
|
|
29 |
|
|
La librería USPP es un módulo desarrollado en Python para el acceso
|
30 |
|
|
multiplataforma al puerto serie. En el momento, sólo funciona en Linux
|
31 |
|
|
Windows y MacOS, pero como está escrita completamente en Python
|
32 |
|
|
(no es únicamente un recubrimiento en Python de una librería desarrollada
|
33 |
|
|
en C/C++) espero que pueda ser ampliada para que soporte otras plataformas.
|
34 |
|
|
|
35 |
|
|
|
36 |
|
|
2. Motivación
|
37 |
|
|
-------------
|
38 |
|
|
|
39 |
|
|
A mí me gusta mucho hacer pequeños cacharros electrónicos con
|
40 |
|
|
microcontroladores, especialmente aquellos que pueden ser conectados a
|
41 |
|
|
un ordenador para enviar y recibir datos.
|
42 |
|
|
Hace un par de meses descubrí Python y realmente me encantó.
|
43 |
|
|
Empezé a jugar con él y ví que podía utilizarlo para hacer prototipos
|
44 |
|
|
de protocolos de comunicación entre el ordenador y los microcontroladores
|
45 |
|
|
de manera mucho más fácil y rápida que utilizando C (que era el lenguaje
|
46 |
|
|
que solía utilizar). Al mismo tiempo, estaba interesado en poder utilizar
|
47 |
|
|
los desarrollos bajo diferentes arquitecturas.
|
48 |
|
|
Empezé a buscar en la red módulos de Python que accedieran al puerto serie
|
49 |
|
|
y encontré los siguientes:
|
50 |
|
|
|
51 |
|
|
* win32comport_demo que viene junto a la extensión win32.
|
52 |
|
|
* Módulo win32comm de wheineman@uconect.net.
|
53 |
|
|
* Sio Module de Roger Rurnham (rburnham@cri-inc.com)
|
54 |
|
|
* pyxal (Python X10 Abstraction Layer) de Les Smithson
|
55 |
|
|
(lsmithson@open-networks.co.uk)
|
56 |
|
|
|
57 |
|
|
pero no eran multiplataforma, eran únicamente un recubrimiento de una librería
|
58 |
|
|
propietaria o eran simples ejemplos de acceso al puerto serie bajo una
|
59 |
|
|
determinada plataforma.
|
60 |
|
|
Por estas razones, y también por supuesto, por aprender más Python, decidí
|
61 |
|
|
empezar este proyecto. Por supuesto, he utilizado los módulos indicados
|
62 |
|
|
anteriormente como referencia para realizar mi librería y por tanto, me
|
63 |
|
|
creo en la obligación de felicitar a sus autores por su excelente trabajo y
|
64 |
|
|
por haberlo compartido con los demás.
|
65 |
|
|
|
66 |
|
|
Espero que disfrutes utilizándo el módulo uspp tanto como yo lo
|
67 |
|
|
he hecho haciéndolo.
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
3. Dónde encontrar la librería
|
71 |
|
|
------------------------------
|
72 |
|
|
|
73 |
|
|
Puedes encontrarla en:
|
74 |
|
|
* http://ibarona.googlepages.com/uspp
|
75 |
|
|
* http://www.telefonica.net/web/babur
|
76 |
|
|
|
77 |
|
|
como un fichero tar.gz o como un fichero .zip.
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
4. Características
|
81 |
|
|
------------------
|
82 |
|
|
|
83 |
|
|
Este módulo tiene las siguientes características destacadas:
|
84 |
|
|
|
85 |
|
|
- acceso de alto nivel al puerto serie bajo diversas plataformas.
|
86 |
|
|
- autodetecta la plataforma en la que se está ejecutando y
|
87 |
|
|
carga las clases adecuadas para esa plataforma.
|
88 |
|
|
- Orientado a objetos.
|
89 |
|
|
- Las operaciones sobre el puerto serie tienen la misma semántica
|
90 |
|
|
que las operaciones sobre objetos de tipo fichero.
|
91 |
|
|
- permite utilizar el puerto serie con diferentes velocidades y
|
92 |
|
|
características.
|
93 |
|
|
- permite la utilización del puerto bajo dos modos de funcionamiento:
|
94 |
|
|
RS-232 y RS-485 (de momento, sólo RS-232). En modo 485 la
|
95 |
|
|
comunicación es half-duplex y se utiliza la línea RTS para controlar
|
96 |
|
|
la dirección de la transferencia.
|
97 |
|
|
- lecturas en modo bloqueante, no bloqueante o con timeout.
|
98 |
|
|
|
99 |
|
|
|
100 |
|
|
5. Pre-requisitos
|
101 |
|
|
----------------
|
102 |
|
|
|
103 |
|
|
Se necesita los siguiente para utilizar la librería:
|
104 |
|
|
|
105 |
|
|
- Python 2.1 o superior
|
106 |
|
|
- En windows los módulos win32
|
107 |
|
|
|
108 |
|
|
|
109 |
|
|
6. Utilización y documentación
|
110 |
|
|
------------------------------
|
111 |
|
|
|
112 |
|
|
Únicamente tienes que importar en tu programa el módulo uspp y automáticamente
|
113 |
|
|
él se encarga de cargar las clases adecuadas para la plataforma en la que
|
114 |
|
|
se está ejecutando el programa.
|
115 |
|
|
|
116 |
|
|
Lo primero de todo, tendrás que crear un objeto de tipo SerialPort con las
|
117 |
|
|
características que desees. Si no se genera ninguna excepción del tipo
|
118 |
|
|
SerialPortException, puedes utilizar los métodos de lectura y escritura
|
119 |
|
|
del objeto para leer y escribir en el puerto serie.
|
120 |
|
|
|
121 |
|
|
Ejemplo:
|
122 |
|
|
|
123 |
|
|
>>> from uspp import *
|
124 |
|
|
>>> tty=SerialPort("COM2", 1000, 9600)
|
125 |
|
|
>>> # Abre el puerto serie COM2 a 9600 bps y con un timeout de 1 segundo.
|
126 |
|
|
>>> tty.write("a") # Envía el carácter 'a' al puerto serie.
|
127 |
|
|
>>> # Ahora suponemos que recibimos el string 'abc'
|
128 |
|
|
>>> tty.inWaiting()
|
129 |
|
|
3
|
130 |
|
|
>>> tty.read()
|
131 |
|
|
'a'
|
132 |
|
|
>>> tty.inWaiting()
|
133 |
|
|
2
|
134 |
|
|
>>> tty.read(2)
|
135 |
|
|
'bc'
|
136 |
|
|
|
137 |
|
|
|
138 |
|
|
La documentación de las diferentes clases y métodos que componen el módulo
|
139 |
|
|
puede encontrarse en el string de documentación del módulo uspp.
|
140 |
|
|
|
141 |
|
|
|
142 |
|
|
7. Dónde funciona
|
143 |
|
|
-----------------
|
144 |
|
|
|
145 |
|
|
La librería ha sido probada en una máquina con Windows 95, Windows XP y
|
146 |
|
|
Windows 2000 con Python 2.1+ y en un Linux (con el kernel 2.0.34) con Python
|
147 |
|
|
2.1+.
|
148 |
|
|
|
149 |
|
|
|
150 |
|
|
8. Problemas pendientes
|
151 |
|
|
-----------------------
|
152 |
|
|
|
153 |
|
|
|
154 |
|
|
|
155 |
|
|
|
156 |
|
|
9. Tareas pendientes
|
157 |
|
|
--------------------
|
158 |
|
|
|
159 |
|
|
Esta es la lista de tareas pendientes:
|
160 |
|
|
|
161 |
|
|
- implementar el modo RS-485.
|
162 |
|
|
- portar la librería a otras plataformas de forma que sea
|
163 |
|
|
realmente multiplataforma.
|
164 |
|
|
|
165 |
|
|
|
166 |
|
|
10. Portado a otras plataformas
|
167 |
|
|
-------------------------------
|
168 |
|
|
|
169 |
|
|
Si quieres portar la librería a otras plataformas sólo tienes que seguir
|
170 |
|
|
los siguientes pasos:
|
171 |
|
|
|
172 |
|
|
* Crear un nuevo fichero en python llamado SerialPort_XXX.py en el que
|
173 |
|
|
implementes las mismas clases y métodos públicos que aparecen en los
|
174 |
|
|
módulos SerialPort_win y SerialPort_linux.
|
175 |
|
|
* Añadir la nueva plataforma en el fichero uspp.py.
|
176 |
|
|
|
177 |
|
|
|
178 |
|
|
11. Licencia
|
179 |
|
|
------------
|
180 |
|
|
|
181 |
|
|
Este código se libera bajo la licencia "LGPL" que puedes encontrar en
|
182 |
|
|
http://www.gnu.org/copyleft/lesser.html o en el fichero lesser.txt que
|
183 |
|
|
acompaña a la librería.
|
184 |
|
|
Si utilizas este software estaría muy agradecido de saberlo.
|
185 |
|
|
|
186 |
|
|
|
187 |
|
|
12. Autor
|
188 |
|
|
---------
|
189 |
|
|
|
190 |
|
|
Esta librería ha sido creada por Isaac Barona Martínez .
|
191 |
|
|
|
192 |
|
|
|
193 |
|
|
13. Versión
|
194 |
|
|
----------
|
195 |
|
|
|
196 |
|
|
0.1 - 01/09/2001
|
197 |
|
|
0.2 - 13/05/2003
|
198 |
|
|
1.0 - 24/02/2006
|
199 |
|
|
|