ESP8266, GPIO0 o GPIO2 como entrada

4

Tengo un ESP8266-01 y quiero usarlo para verificar si mi puerta está abierta o no usa GPIO0 o GPIO2 como entrada.

Como GPIO0 y GPIO2 deben ser altos o flotantes en el arranque, no puedo conectar directamente mi interruptor a ninguno de ellos. La solución es que conecto el interruptor entre GPIO0 y GPIO2 para que al inicio ambos sean altos y, una vez que se haya iniciado el chip, configure GPIO0 como salida y bajo. Ahora, si el interruptor está abierto, GPIO2 leerá alto y si está cerca, leerá bajo. Esto es lo que entiendo de las discusiones y publicaciones en varios lugares.

Pero, soy nuevo y confuso! : P

¿Puedo conectar GPIO0 y GPIO2 directamente sin nada más? ¿Sin flexiones, sin resistencias intermedias?

¿Está bien conectar directamente GPIO0 y GPIO2 con un cable en el arranque? ¿Y también cuando GPIO0 tiene una salida baja y GPIO2 se ingresa?

Según tengo entendido, en el modo de salida, GPIO está conectado con VCC o tierra con una resistencia muy baja. ¿Qué pasa con la entrada? ¿Cómo se implementa? Si conecto la salida de GPIO0 a la entrada de GPIO2, ¿hay alguna posibilidad de cortocircuito?

Al configurarlo después del arranque, ¿hay alguna secuencia específica que deba configurar GPIO0 y GPIO2 como salida o entrada respectivamente? ¿Importa?

Por lo que entiendo, el chip tiene pull-ups internos. Pero las discusiones en la red dan una idea muy confusa sobre la necesidad de resistencias de pull-up externas. ¿Se necesitan resistencias pull-up para implementar esto?

    
pregunta nisargjhaveri

1 respuesta

4

Este es el medio estándar para hacer lo que necesita con una pequeña explicación.

simular este circuito : esquema creado usando CircuitLab

Figura 1. Un arreglo de detección de interruptor GPIO típico con pull-up externo.

Cómo funciona:

  • Si SW1 está abierto, entonces R1 tira de la entrada a V +, que el micro leerá como un '1' lógico.
  • Si SW1 está cerrado, la entrada pasará a GND y se leerá como un cero lógico.
  • C1 agrega un poco de "rebote" para disminuir el aumento y la caída de la tensión de entrada en caso de que se produzca una charla o un rebote al abrir o cerrar el contacto. Puede calcular el retraso aproximado simplemente \ \ \ \ tau = R1 \ cdot C1 = 10k \ cdot 100n = 1 \ \ mathrm {ms} \ $. \ $ \ tau \ $ (la letra griega tau) es la constante de tiempo.

Algunos puntos más:

  • Como R1 está conectado al mismo V + que el micro, será imposible que el voltaje de GPIO exceda el voltaje de suministro (lo que podría dañar el chip). El voltaje en cada uno aumentará al unísono.
  • Debido a que esta disposición de conmutación es muy común y se requieren resistencias de pull-up, es habitual que muchos de estos micros incluyan pull-ups internos. Si habilitas el tuyo en tu programa, entonces se puede omitir R1.

Ahora a tus preguntas:

  

¿Puedo conectar GPIO0 y GPIO2 directamente sin nada más? ¿Sin flexiones, sin resistencias intermedias?

Esto debería quedar claro a partir de la respuesta anterior.

  

¿Está bien conectar directamente GPIO0 y GPIO2 con un cable en el arranque? ¿Y también cuando GPIO0 tiene una salida baja y GPIO2 se ingresa?

Eso está bien. Sería un problema si tuviera dos salidas conectadas juntas y una intentara dar un 'alto' mientras que la otra emitiera un 'bajo'.

  

Según tengo entendido, en el modo de salida, GPIO está conectado con VCC o tierra con una resistencia muy baja. ¿Qué pasa con la entrada? ¿Cómo se implementa? Si conecto la salida de GPIO0 a la entrada de GPIO2, ¿hay alguna posibilidad de cortocircuito?

Cuando el GPIO se configura como una entrada, es esencialmente un transistor que controla el voltaje de entrada. Ya que no está generando o hundiendo ninguna corriente, no puede dañarse al tirar de la entrada a alto o bajo. Por otro lado, si corta una salida a tierra e intenta establecer una salida alta, entonces obtendrá una corriente alta de la salida y posiblemente dañará el dispositivo.

  

Al configurarlo después del arranque, ¿hay alguna secuencia específica que deba configurar GPIO0 y GPIO2 como salida o entrada respectivamente? ¿Importa?

Solo tú puedes responder eso ya que no sabemos qué está conectado. Generalmente no hay problema.

  

Por lo que entiendo, el chip tiene pull-ups internos. Pero las discusiones en la red dan una idea muy confusa sobre la necesidad de resistencias de pull-up externas. ¿Se necesitan resistencias pull-up para implementar esto?

El pull-up, ya sea externo o interno, es necesario si existe la posibilidad de que la entrada pueda "flotar" a un nivel indefinido. Si no se usó el pull-up en la Figura 1, entonces la apertura del SW1 dejaría la entrada flotante y susceptible a voltajes parásitos e interferencias eléctricas, lo que daría lecturas poco confiables del estado del interruptor.

    
respondido por el Transistor

Lea otras preguntas en las etiquetas