Pss bien hoy dejare constancia de mi primer contribución al OpenSource, hace tiempo andaba en busca de información sobre el control de puertos en GNU/Linux y me encontré con el foro de 'munguis' y este interesante articulo sobre manipular el puerto paralelo con Python y una librería llamada parport (disponible aquí). El buen de munguis escribió un pequeño programa pero de mucha utilidad para los aficionados a la robótica y electrónica como yo. Así que decidí mejorarlo y para ello me tuve que estudiar este tutorial de PyGTK. Básicamente el programa es una ventana con 8 botones biestable uno para cada bit del bus de datos (desde el D0 hasta el D7) en el que si se presiona se manda un '1' lógico y si se vuelve a presionar vuelve al '0' lógico. También cuenta con un botón de salida que antes de salir apaga totalmente el bus de datos (pone a '0' todos los bits). Munguis me hizo el favor de subir mi código (aquí) pero aquí también lo pondré:
Para poder ejecutarlo es necesario Python, las librerias del escritorio GTK+, las librerías PyGTK y la librería parport. Python es un lenguaje portable por lo que es muy probable que este programa también se pueda ejecutar en 'Ventanas' (Windows) pero yo no lo he probado en dicha plataforma, yo lo hice en Ubuntu 8.04.
Para correr el programa necesita permisos de superusuario y la librería parport debe de estar contenida en el mismo directorio donde se encuentra el programa.
Es algo sencillo el programa pero estoy orgulloso de él, jejeje, espero pronto aprender y compartir cosas más complejas.
Buena Vibra!
Para poder ejecutarlo es necesario Python, las librerias del escritorio GTK+, las librerías PyGTK y la librería parport. Python es un lenguaje portable por lo que es muy probable que este programa también se pueda ejecutar en 'Ventanas' (Windows) pero yo no lo he probado en dicha plataforma, yo lo hice en Ubuntu 8.04.
Código:
#!/usr/bin/env python
#
# pparaleloaztk.py
#
# CopyLeft 2008 Aztk
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
# IMPORTANT - To run the program you need superuser permissions
# "parport" is a library from
# [url]http://pyparport.sourceforge.net/[/url]
# Thanks to the parport's developers
from parport import ParallelPort
import pygtk
pygtk.require('2.0')
import gtk
p = ParallelPort(0x378)
pdatax = 0
class ParalellX:
# This callback write a data in parallel port
def callback(self, widget, data=None):
global pdatax
# When the button is hold on
if (widget.get_active()):
pdatax = pdatax + data
print "data = %s" %(pdatax)
p.write(pdatax)
# When the button is hold off
else:
pdatax = pdatax - data
print "data = %s" %(pdatax)
p.write(pdatax)
# This callback quits the program
def delete_event(self, widget, event, data=None):
p.write(0)
return gtk.FALSE
def destroy(self, widget, data=None):
p.write(0)
print "data = 0"
print "Good Wave"
gtk.main_quit()
def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("ParalellX")
self.window.connect("delete_event", self.delete_event)
self.window.set_border_width(20)
# Create a vertical box
vbox = gtk.VBox(gtk.TRUE, 2)
self.window.add(vbox)
# Create the data buttons (D0...D7)
#D0
button = gtk.ToggleButton("D0")
button.connect("toggled", self.callback, 1)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D1
button = gtk.ToggleButton("D1")
button.connect("toggled", self.callback, 2)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D2
button = gtk.ToggleButton("D2")
button.connect("toggled", self.callback, 4)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D3
button = gtk.ToggleButton("D3")
button.connect("toggled", self.callback, algooooo
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D4
button = gtk.ToggleButton("D4")
button.connect("toggled", self.callback, 16)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D5
button = gtk.ToggleButton("D5")
button.connect("toggled", self.callback, 32)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D6
button = gtk.ToggleButton("D6")
button.connect("toggled", self.callback, 64)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
#D7
button = gtk.ToggleButton("D7")
button.connect("toggled", self.callback, 128)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
# Add a separator for the quitbutton
separator = gtk.HSeparator()
separator.set_size_request(120, 5)
vbox.pack_start(separator, gtk.FALSE, gtk.TRUE, 5)
# Create "Quit" button
button = gtk.Button("Quit")
button.connect("clicked", self.destroy, None)
vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 2)
self.window.show_all()
def main():
gtk.main()
return 0
if __name__ == "__main__":
ParalellX()
main()
# This code is inspirated in a munguis' code
# Thanks munguis
# [url]http://www.pygtk.org/pygtk2tutorial-es/[/url]
# A great tuto about pygtk
Para correr el programa necesita permisos de superusuario y la librería parport debe de estar contenida en el mismo directorio donde se encuentra el programa.
Es algo sencillo el programa pero estoy orgulloso de él, jejeje, espero pronto aprender y compartir cosas más complejas.
Buena Vibra!