Hi, it's been a long time since you posted this post. I hope you have solved the problems you had.
I write here because I'm in the same situation:
I'm using the RadioHead RFM library and RH_RF69 library to enable communication between Atmega32u4 and ESP32.
As node:
1- Atmega32u4 wakes up every 60 seconds and reads sensors data.
2- Atmega32u4 sends data over RFM69HCW and goes to sleep again.
As Gateway:
1- Esp32 is in deep sleep mode and the setup for RFM69HCW is done.
2- If data is received by RFM69, then ESP32 will wake up by DIO0 connected to GPIO27 pin from ESP32 and received data will be stored in ESP32.
When using energy saving mode, the frames are sent but not processed by ESP32 (server). Sometimes when I restart esp32 server i can see the first frame received (using a Logic Analyzer and Logi 2 - Saleae) but ESP32 never wake up again. But normally, if esp32 is not in an eternal sleep, the ESP32 wakes up caused from ext0 wakeup when I receive a message it wakes up but then the condition if(rf69.available ()) is always false and I am not able to read the message from the buffer.
In the sketch of the gateway, I have all the code in setup () and nothing in the loop (). I cannot read the frame correctly because of the problems described above.
The RFM69 module does not have a built-in buffer to save the data itself, therefore the only method I can think of is to send esp32 to sleep in the loop () after reading if there is any data available using radio.available ( ).
Finally what you get is to wake up the microcontroller and run the loop normally. When you have received the expected data, you send it to sleep.
The problem that I have encountered here is that I need to send from the node a message to wake up the esp and then send the desired message. If I don't do this and I only send the message once, the esp32 will wake up and as soon as it wakes up I receive the buffer, but since I haven't read it yet, this buffer is lost.
For this reason, I need to send an "awake" message so that the loop is executed with the available () and to be able to correctly read the following message. After reading the message, I send the microcontroller to sleep again.
Could someone say if this is a good method to solve the problem? Does anyone know of any method to read the message just when esp32 wakes up without having to send 2 messages and having the loop () empty?