¿Usted, por casualidad, establece el GPIO en el principio de su código? Porque eso explicaría por qué piensa no funciona.
La señal de HECHO es exactamente eso: "Ya he terminado, puedes apagarme". Debe ser la última línea de código en su NodeMCU.
ACTUALIZACIÓN
Está bien, hice algunas excavaciones y parece que hay varios posibles culpables.
- Primero, no estás solo teniendo este problema. De hecho, la Hoja de datos de Adafruit reconoce un problema y recomienda agregar Condensador de 47 uF a NodeMCU Vcc. Muchas personas en el foro dicen que no es suficiente y que necesitaban al menos 100 uF para que funcionara (vi sus publicaciones por cierto).
Enlaces al foro: uno , two .
Esto es totalmente incorrecto IMHO. No debe haber ningún pico de potencia enorme al inicio (¡no con un sorteo de 80 mA!). El condensador solo retrasaría el tiempo de subida en el encendido y evitaría que NodeMCU se apagara correctamente al apagar. Es más bien el enfoque de "vamos a agregar el límite y ver qué pasa". Incluso si funciona, no identifica el problema real.
Además, si realmente tiene algo que ver con la caída de la línea eléctrica, entonces tiene sentido agregar un condensador antes del MOSFET. De esta manera, no retrasará el arranque, sino que complementará el arranque actual.
- Segundo, este hilo me recordó una peculiaridad de los chips TPL5110 / TPL5111.
El funcionamiento normal es: el temporizador se activa DRV, MCU arranca, hace lo que se supone que debe hacer y señala DONE, el temporizador se apaga.
Sin embargo, si DONE no se recibe, entonces el temporizador hace que DRV se apague 50 antes del final del período. Aunque la hoja de datos no lo tiene claro, tengo entendido que lo hace para que pueda volver a activar DRV cuando finalice el período, es decir, casi de inmediato (en 50 unidades).
Entonces, si el período programado es corto, se vería como "parpadear". Para evitar este período de tiempo debe establecerse el tiempo suficiente para que la MCU arranque, haga su trabajo y aún tenga tiempo suficiente para indicar HECHO.
- Otro candidato potencial es ESP8266 en sí mismo.
Es el volcado del cargador de arranque registro de arranque a UART durante el inicio. AFAIK esto no puede ser completamente deshabilitado. Por lo tanto, si usa el pin de TX para la señal de HECHO, está en problemas.
- Finalmente, y esto es lo que creo que es el verdadero culpable de muchas personas en el foro de Adafruit, algunos pines GPIO de NodeMCU se dispararon durante el arranque .
Consulte aquí y here para una investigación de este problema (el primer enlace es el timbre muerto de su caso). Debo decir que este es un comportamiento bastante extraño para MCU. Siempre asumí que todos los pines permanecen en alto Z hasta que los programe de otra manera ...
En resumen, debe asegurarse de usar los pines "seguros" para la señal DONE. Curiosamente, agregar el capacitor después MOSFET podría enmascarar este problema manteniendo a NodeMCU vivo hasta el próximo período, tal como dije al principio (una solución funcional sin entender un problema).
ACTUALIZACIÓN 2
OK, mientras que todo lo anterior puede causar el comportamiento observado (especialmente al elegir el pin "inseguro" para HECHO), el culpable más probable es el consumo de alta corriente del ESP en el inicio. Aquí, encontré un artículo interesante sobre este tema, que reclama hasta 400 mA en el inicio, con posible bloqueo en este estado si el aumento de potencia es demasiado lento.
Ahora que sabía qué buscar, encontré cientos de páginas sobre este problema, como esta publicación en el foro de Espressif.
En conclusión : ESP consume mucha corriente durante el arranque. Además, puede bloquearse en esta condición si el voltaje no aumenta lo suficientemente rápido. Al agregar el capacitor anterior , MOSFET resuelve ambos problemas al proporcionar instantáneamente la energía requerida sin reducir el tiempo de aumento de voltaje.