[Olpc-uruguay] Consulta Programacion USB

Andres Aguirre aaguirre en fing.edu.uy
Lun Sep 27 16:22:53 EDT 2010


Marcos, como estas?
Yo estoy participando en el proyecto Butiá y estamos abiertos para
evacuar cualquier tipo de dudas que tengas respecto a como controlamos
periféricos desde la ceibalita mediante el USB.
Creo que ya te contestamos a tí o a alguien de tu equipo una consulta
sobre estos temas, pero estamos abiertos para juntarnos y charlar
sobre los detalles técnicos si lo deseas.
Nosotros usamos placas de E/S que utilizan microcontroladores para
comandar los dispositivos electrónicos y estas se conectan al USB de
la ceibalita. Todos los fuentes del proyecto están publicados en la
web del mismo http://www.fing.edu.uy/inco/proyectos/butia/ en
particular hoy pensamos subir la versión 1.0 de los fuentes (tanto
hardware como software y diseño mecánico).
El tema es que el USB es un protocolo más complejo de lo que es el
serial o el paralelo y uno termina perdiendo la flexibilidad que se
tenia antes con los puertos paralelos  para manejar un pin digital
directamente desde un programa, por eso es que nosotros usamos
microcontroladores. No pensaron en usar alguna cosa sencilla que te
convierta en USB en un paralelo? algún chip de ftdi como el
http://www.ftdichip.com/Products/ICs/FT245R.htm
Sino "hackear" algún teclado USB roto para colgarse de las patas que
se usan para el led de num lock, blocks o similares ya que esos son
controlables por software en un linux estándar (no se si se tendrán
permisos en la ceibalita) y se tiran a la basura muchos diariamente.
un abrazo



-- 
/\ndrés

 amviera en adinet.com.uy <amviera en adinet.com.uy>:
