ESP-12 not waking from deep sleep

I recently spent a lot of time trying to get the deep sleep functionality on my ESP-12 working – whenever the ESP went into deep sleep, it would not wake up again after the delay had passed. If I had a serial session open via my CP2102 USB to serial converter, I would get some garbled characters back from the ESP as soon as it woke up. Also, with a multimeter connected, the current draw would go up from a few microamps in deep sleep to a current of around 600mA as it woke up, but without booting up normally. Eventually, I accidentally fixed it by removing a pull up connection that was clearly causing the problem…

2016-04-16 22.38.22

The module I have is labelled as a ESP-12-E, but the CH_PD pin usually found on the ESP-12-E is labelled as EN instead (I’m not sure if this makes it a ESP-12-Q instead?)

Most threads recommend the following connections to enable proper deep sleep operation of the ESP:

– GPIO0 -> 4k7 resistor -> VCC (to avoid “Zombie mode”)
– GPIO2 -> 4k7 resistor -> VCC (to avoid “Zombie mode”)
– GPIO15 -> 4.7k resistor -> Ground
– CH_PD / EN -> 4k7 resistor -> VCC (needed for start-up)
– GPIO16 -> RST -> 4.7k resistor -> VCC (to enable deep sleep)

However, this caused the above symptoms for my ESP. It was only when I accidentally removed the pull up connection to RST that I realized how to get my ESP module to wake up from deep sleep properly. The following wiring now works for me:

– GPIO0 -> 4k7 resistor -> VCC
– GPIO2 -> 4k7 resistor -> VCC
– GPIO15 -> 4.7k resistor -> Ground
– CH_PD / EN -> RST
– GPIO16 -> RST

Effectively, neither GPIO16, CH_PD / EN or RST are now connected to VCC via pull-up resistor. I am not sure why this wiring works, but it does and hopefully it will save someone else a few hours too!