ESP8266: diferenciar la activación debido al intervalo entre el modo de suspensión y la presión del botón

4

Tengo un ESP8266, ESP-12F módulos que está en modo de suspensión profunda.

Se despierta cada 6 horas para leer el sensor de humedad, mostrarlo en el LED y luego publicarlo en IFTTT. Debido a que es cada 6 horas, en realidad se despierta cada hora solo para verificar un contador almacenado en la EEPROM para ver si ha transcurrido la hora 6. De lo contrario, aumentará o restablecerá el contador EEPROM en consecuencia.

También quiero que el usuario presione un botón para activar el ESP, leer el sensor de humedad, mostrarlo en el LED y enviarlo a IFTTT incluso si no han transcurrido las 6 horas.

¿Hay alguna forma de diferenciar la activación debido al intervalo de suspensión frente a un botón que se reinicia? En ambos casos, el motivo de reinicio es 5.

Estoy abierto a soluciones de hardware y firmware.

También he intentado simular un posible circuito . Pero el GPIO12 (que estoy intentando leer como BAJO justo después de que ESP se despierta) no se mantiene en el valor BAJO el tiempo suficiente para que lo lea justo después de despertarme.

    
pregunta Sayanee

1 respuesta

3

Una solución de hardware es utilizar SR Latch . A partir de la descripción, parece que la NAND one (/ S, / R) sería adecuada en esta situación. Debería poder encontrar un chip con dicho pestillo o construir uno a partir de compuertas usando, por ejemplo, 74HC00 (4 nand compuertas de las cuales 2 se usarían). Sin embargo, se necesita un pin adicional para restablecer el pestillo SR después del encendido causado por el botón externo.

La conexión podría ser la siguiente:

  • / S: conectado al botón de activación conectado también a ESP8266. Suponiendo que el despertador ESP8266 (/ RESET) está activo bajo, el interruptor momentáneo se desplaza a GND, y esta línea normalmente se levanta (como en el esquema falstad de la pregunta).
  • / R - conectado a alguna salida del ESP8266 (GPIO) - también necesitarías tirar hacia arriba en este pin, por lo que se define cuando ESP8266 está apagado.
  • Q (salida SR): conectado a alguna entrada del ESP8266 (GPIO)

La operación sería la siguiente:

  1. Al presionar el interruptor momentáneo (cortocircuitando a GND), cambiaría el estado de la salida SR a 1.
  2. Una vez finalizado el arranque, el software leerá el estado de la Q: si es "1", este se enciende debido al interruptor / si es 0 se enciende debido al temporizador.
  3. Antes de volver a dormir, armaría el pestillo SR para el siguiente encendido aplicando un pulso corto a GND en el pin / R para que Q sea 0.

Un inconveniente de esta solución es que, después de aplicar la alimentación al sistema por primera vez (3,3 V de rampa), se desconoce el estado del latch SR (0 o 1). Esto significa que podría interpretar mal el primer motivo de encendido, pero más adelante estaría bien.

Descargo de responsabilidad estándar: la solución se proporciona sin simulación o creación de prototipos: debe analizarla, verificar si funciona y si es adecuada para su aplicación.

    
respondido por el mazurnification

Lea otras preguntas en las etiquetas