A pesar de ser un estudiante promedio de la Ingeniería en Sistemas, la verdad como que no me he destacado por ser un “chingón” dentro de algún campo del amplio rango de posibilidades que ofrece la carrera. Me la he pasado haciendo ahi proyectillos equisones, para pasar alguna materia, nada extraordinario, tal vez sea por hueva, tal vez por conformismo o tal vez, la peor de todas, por que al final descubriré que los sistemas no son para mí jajaja. Aprendí Java, pero no soy un chingón en Java, aprendí SQL, pero aún se me atoran algunas consultas, aprendí ensamblador, pero ya ni me acuerdo de los registros jaja, aprendí PHP, pero aún como que soy beginner, y así le puedo seguir…
Sin embargo en estos últimos días me agarró una corriente de inspiración y determinación y me puse a chingarle a Python, el pretexto: un proyecto de la materia de Interfaces que consistía en controlar un circuitillo de 8 LEDs mediante el puerto paralelo. El proyecto fue totalmente exitoso, por lo cual he decidido compartirles mi experiencia, por si algún día les dejan esta tarea en su prepa/conalep/tecno/cnci jajaja.
Una Pequeña Introducción.
Como nunca falta el profe mamón que pregunta -¿y por qué esto?-, ahi te va:
El puerto paralelo (el estándar en la computadora es un DB-25) es una interfaz con 25 pines, 8 son para datos (por lo cual se puede decir que envía 8 bits al mismo tiempo), 5 de estado, 4 de control y 8 de tierra eléctrica. Para esta tarea sólo nos interesan los 8 pines de datos (que van del 2 al 9) y los 8 de tierra para cerrar el circuito (que van del 18 al 25).

