I can get the Photon to do most things I want, but it absolutely refuses to wake up after a timed deep sleep period. This is very simple. What am I doing wrong please?
I am using the Photon as a Central Heating controller powered from a solar charged battery. To save power I want to switch it off during the later hours of darkness.
Device goes to sleep fine - power consumption drops to almost zero (important). After 40 minutes the LEDs stay off and it needs a press of the reset button to get things going again.
Setup and loop code is thus:
void setup()
{
Particle.function("digitalread", tinkerDigitalRead);
Particle.function("digitalwrite", tinkerDigitalWrite);
Particle.function("analogread", tinkerAnalogRead);
Particle.function("analogwrite", tinkerAnalogWrite);
tinkerDigitalWrite("D0 LOW"); // CH control set safe
tinkerDigitalWrite("D1 LOW"); // HW control set safe
pinMode(2, INPUT_PULLDOWN); // CH status input
pinMode(3, INPUT_PULLDOWN); // HW status input
pinMode(4, INPUT_PULLDOWN); // pump status input
pinMode(7, OUTPUT); // LED driver is output
pinMode(10, INPUT); // Top HW temp
pinMode(11, INPUT); // Bottom HW temp
pinMode(14, INPUT); // Supply voltage (12V)
}
void loop()
{
delay(200); // 200ms loop delay
if (Time.hour() > 0 && Time.hour() < 10) {
tinkerDigitalWrite("D7 HIGH");
delay(600);
tinkerDigitalWrite("D7 LOW");
delay(1600);
if (sleeping == false) {
System.sleep(SLEEP_MODE_DEEP, 2400); // sleep for 40 minutes
sleeping = true;
}
}
else {
tinkerDigitalWrite("D7 LOW");
sleeping = false;
}
}
I did a little searching around, and if I understand correctly, waking from deep sleep is like powering it up after it is off, so doesn't the code stop executing after System.sleep(), never executing the rest of the code - sleeping will never be true.
Also, try declaring your pins with their proper names, e.g. A1/D1. Currently, it could be either. I’m not sure how your tinkerDigitalWrite function looks like, but it might be calling pins before declaring them.
Without changing any other code, I reduced the deep_sleep period to 40 seconds. It worked - the Photon sprang into life again without the help of the reset button. I then extended the sleep period to 80 seconds - that worked OK too. Tonight’s experiment is to try a 180 second sleep period. I shall post results tomorrow.
180 second deep sleep period worked and woke up OK. I will not push the period further as the sleep to wake ratio is now about 50:1 so I could only gain about another 1-2% battery life extension. Not worth the hassle.
Could there be a limit as to how long one is allowed to “deep sleep” and still wake up? Maybe some counter eventually overflows? If I ever find out what the limit is, I’ll certainly post it here!
Yes I did add the STARTUP line and that seems to have sorted the problem. A 9 minute deep sleep went off OK so last attempt is for a 20 minute deep sleep.
Many thanks for your suggestion.