<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&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>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 "proyecto Butiá".<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);">
<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);">
<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);">
<span style="color: rgb(153, 0, 0);"> '''</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);">
<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);"> '''</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, 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);">
<span style="color: rgb(153, 0, 0);"> raise TypeError, "Tipo de interface non valido!"</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 = 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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);"> Modelo de datos de un dispositivo USB (tipo VO)</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);"> </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);">
<span style="color: rgb(153, 0, 0);"> </span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> self.archivo = ''</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> self.clase = ''</span><br style="color: rgb(153, 0, 0);">
<span style="color: rgb(153, 0, 0);"> self.subClase = ''</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> self.protocolo = ''</span><br style="color: rgb(153, 0, 0);">
<span style="color: rgb(153, 0, 0);"> self.idFabricante = ''</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> self.idProducto = ''</span><br style="color: rgb(153, 0, 0);">
<span style="color: rgb(153, 0, 0);"> self.version = ''</span><br style="color: rgb(153, 0, 0);"><span style="color: rgb(153, 0, 0);"> self.descripcion = ''</span><br style="color: rgb(153, 0, 0);">
<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);">
<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);">
<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);">
<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);">
<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);">
<span style="color: rgb(153, 0, 0);"> self.descripcion = ''</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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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);">
<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>
<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>
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.<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>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>Muchas Gracias<br>
Saludos<br>Adrián </blockquote>-- <br><font color="#888888">"Podría Estar Encerrado en una Cascara de Nuez y Sentirme Rey de un Espacio Infinito..."<br>
</font><br>_______________________________________________<br>
Olpc-uruguay mailing list<br>
<a href="mailto:Olpc-uruguay@lists.laptop.org">Olpc-uruguay@lists.laptop.org</a><br>
<a href="http://lists.laptop.org/listinfo/olpc-uruguay" target="_blank">http://lists.laptop.org/listinfo/olpc-uruguay</a><br>
<br></blockquote></div><br>