¿Encender y apagar un puerto 3G (o cualquier puerto USB)?

13

Tengo un proyecto que requerirá el uso de una Raspberry Pi en un entorno de baja potencia, pero también requerirá una conexión 3G. Todavía no he hecho ninguna prueba, pero supongo (y me corrijo si me equivoco) que un módem 3G conectado a una Raspberry Pi y conectado a una red usará energía y, dado el entorno, cualquier energía adicional El uso no es un requisito. Entonces, ¿cómo, programáticamente, puedo encender y apagar un módem 3G o el conector USB en una Raspberry Pi?

TiernanO
fuente
1
AFAIK No puede apagar un puerto USB, por lo que dependería de que el dongle 3G tenga un modo de ahorro de energía: probablemente usa menos energía cuando no está conectado ... pero probablemente usa una cantidad razonable de energía para conectarse / desconectarse.
Alex Chamberlain
1
Lo que pasa es que esta será una unidad completamente autónoma y remota ... debería encender y apagar 3G según sea necesario ... no habrá nadie allí para desenchufarlo o enchufarlo ... de ahí la parte programática ...
TiernanO
3
Como dijo Alex, no existe un mecanismo para controlar la energía a los puertos USB del Pi desde el software: están conectados directamente al riel de suministro con solo un limitador de corriente pasivo. Por lo tanto, a menos que pueda decirle al periférico que se apague / suspenda, necesitará un dispositivo de conmutación de alimentación externo, que controle a través del USB o mediante un pin GPIO.
Chris Stratton

Respuestas:

8

Lamentablemente, no hay forma de apagarse completamente solo con el software. Deberá agregar un circuito de conmutación conectado a través de los pines GPIO para activar una "desconexión de hardware" cortando la alimentación de su hardware.

Editar:

Para cambiar con GPIO es solo un simple circuito de transistor.

ingrese la descripción de la imagen aquí

Bestá conectado a su pin GPIO. Dependiendo de si es ALTO o BAJO, el transistor está encendido o apagado. Cy Epones la línea de alimentación al dispositivo USB (R L ).

Para obtener información más detallada, consulte mejor este sitio: http://www.kpsec.freeuk.com/trancirc.htm#switching y especialmente en http://www.kpsec.freeuk.com/trancirc.htm#ic

Mose
fuente
¿Crees que podrías entrar en más detalles sobre cómo hacer esto?
Jivings
Seguro. Voy a editar
Mose
sí, eso es bueno: puede colocar ese transistor en un cable de extensión USB corto. Deberá abrirlo e interceptar las líneas de alimentación que se mencionan aquí. Luego puede enchufar 3G en la extensión y controlar la alimentación. Me gusta +1
Piotr Kula
¡Eso parece prometedor! ¡Gracias! tendré que conversar con mi amigo de Ingeniería Eléctrica para ayudar con eso, ¡pero los dedos cruzados! ¡Gracias de nuevo!
TiernanO
5

No le aconsejaría que ENCIENDA / APAGUE un dispositivo USB simplemente usando un interruptor de base de transistor porque el protocolo de ENCENDIDO / APAGADO y la interfaz eléctrica deben usarse según lo definido por las especificaciones del USB.

Prefiero usar un concentrador USB conmutable que le permita ENCENDER / APAGAR cualquiera de sus puertos descendentes a través del software mediante un simple comando.

Algo como este concentrador USB conmutable debería funcionar para lo que desea.

electrfunch
fuente
1
Eso se ve tan genial! Tengo que intentarlo ... Estoy pensando que esto también podría ser útil para la carga inteligente de teléfonos ... Hmmm ... ¡Gracias!
TiernanO
2
Descargo de responsabilidad: ahora estoy trabajando en Yepkit. Entonces puede considerarme parcial en este tema.
electrfunch
1
Como un dispositivo puede ser enchufado por un usuario en cualquier momento, las especificaciones de USB establecen que esto debe ser manejado por controladores y dispositivos. Así que no veo el punto de gastar 29 € cuando puedes construir productos electrónicos simples por centavos con el mismo resultado y también respaldados por especificaciones.
Mose
3

Puede usar mi herramienta uhubctl , es compatible con los modelos B +, 2B, 3B, 3B + y 4B de Raspberry Pi: estos modelos tienen capacidad de hardware para apagar y encender el USB. Pero tenga en cuenta que este hardware solo admite apagar o encender todos los puertos USB a la vez, no de forma independiente. Sin embargo, los rieles de alimentación USB y Wifi + Ethernet se pueden controlar de forma independiente (a excepción de 4B, que no utiliza la interfaz USB para la conexión en red).

Úselo así:

Apague todos los puertos USB (debe usar el puerto 2):

sudo uhubctl -p 2 -a 0

Encienda la alimentación de todos los puertos USB (debe usar el puerto 2):

sudo uhubctl -p 2 -a 1

Apague la alimentación de Wifi + Ethernet (debe usar el puerto 1):

sudo uhubctl -p 1 -a 0

Tenga en cuenta que Raspberry Pi 4 es muy diferente de los modelos anteriores, ya que tiene un chip USB3. Usaría un comando como este para apagar (debe usar el puerto 4):

sudo uhubctl -l 2 -p 4 -a 0

Si su Raspberry Pi no es compatible con la conmutación de alimentación USB, puede conectar un concentrador USB externo que sí lo hace (consulte la lista de modelos compatibles ) y controlar la alimentación de ese concentrador externo utilizando uhubctl.

mvp
fuente
2

Hola, estoy de acuerdo con @electrfunch ya que estoy trabajando en un proyecto de control de dispositivos en los puertos USB. En lugar del circuito electrónico a bordo propuesto por @Mose, creé mi propia placa de aislamiento utilizando relés y se parece al Hub de conmutador USB y esto tiene sentido ya que, aunque inicialmente se ignora, las corrientes dentro de la Raspberry Pi comenzarán a convertirse en un criterio en un ejecución más larga que podría afectar su rendimiento de Pi.

Por lo que quiero decir, puede consultar estos manuales para mediciones de baja corriente:

Referencia 1

Referencia 2

Shan-Desai
fuente