Tengo un ESP-12 soldado en esta placa adaptadora . Estoy usando el firmware basado en NodeMCU Lua para codificar la lógica.
Lo he programado node.restart
para que se ejecute periódicamente. 1 de los pines GPIO se usa para controlar un componente externo usando el estado ALTO o BAJO. Puedo restaurar el estado de GPIO (ALTO/BAJO) después, node.restart
pero durante el reinicio, el estado de GPIO no está definido. Quiero mantener ese estado, especialmente si el estado era ALTO.
Un enfoque que tengo en mente es tener otro microcontrolador como ATTinyX que está conectado a ESP-12 a través de UART. ESP-12 puede dar una cadena/caracter a ATTinyX para mantener el estado (el pin GPIO de ESP-12 y el pin ATTinyX están conectados al componente externo a través de una puerta OR) y luego reiniciar. Una vez que se completa el reinicio de ESP-12, puede decirle a ATTinyX que no mantenga el estado porque ESP-12 puede mantenerlo ahora después del reinicio.
Esto agrega un poco de costo y componentes, ¿hay alguna forma diferente de lograr lo mismo? Estoy más en el lado del software, tengo menos conocimientos de electrónica. Cualquier ayuda es apreciada. Tal vez sea similar a la memoria de 1 bit que se configura / restablece con ESP-12, ¿puedo usar un flip flop en este caso?
simular este circuito : esquema creado con CircuitLab
Figura 1. Condensador de retención de estado.
Conecte un GPIO de repuesto como se muestra. Al reiniciar, lea el estado del capacitor y configure la salida de manera apropiada. Esto le dará una memoria a corto plazo de 1 bit.
//Pseudo code to go early in boot sequence.
pinPullup(pin) = false; //Turn off the pull-up.
pinMode(pin) = input; //Set the pin to input mode, if required.
pdState = pinRead(pin); //Read the input to get the power-down state.
pinMode(pin) = output; //Configure as output.
pinWrite(pin) = pdState; //Restore the power-down state.
Es posible que desee cambiar el orden de las dos últimas líneas (según el micro) para evitar un parpadeo momentáneo.
Tenga en cuenta que en esta configuración, el pin no se puede usar para nada más.
Eche un vistazo a los expansores I2C como MCP23008. Básicamente, la misma configuración que su ATtiny menos otro firmware. Simplemente mantendrá cualquier estado que desee, independientemente de los reinicios de ESP.
Intente usar un capacitor que proporcione el voltaje requerido para la duración del reinicio. El siguiente enlace puede ayudarlo a encontrar el valor de capacitor apropiado.
http://www.electronics-tutorials.ws/rc/rc_2.html
editar:
simular este circuito : esquema creado con CircuitLab
Para ser más específicos, asumo que el tiempo requerido para reiniciar es menos de dos segundos, por lo que ahora la constante de tiempo de la red RC debe ser casi el doble del tiempo de reinicio. Elegir una constante de tiempo de 4,7 segundos.
Constante de tiempo T = R * C
es decir, 4.7 s = 4.7K OHMIOS * 1000uf
La razón por la que deberíamos tener la constante de tiempo para que sea el doble del tiempo requerido es que, cuando un capacitor comienza a descargarse, a la mitad de la constante de tiempo, el voltaje del capacitor sería aproximadamente el 60 % del voltaje mientras está completamente cargado, que es de 3 voltios a 2,35 segundo, dado que el tiempo de reinicio es menor que eso, se mantendrá un nivel alto.
Si se conoce el estado del pin antes del apagado, puede usar pull up o pull down para mantener ese estado mientras el my se está iniciando. Los capacitores grandes también pueden ayudar.
El problema es que los pines generalmente están predeterminados en funciones de salida o no GPIO, por lo que observa sus estados en el reinicio.
Intente usar un pestillo simple, pero es posible que necesite tres pines GPIO. Mientras se ejecuta, si la salida en el GPIO que está utilizando es ALTA, proporcione un pulso alto-bajo en SET, y si está en LOW, haga lo mismo en RESET. Durante el encendido, verifique el estado de Q, si es ALTO, mantenga el pin GPIO requerido como ALTO, de lo contrario, hágalo BAJO
Cisne y
ritoshtch
broma
kapil singh