También es útil saber que el puerto paralelo (generalmente las computadoras sólo vienen con uno) se carga en la dirección de memoria 0×378, por lo cual cuando se hace una operación con esa dirección de memoria significa que el puerto paralelo está involucrado. Y ya, basta de rollo.
Mis Ingredientes.
Especifico “mis” por que quiero dar a entender que este proyecto se puede realizar en una infinidad de maneras, desde la elaboración del circuito hasta el programa encargado de manipular el puerto. Pero les garantizo que si lo hacen a mi manera tendrán éxito, si no dejen comentario jaja.
Hardware.
- 8 LEDs.
- 8 resistencias de 120 ohms.
- 9 cables delgados de cobre (1 de ellos que sea mas largo que los demás).
- 1 conector macho DB-25.
- Cautin y soldadura para fijar los cables al conector.
- 1 placa protoboard.
- 1 PC con puerto paralelo (ja!).
Software.
- Ubuntu Gutsy Gibbon (el cual ya trae integrado el compilador de Python, las librerias del escritorio GTK+ y las librerías PyGTK para la aplicación de Python con entorno gráfico.
Elaboración.
Soldar cuidadosamente los 8 cables a cada pin del 2 al 9 (es de total importancia que ninguna “rebaba” haga contacto con algún pin de al lado), y después hacer un fino hilo de soldadura que empiece en el pin 18 y que termine en el 25. Finalmente soldar el cable mas largo al pin 25.
Después tienes que construir un circuito sobre la protoboard de tal forma que quede así:
Ya vamos a la mitad, venga. Ahora falta la parte lógica, para esto necesitaremos una librería (la cual es la encargada de interactuar con el puerto paralelo) que me encontré aquí, descárgala y descomprímela en la carpeta donde vas a tener tu programita principal. Después copia y pega este código (paralelo.py) en tu editor de texto favorito (seguramente gedit es tu opción), lo guardas como “paralelo.py” y liiiiiiiiiiisto!!, ejecútalo.
¿Cómo ejecutarlo? Esta bien, anteayer yo tampoco sabía jaja. En tu terminal te vas al directorio donde tienes el programita (cd directorio), y ya ahí le das sudo python paralelo.py (tienes que poner sudo ya que el puerto paralelo solo puede ser controlado con permisos de raiz), y liiiiiiisto!!, debes tener una salida así:

El programita, a decir verdad, es bastante simple, pero me siento satisfecho ya que fue producto de 1 día de aprendizaje de Python, sin embargo como es “open source”, ustedes pueden hacerle todas las mejoras que se les ocurra, como por ejemplo, agregarle unos “checkboxes” que representen cada pin que deba encenderse, me hubiera gustado hacerlo pero ya tenía el tiempo encima jaja.
En fin, espero les sea útil en algún momento de sus vidas, y pues si se les atora algo, no duden en preguntar. Espero escribir este tipo de posts con más frecuencia jaja.






Febrero 16, 2008 a las 1:07 pm
Uh cañito!…
Excelente tutorial de como controlar unos LEDs. Y que mejor que lo hayas hecho en linux, para que vean lo que es bueno, igual y deben pensar ahora que eres todo un “hacker” jaja.
Igual se podría pensar que no es algo muy trascendente, sino solo un ejercicio de circuitos, pero lo que no se ve es que es un paso hacia poder hacer cosas mas elaboradas con el puerto paralelo, como controlar dispositivos, electro-domesticos, y eso si estaria yeah! ¿imagínate una chapa electrónica? aunque por el momento talvez sea un poco arriesgado jaja.
Por lo que veo creo que te ha agradado python, creo que es un lenguaje muy potente, no se que pienses tu, pero si lo usan en la NASA es por algo.
La neta se pueden hacer muchisimas cosas pero talvez como a mi, te falte motivación o una razón/meta/objetivo para poder ponerte en acción, que estoy seguro tienes muchas ideas.
Sigue posteando cosas así de chingonas, de rato pro-linux-gtk-python colega.
Febrero 17, 2008 a las 12:13 am
Yeah, la verdad ya tenía un programita funcionando en Visual Basic, pero fue el momento en que dije -No mames, que pedo??, esto va en contra de mis principios-, entonces fue que decidí intentarlo en Python.
Efectivamente, Python es un lenguaje que tiene bastantes alcances y le auguro un gran futuro, sobre todo para todo tipo de aplicaciones en linux dada su fácil integración con las librerias de escritorio Tk, GTK o Qt.
Y pues yo también espero tener más motivaciones para seguirle chingando a Python o a PHP, la verdad al final de todo como que sí reconforta poder hacer algo productivo jajaja.
Febrero 19, 2008 a las 12:11 am
[...] sensaciones molestas. Llegué a conectar mi compu (me la había llevado al Tecno para presentar mi proyecto del puerto paralelo jaja), la enciendo y espero a que se “cargue” Ubuntu, inmediatemente ejecuta al Gmail [...]
Marzo 23, 2008 a las 10:19 am
no me funciona me lanza el siguiente error:
Traceback (most recent call last):
File “paralelo.py”, line 2, in
from parport import ParallelPort #”parport” es una libreria en python encontrada en
ImportError: No module named parport
Marzo 23, 2008 a las 1:59 pm
Fácil. Lo que está ocurriendo es que el intérprete no encuentra la librería parport. La solución está en tener la estructura de directorios de tu programa así:
carpeta_del_programa
|-parport
|-paralelo.py
En donde la carpeta “parport” contiene a la libreria que bajas y descomprimes del sitio del cual hablo un poco mas arriba, y “paralelo.py” es el código que estás ejecutando.
Espero esa sea la solución. Saludos.
Marzo 30, 2008 a las 4:52 pm
Gracias por compartir. Me funcionó perfectamente. Ah!, la libreria partport la bajé de aquí: http://sourceforge.net/projects/pyparport/
Experimentaré con Python que apenas empiezo a aprender y postearé mis descubrimientos.
Saludos.
Abril 5, 2008 a las 7:56 pm
Hola, antes que nada gracias por la ayuda, pero tengo un pequeño problema :
Instale una tarjeta PCI con puerto paralelo para experimentar en ella por que leí que era peligroso hacerlo en la integrada.
Al parecer al definir el puerto “p = ParallelPort(0×378)” en paralelo.py al parecer no estoy dando la direccion del puerto paralelo PCI correcta , posiblemente lo esta mandando a la que esta en la mother b. integrada, ya busque en “System-Preferences-Hardware Information en gnome” encontre el registro de la tarjeta pero ninguna dirección a la cual referirme en el programa, “p = ParallelPort(?)”, creo que este podria ser el poblema,
de antemano gracias, se pueden hacer infinidad de cosas con tu aportación previa man, estaria chido empezar un proyecto.
Saludos
Uso Ubuntu Gutsy,
Pentium 4 3.2
Abril 6, 2008 a las 2:27 am
Hola de nuevo , pues la neta me clave un poco con esto jajaja, ya hasta estaba probando en perl, pero me tope con una aplicacion super util “Hardinfo” para localizar los puertos (dentro de PCI) que necesitaba para comunicarme con el puerto.
Esta super aplicacion dice con claridad los distintos puertos que puede tomar el puerto paralelo conectado al dispositivo PCI y muchas otras utilidades del hardware, espero ayude en algo a los que tengan mi mismo problema, y por supuesto esto no serviria de mucho sin una aplicacion tan chida como el manejo del puerto paralelo de este blog, Munguis muchas gracias por el tutorial.
Saludos
Abril 6, 2008 a las 3:25 am
A un detalle, en el archivo paralelo.py se puede sustituir el texto “gtk.TRUE” por “true” como en la linea 38 : “vbox = gtk.VBox(True, 2)” se evita el codigo de error en shell, no mejora el funcionamiento segun yo , pero ya no sale ese mensaje molesto .
Saludos
Abril 18, 2008 a las 8:42 pm
Que bien que ha servido de algo mi librería, está demasiado verde pero creo q es útil. Si el tiempo lo permite (y el trabajo) en algunas semanas se puede hacer algo más con ella. Saludos!
Mayo 20, 2008 a las 1:58 pm
[...] quiero dejar en claro qu este es un aumento al codifo suministrado por munguis, tambien esta el archivo partport aqui y bueno esta es la Url del blog original…si hacen todo como lo describe les asuguro que funciona, yo lo presente en una materia del tec y el profe quedo asombrado, (y quien no lo estaria despues de tantos años con java y windows?) en fin, gracias al munguis!!! [...]
Junio 27, 2008 a las 11:26 am
Buen dia.
Te escribo porque navegando encontre este sitio y no como andas de tiempo pero por lo que dices hay.. pero te tengo una propuesta vi lo que hiciste y yo estoy en el desarrollo de una aplicacion para la u y la hice vb por lo que me interesa enseñar que se puede en otras plataformas y de manera facil.. para dejar claro que no por la falta de informacion no es que se pueda si no solo eso la idea es.. Bueno leer el puerto dar una respuesta y ademas almacenar los eventos en una db mysql.. para luego ser verificados en php en web y por ejemplo inicio de automatizacion imaginemos tu cocina entras te detecta un sensor y el soft determina que tiene que activar la luz y bueno se le pueden poner mas cosas entraste y pon una sirena si no tocas un boton de choque que desactive la sirena en n segundos algo asi quiero hacer la maketa pero con linux ubuntu osea todo sin licensia o costo…
Escribeme podemos realizar el proyecto y seria fantasco ademas te tengo otra propuesta que te llamara la atencion y puedes tener ingresos…
Julio 11, 2008 a las 12:44 am
¿Que tanto futuro tiene el puerto paralelo?
Agosto 27, 2008 a las 11:22 pm
Que buen aporte, yo tenia uno en java, pero este esta facil y sencillo y me corre bien
Saludos
Septiembre 15, 2008 a las 6:56 pm
Man como seria si quiero apagar el 2D solamente? es decir, la salida 1 ??
Septiembre 15, 2008 a las 7:02 pm
Estoy tratando de manipular todos, individualmente, es decir, un boton encender led1, apagar led1, pero no lo logro hacer.. cuando le doy encender solo algunos y escribo 1, para encender el primero, enciende, pero si repito ese paso y escribo otro, se enciende el otro y apaga el anterior, alguna sugerencia man,? saludos
Septiembre 16, 2008 a las 10:34 pm
Uhmmm, temo no entender del todo el problema. Si lo que quieres es que dado un LED prendido, le des otra entrada y se conserve encendido, podrías validar que si ya hay algún valor en la variable valor solamente al nuevo le reste lo que tenía, de esta forma se encenderán los LEDs faltantes, aunque podría no funcionar jaja.
Suerte con eso, saludos.
Septiembre 18, 2008 a las 12:47 am
HOla, en efecto eso quiero que si se enciende otro, el que ya estaba encendido, no se apage…. y tambien quiero apagarlos individualmente.. no se si me explico.
Septiembre 18, 2008 a las 7:41 am
Ok ok, en ese caso lo mejor sería modificar del todo el código que tengo arriba y, en vez de encender LEDs de acuerdo a una cifra entre 1 y 255, poner una serie de checkboxes en donde cada uno represente una cifra de 1,2,4,8,…
Me encantaría ayudarte con ese código pero ahorita ando atorado con otros asuntos relativos a la escuela jaja, no sé si ya tengas experiencia con Python pero te aseguro que no es nada complicado, hay un montón de documentación en Internet
.
Si de algo te sirve puedes empezar buscando en Google “chechbox pygtk”, por ahi debes encontrar algún ejemplo de su implementación y solamente adaptarlo a tus necesidades.
Suerte y saludos.