Beruflich Dokumente
Kultur Dokumente
Introduccin
La comunicacin a travs del puerto serie se sigue utilizando mucho para conectar el PC con otros dispositivos, como por ejemplo microcontroladores. Adems de estar soportado en todos los ordenadores y dispositivos, la interfaz soft are es muy fcil de utilizar. Actualmente muchos ordenadores porttiles no vienen con puerto serie incorporado !no traen un conector "#$%. &sto no es pro'lema, ya (ue se pueden emplear conversores US !serie. )o utilizo much*simo el puerto serie para controlar los ro"ots y comunicarme con los microcontroladores (ue uso. As* es como naci el proyecto stargate, en el (ue hay definidos unos protocolos muy sencillos para comunicar aplicaciones cliente desde el PC con pe(ue+os servidores (ue corren en los microcontroladores !los star#ates%. ,n ejemplo es el ro'ot Cu'e -evolutions (ue utiliza una tarjeta ./ypic, 'asada en el microcontrolador PIC1$%&'$(. &n este cuaderno tcnico se muestran diferentes ejemplos de uso del puerto serie utilizando el lenguaje Python. 0odos los ejemplos funcionan tanto en )inu* como en +indo,s. Para las comunicaciones serie se ha utilizado la li"rer-a pyserial y muchos de los ejemplos son modificaciones de los ejemplos (ue hay en ella. Los e.emplos (ue se muestran son1
scan/py: ,tilidad (ue escanea los puertos serie mostrando cules estn disponi'les. s#!eco1/py 1 Prue'as de 2eco3. .e env*a una cadena a $455 'audios y se espera reci'ir lo mismo !reci'ir su 2eco3%. Para ello es necesario tener un
microcontrolador con el servidor de eco gra'ado, o 'ien unir los pines 6 y 7 !-8 y 08% del conector serie.
s#!eco0/py 1 9ismo ejemplo (ue sg:eco;<py, pero ahora se pasa como parmetro el dispositivo serie (ue se (uiere emplear, en vez de tenerlo 2ca'leado3
en una varia'le interna.
miniterm/py1 9ini:terminal de comunicaciones. 0odo lo (ue se teclea se env*a por el puerto serie, y todo lo reci'ido se imprime en pantalla. &sta aplicacin
es fundamental para hacer prue'as con el puerto serie.
Instalacin en +indo,s
&s necesario tener instalados estos tres componentes1
1. ?nstalador de python 6.@ para >indo s. !python:6.@.msi% 2. ?nstalador de las e8tensiones de Python para >indo s. !py in76:6;5. in76:py6.@.e8e% 3. ?nstalador del mdulo Pyserial. !pyserial:6.6. in76.e8e%.
Para pro'ar los ejemplos descargar el pa(uete pyserial:ejemplos.zip y descomprimirlo en un directorio de tra'ajo.
5.emplo de utilizacin1
python scan.py &n linu8 se pueden poner permisos de ejecucin y teclear directamente ./scan.py para ejecutarlo. &jemplo de funcionamiento en 23U4)inu*1
Para hacer (ue estos nuevos dispositivos se puedan usar con pyserial se pueden hacer dos cosas1 ;. ("rir directamente el puerto serie especi<icando el dispositivo . &jemplo1 s = serial.Serial(/dev/ttyUSB0). &l pro'lema de esto es (ue no es multiplataforma. .i se ejecuta en >indo s se producir un error. 6. =acer un lin> entre el dispositivo 4dev4ttyUS * y un 4dev4ttySz ?ue no se est usando . &n mi caso utilizo los nom'res EdevEtty.;5, EdevEtty.;;... para asignarlos a los EdevEtty,.#5, EdevEtty,.#;... respectivamente. Por ejemplo1 $ sudo ln -s /dev/ttyUSB0 /dev/ttyS10
"e esta forma al ejecutar scan() se detectar (ue est disponi'le el dispositivo con nCmero ;5 !es lo (ue se muestra en el pantallazo de Linu8%
2. Conectar un hard,are con un microprocesador ?ue ten#a #ra"ado un <irm,are para implementar la <uncionalidad de eco . Por ejemplo, utilizando
una tarjeta ./ypic, !(ue usa un micro P?C;4IJK4A% con el servidor de eco gra'ado. &l programa sg:eco;.py a're el puerto serie, y si no se produce ningCn error, env*a la cadena de prue'a 2 Hola como estas3 . Para ello se utiliza el mtodo write()1
G:: &nviar la cadena de prue'as print " !"#$%& ' " ( )adena s.*rite+)adena,-
La cadena sale por el puerto serie y el hard are hace 2eco3. &l programa se (ueda esperando hasta reci'ir tantos 'ytes como los (ue tiene la cadena (ue ha sido enviada. Para ellos se invoca al mtodo read() pasando como argumentos el nCmero de 'ytes (ue se (uiere reci'ir. #-- sperar hasta recibir la cadena enviada... #-- & hasta .ue haya un timeout recibido / s.read+len+)adena,,-
Ahora pueden ocurrir dos cosas. #ien (ue la cadena llegue correctamente !se reci'en tantos 'ytes como los (ue se han enviado% o 'ien (ue no lleguen todos, producindose un timeout.
5.emplo de utilizacin1
python s0-eco1.py &n linu8 se pueden poner permisos de ejecucin y teclear directamente ./s !eco".py para ejecutarlo. Los pantallazos para Linu8 y >indo s se muestran con el ejemplo sg:eco6.py, (ue son similares a sg:eco;.py. .i todo ha ido 'ien, lo (ue aparecer en pantalla ser1 1ruebas del puerto serie 1uerto +0,' /dev/ttyS0 !"#$%& ' 2ola como estas 3 )#B#%&' 2ola como estas &45 &n indo s aparecer CD9; donde pone EdevEtty.5
.i se (uiere utilizar otro puerto serie diferente del 5, hay (ue modificar la varia'le #uerto.
5.emplo de utilizacin1
.e invoca el programa pasando como argumento :p 8, donde 8 es el nCmero o nom're del puerto serie a utilizar. python s0-eco6.py -p 0 &n linu8 se pueden poner permisos de ejecucin y teclear directamente ./s !eco$ !p 0 para ejecutarlo. &jemplo de funcionamiento en 23U4)inu*1
.e est utilizando el puerto EdevEtty.;5 (ue es un conversor ,.#:serie !EdevEtty,.#5%. .e ha hecho un lin/ sim'lico al dispositivo EdevEtty.;5 para (ue pyserial lo
5.emplo de utilizacin1
.e invoca de la siguiente manera1 python miniterm.py -p 0 &jemplo de funcionamiento en 23U4)inu*1
)a li"rer-a USPP
Existen otras libreras de acceso al puerto serie en Python. Una de ellas es la librera USPP desarrollada por Isaac Barona. Soporta las plataformas Linux, indo!s y "ac#S. La ra$%n por la &ue he hecho estos e'emplos utili$ando pyserial en (e$ de USPP es &ue desconoca su existencia hasta hace apenas dos das antes de la publicaci%n de esta documentaci%n. )iene la (enta'a de &ue permite reali$ar comunicaciones usando la norma RS-485, &ue es half*duplex. En este modo se +estiona autom,ticamente la direcci%n de la transferencia usando la lnea -)S. )ambi.n es muy f,cilmente portable a otras plataformas. /0mpresionante traba'o 0saac1 2racias por tu traba'o y por liberarlo para &ue todos lo podamos usar. 3*4
1o,nload
Para descar#ar pyserial:ejemplos.zip 0odos los ejemplos1 scan.py, sg:eco;.py, sg:eco6.py y miniterm.py
1ocumentacin
Li'rer*a pyserial. 9uchos ejemplos y documentacin completa de la AP? 9dulo pyconsola<io1 Lectura de teclas sin esperar a (ue se pulse &nter Pgina oficial del lenguaje Python. Proyecto stargate1 Control de dispositivos e8ternos desde el PC .ervidor de eco1 Iirm are para (ue diferentes microcontroladores hagan 2eco3 de todo lo reci'ido por su puerto serie 0arjeta ./ypic1 una tarjeta entrenadora 'asada en el microcontrolador P?C;4IJK4A Cuaderno tcnico ;1 Comunicaciones serie. Cu'e -evolutions1 ,n ejemplo de un ro'ot (ue se controla por puerto serie desde el PC. ,tiliza una ./ypic.
(utores
Chris )iechti
Luan Monzlez
)icencia
0his or/ is licensed under a Creative Commons Attri'ution:.hareAli/e 6.@ .pain License &ste proyecto tiene una licencia li"re. .e permite su copia, modificacin y distri'ucin, 'ajo los trminos de la licencia Creative commons. 0odo el soft are tiene licencia MPL.
Crditos:
0odos los ejemplos estn 'asados en los creados por Chris )iechti para el proyecto pyserial. &l primer contacto (ue tuve con el manejo del puerto serie 'ajo Python fue gracias a -afael 0revi+o. La Li'rer*a pyserial la descu'r* gracias a 2eden 1omin#uez, (ue durante la campus party 6554 las utilizamos para hacer la ./ylamp, un fle8o (ue se
pod*a encender y apagar a travs de internet.
(#radecimientos
A -icardo Mmez y Andrs Prieto:9oreno por pro'ar todos los ejemplos en >indo s, encontrar errores y generar las capturas de pantallas. 9uchas
gracias N:%
3oticias
114("ril4088': Pu'licada primera versin de este cuaderno AOndice de cuadernos tcnicosB %uan &on'(le' ?&A-D#D0?C.