ESP8266 Deep Sleep with Arduino IDE | Random Nerd Tutorials

Deep Sleep mode

Let’s start with a simple example. You need to use a wire to connect the RST pin to GPIO 16 which is labeled as D0, in a NodeMCU board. Simply follow the next schematic:

If you take a look at the NodeMCU pinout, you can see that GPIO 16 is a special pin and it has a WAKE feature

 

The RST pin of the ESP8266 is always HIGH while the ESP8266 is running. However, when the RST pin receives a LOW signal, it restarts the microcontroller.

If you set a Deep Sleep timer with the ESP8266, once the timer ends, GPIO 16 sends a LOW signal. That means that GPIO 16 when connected to RST pin can wake up the ESP8266 every time the timer ends.

Source: ESP8266 Deep Sleep with Arduino IDE | Random Nerd Tutorials

ESP8266 crashes with receiver enabled

Changes I did:
Have the protocols in RAM
#ifdef ESP8266
// because of timing reasons we keep that in memory on esp8266
static const RCSwitch::Protocol proto[] = {
#else
static const RCSwitch::Protocol PROGMEM proto[] = {
#endif

Changes to receiveProtocol (called by ISR)
#ifdef ESP8266
bool ICACHE_RAM_ATTR RCSwitch::receiveProtocol(const int p, unsigned int changeCount) {
#else
bool RCSwitch::receiveProtocol(const int p, unsigned int changeCount) {
#endif

Source: https://github.com/sui77/rc-switch/issues/46