My 1.9829 cents says to do both.
Here is a link to an example of using solar to power an ESP32.
The same can be applied to a pro-mini.
A plug:
The ESP32 has 3 cores.
The ULP core is a Ultra Low Power core. The ESP32 can be shut to a sate of drawing as low as 25uA. The ULP can be programed, using macro assembler, to run periodically to check on a defined state or do a thing, or both check on state and do a thing. A do a thing could be awaking the rest of the system when their is a defined state. The ULP can be programmed with the Arduino IDE.
Here is how a ULP core program works written in the Arduino IDE:
void ULP_BLINK_RUN(uint32_t us)
{
int memPortState = 8000; // memory address outside of program space to use
int memCounts = 8001; // memory address to hold a count
size_t load_addr = 0;
RTC_SLOW_MEM[memPortState] = 0;
// RTC_SLOW_MEM[memCounts] = 0;
ulp_set_wakeup_period(0, us);
const ulp_insn_t ulp_blink[] =
{
// I_MOVI( R2, memCounts ), // get info from memCounts address
// I_LD( R1, R2, 0 ), // put contents of memCounts into R1
// I_ADDI( R1, R1, 1 ), // Add 1 to R1 holding result into R1
// I_ST( R1, R2, 0 ), // Put R1 into mem address pointed to by R2
I_MOVI(R3, memPortState), // memPortState -> R3
I_LD(R0, R3, 0), // R0 = RTC_SLOW_MEM[R3(memPortState)]
M_BL(1, 1), // GOTO M_LABEL(1) IF R0 < 1
I_WR_REG(RTC_GPIO_OUT_REG, 26, 27, 1), // RTC_GPIO2 = 1
I_SUBI(R0, R0, 1), // R0 = R0 - 1, R0 = 1, R0 = 0
I_ST(R0, R3, 0), // RTC_SLOW_MEM[R3(memPortState)] = R0
M_BX(2), // GOTO M_LABEL(2)
M_LABEL(1), // M_LABEL(1)
I_WR_REG(RTC_GPIO_OUT_REG, 26, 27, 0), // RTC_GPIO2 = 0
I_ADDI(R0, R0, 1), // R0 = R0 + 1, R0 = 0, R0 = 1
I_ST(R0, R3, 0), // RTC_SLOW_MEM[R3(memPortState)] = R0
M_LABEL(2), // M_LABEL(2)
I_HALT() // HALT COPROCESSOR
};
rtc_gpio_init( GPIO_NUM_2 ); // GPIO2 built in led
rtc_gpio_set_direction( GPIO_NUM_2, RTC_GPIO_MODE_INPUT_OUTPUT );
rtc_gpio_set_level( GPIO_NUM_2, 0);
size_t size = sizeof(ulp_blink) / sizeof(ulp_insn_t);
ulp_process_macros_and_load( load_addr, ulp_blink, &size);
ulp_run( load_addr );
} // void ULP_BLINK_RUN(uint32_t us)