> Gracias Flavio.
>
> Alguna vez pregunté acerca de eso y nadie me dio mucho corte.
> Tampoco he podido acceder a información desde el proyecto BUTIA, aunque sé
> que ellos utilizan el puerto USB
>
> Sólo hay que averiguar cómo escribir y leer datos (nivel alto o bajo) en los
> pines 2 y 3 del puerto. No debbe ser nada complicado.
>
>
> Probé, pero no pude instalar pyusb.
>
> Además, Adrián, entre los pines 1 y 4 alimentás el motor (si no consume
> mucho) y entre los pines 2 y 3, respecto a masa, podés controlar puertas
> lógicas o relés (transistor por medio) para regular la marcha del motor, es
> decir, para controlar encendido y apagado, velocidad, e incluso sentido del
> giro. Y con un poco de ingenio, con engranajes o poleas lo podés convertir
> en un robot.
>
> Si te interesa te puedo ayudar con la parte electrónica, aunque yo necesito
> que alguien más ayude con la programación del puerto.
>
> Saludos, Mauricio Viera.
>
>
>
>
>
>
>
> ----Mensaje original----
>
> De: fdanesse en gmail.com
>
> Fecha: 25/09/2010 00:25
>
> Para: "Comunidad ceibalJAM"
>
> Asunto: Re: [Olpc-uruguay] Consulta Programacion USB
>
>
>
> Hola.
>
> Como primera respuesta, te digo que nunca he hecho nada con los usb pero ya
> quedo haciendo experimentos.
> Click acá para bajarte pyusb que es el paquete que necesitas para hacer esto
> con python, se instala haciendo python setup.py install desde la terminal en
> el directorio descomprimido.
>
>
> Esto no viene en la xo, y no lo vas a poder instalar, al menos yo no pude,
> tendrás que hacer algunos malabares para que funcione, pero vete
> acostumbrando porque sin root no hay más remedio.
>
> Lo otro que habría que investigar es como acceden los de robótica a los usb,
> pregunta en "proyecto Butiá".
>
>
> Acá te dejo un ejemplo de acceso a las impresoras utilizando pyusb:
>
> import usb
> import os
>
> import sys
> import time
> import types
>
>
> class Printer:
>
>
>     '''
>     Clase que maneja directamente el puerto USB, preguntando al hardware
> conectado
>
>     los parametros indicativos del mismo.
>     '''
>
>
>     def __init__(self, device, configuration, interface):
>
>         if PRINTER_CLASS != interface.interfaceClass:
>
>             raise TypeError, "Tipo de interface non valido!"
>
>
>         self.__devhandle = device.open()
>         self.__devhandle.setConfiguration(configuration)
>
>         self.__devhandle.claimInterface(interface)
>         self.__devhandle.setAltInterface(interface)
>
>
>         self.__intf = interface.interfaceNumber
>         self.__alt    = interface.alternateSetting
>
>
>         self.__conf = (type(configuration) == types.IntType \
>                         or type(configuration) == types.LongType) and \
>
>                         configuration or \
>                         configuration.value
>
>
>         self.__bulkout    = 1
>         self.__bulkin     = 0x82
>
>
>     def __del__(self):
>
>
>         try:
>             self.__devhandle.releaseInterface(self.__intf)
>
>             del self.__devhandle
>         except:
>             pass
>
>
>     def getDeviceID(self, maxlen, timeout = 100):
>
>
>         return self.__devhandle.controlMsg(requestType = 0xa1,
>                                            request = 0,
>
>                                            value = self.__conf - 1,
>                                            index = self.__alt + (self.__intf
> << 8),
>
>                                            buffer = maxlen,
>                                            timeout = timeout)
>
>
>     def getPortStatus(self, timeout = 100):
>
>
>         return self.__devhandle.controlMsg(requestType = 0xa1,
>                                            request = 1,
>
>                                            value = 0,
>                                            index = self.__intf,
>
>                                            buffer = 1,
>                                            timeout = timeout)[0]
>
>     def softReset(self, timeout = 100):
>
>         self.__devhandle.controlMsg(requestType = 0x21,
>
>                                        request = 2,
>                                        value = 0,
>
>                                        index = self.__intf,
>                                        buffer = 0)
>
>
>
>     def write(self, buffer, timeout = 100):
>
>
>         return self.__devhandle.bulkWrite(self.__bulkout,
>                                           buffer,
>
>                                           timeout)
>
>     def read(self, numbytes, timeout = 100):
>
>
>         return self.__devhandle.bulkRead(self.__bulkin,
>                                          numbytes,
>
>                                          timeout)
>
> class usbDispositivo:
>
>
>     '''
>     Modelo de datos de un dispositivo USB (tipo VO)
>
>     '''
>
>     def __init__(self,dispositivo):
>
>
>         self.archivo = ''
>         self.clase = ''
>
>         self.subClase = ''
>         self.protocolo = ''
>
>         self.idFabricante = ''
>         self.idProducto = ''
>
>         self.version = ''
>         self.descripcion = ''
>
>         self.archivo = dispositivo.filename
>         self.clase = dispositivo.deviceClass
>
>         self.subClase = dispositivo.deviceSubClass
>         self.protocolo = dispositivo.deviceProtocol
>
>         self.idFabricante = dispositivo.idVendor
>         self.idProducto = dispositivo.idProduct
>
>         self.version = dispositivo.deviceVersion
>
>         try:
>
>             self.descripcion = dispositivo.open().getString(1,30)
>         except:
>
>             self.descripcion = ''
>
>     def getArchivo(self):
>
>         return self.archivo
>
>     def getClase(self):
>
>         return self.clase
>
>     def getSubClase(self):
>
>         return self.subClase
>
>     def getProtocolo(self):
>
>         return self.protocolo
>
>     def getIdFabricante(self):
>
>         return self.idFabricante
>
>     def getIdProducto(self):
>
>         return self.idProducto
>
>     def getVersion(self):
>
>         return self.version
>
>     def getDescripcion(self):
>
>         return self.descripcion
>
>
>
>
> El 24 de septiembre de 2010 22:19, Adrian Silveira <adance en gmail.com>
> escribió:
>
>> Hola a Todos,
>>
>>        mi nombre es Adrián y participo del proyecto de extensión "Isaac,
>> Nikola y Galileo van a la Escuela (INGE) y los estudiantes también" (INGE)
>> de la Facultad de Ingeniería. Se trata de desarrollar actividades
>> relacionadas con la física en escuelas de contexto crítico en Canelones y de
>> esta forma mostrarles que hay otra profesión a la que pueden aspirar. Es una
>> propuesta muy rica, interesante, alentadora, ambiciosa, esperamos que tenga
>> un gran impacto en ellos.
>>
>>
>>
>>
>>
>>
>> Como parte de nuestras actividades, queríamos mostrarles a escolares
>> de cuarto año de escuela como controlar por software un ventilador enchufado
>> a un puerto USB. Ellos lo armarían con los materiales que les damos (cable
>> de datos usb, motor, cartulina) y luego enchufándolo a la ceibalita por el
>> puerto usb se alimentaría de energía para funcionar. Lo que nos gustaría es
>> poder desarrollar un programita bien sencillo, que haga de on/off de la
>> corriente en el puerto usb para así enceder/apagar el ventilador.
>>
>>
>>
>>
>>
>> Agradezco en base a su experiencia si me pueden orientar en si es factible
>> desarrollar un programa que haga esto y todo lo que me puedan aportar para
>> hacerlo se los agradezco.
>>
>>
>> Muchas Gracias
>>
>> Saludos
>> Adrián
>>
>> --
>> "Podría Estar Encerrado en una Cascara de Nuez y Sentirme Rey de un
>> Espacio Infinito..."
>>
>>
>> _______________________________________________
>>
>> Olpc-uruguay mailing list
>>
>> Olpc-uruguay en lists.laptop.org
>>
>> http://lists.laptop.org/listinfo/olpc-uruguay
>>
>>
>
>
>
>
>
>
> _______________________________________________
> Olpc-uruguay mailing list
> Olpc-uruguay en lists.laptop.org
> http://lists.laptop.org/listinfo/olpc-uruguay
>
>



-- 
/\ndrés


More information about the Olpc-uruguay mailing list