Gracias Flavio.<br/><br/>Alguna vez pregunté acerca de eso y nadie me dio mucho corte.<br/>Tampoco he podido acceder a información desde el proyecto BUTIA, aunque sé que ellos utilizan el puerto USB<br/><br/>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.<br/><br/><br/>Probé, pero no pude instalar pyusb.<br/><br/>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. <br/><br/>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.<br/><br/>Saludos, Mauricio Viera.<br/><br/><br/><br><br/><br><br/><blockquote><br/>----Mensaje original----<br><br/>De: fdanesse@gmail.com<br><br/>Fecha: 25/09/2010 00:25 <br><br/>Para: "Comunidad ceibalJAM"<olpc-uruguay@lists.laptop.org><br><br/>Asunto: Re: [Olpc-uruguay] Consulta Programacion USB<br><br/><br><br/><b>Hola.</b><br><br>Como primera respuesta, te digo que nunca he hecho nada con los usb pero ya quedo haciendo experimentos.<br><a href="https://sites.google.com/site/flaviodanesse/Home/pyusb-1.0.0-a0.zip?attredirects=0&amp;d=1">Click acá para bajarte pyusb</a> que es el paquete que necesitas para hacer esto con python, se instala haciendo <span style="color: rgb(153, 0, 0);">python setup.py install</span> desde la terminal en el directorio descomprimido.<br><br/><br>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.<br><br>Lo otro que habría que investigar es como acceden los de robótica a los usb, pregunta en &quot;proyecto Butiá&quot;.<br><br/><br><b style="color: rgb(0, 0, 153);">Acá te dejo un ejemplo de acceso a las impresoras utilizando pyusb:</b><br><br><span style="color: rgb(153, 0, 0);">import usb</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">import os</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">import sys</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">import time</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">import types</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">class Printer:</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">    &#39;&#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    Clase que maneja directamente el puerto USB, preguntando al hardware conectado</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">    los parametros indicativos del mismo.</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    &#39;&#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">    def __init__(self, device, configuration, interface):</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        if PRINTER_CLASS != interface.interfaceClass:</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">            raise TypeError, &quot;Tipo de interface non valido!&quot;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.__devhandle = device.open()</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__devhandle.setConfiguration(configuration)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.__devhandle.claimInterface(interface)</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__devhandle.setAltInterface(interface)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__intf = interface.interfaceNumber</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__alt    = interface.alternateSetting</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__conf = (type(configuration) == types.IntType \</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                        or type(configuration) == types.LongType) and \</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                        configuration or \</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                        configuration.value</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__bulkout    = 1</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__bulkin     = 0x82</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def __del__(self):</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        try:</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">            self.__devhandle.releaseInterface(self.__intf)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">            del self.__devhandle</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        except:</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">            pass</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getDeviceID(self, maxlen, timeout = 100):</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.__devhandle.controlMsg(requestType = 0xa1,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           request = 0,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                           value = self.__conf - 1,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           index = self.__alt + (self.__intf << 8),</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                           buffer = maxlen,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           timeout = timeout)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getPortStatus(self, timeout = 100):</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.__devhandle.controlMsg(requestType = 0xa1,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           request = 1,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                           value = 0,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           index = self.__intf,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                           buffer = 1,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                           timeout = timeout)[0]</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">    def softReset(self, timeout = 100):</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.__devhandle.controlMsg(requestType = 0x21,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                       request = 2,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                       value = 0,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                       index = self.__intf,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                       buffer = 0)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def write(self, buffer, timeout = 100):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        return self.__devhandle.bulkWrite(self.__bulkout,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                          buffer,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                          timeout)</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def read(self, numbytes, timeout = 100):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        return self.__devhandle.bulkRead(self.__bulkin,</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">                                         numbytes,</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">                                         timeout)</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">class usbDispositivo:</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    &#39;&#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    Modelo de datos de un dispositivo USB (tipo VO)</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">    &#39;&#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def __init__(self,dispositivo):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.archivo = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.clase = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.subClase = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.protocolo = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.idFabricante = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.idProducto = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.version = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.descripcion = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.archivo = dispositivo.filename</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.clase = dispositivo.deviceClass</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.subClase = dispositivo.deviceSubClass</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.protocolo = dispositivo.deviceProtocol</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.idFabricante = dispositivo.idVendor</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        self.idProducto = dispositivo.idProduct</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        self.version = dispositivo.deviceVersion</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        try:</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">            self.descripcion = dispositivo.open().getString(1,30)</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">        except:</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">            self.descripcion = &#39;&#39;</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getArchivo(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.archivo</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getClase(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.clase</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getSubClase(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.subClase</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getProtocolo(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.protocolo</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getIdFabricante(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.idFabricante</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getIdProducto(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.idProducto</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getVersion(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.version</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);">    def getDescripcion(self):</span><br style="color: rgb(153, 0, 0);"><br/><span style="color: rgb(153, 0, 0);">        return self.descripcion</span><br><br><br><br><br><div class="gmail_quote">El 24 de septiembre de 2010 22:19, Adrian Silveira <span dir="ltr"><<a href="mailto:adance@gmail.com">adance@gmail.com</a>></span> escribió:<br><br/><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><blockquote>Hola a Todos,<br><br/>           mi nombre es Adrián y participo del proyecto de extensión &quot;Isaac, Nikola y Galileo van a la Escuela (INGE) y los estudiantes también&quot; (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.<br><br/><br/><br/><br/>    <br><br/>    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.<br><br/><br/><br/><br/>    <br>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.<br><br/>    <br>Muchas Gracias<br><br/>    Saludos<br>Adrián </blockquote>-- <br><font color="#888888">&quot;Podría Estar Encerrado en una Cascara de Nuez y Sentirme Rey de un Espacio Infinito...&quot;<br><br/></font><br>_______________________________________________<br><br/>Olpc-uruguay mailing list<br><br/><a href="mailto:Olpc-uruguay@lists.laptop.org">Olpc-uruguay@lists.laptop.org</a><br><br/><a href="http://lists.laptop.org/listinfo/olpc-uruguay" target="_blank">http://lists.laptop.org/listinfo/olpc-uruguay</a><br><br/><br></blockquote></div><br><br/><br><br/></blockquote<br><br/>