Electron Cellular.off() no power savings

I am trying to setup a system which has the microcontroller running at all times. To save power I am turning off the Cellular module with Cellular.off().
What I am seeing with the battery power consumption suggests the Cellular module actually uses no power at all or the Cellular.off() function doesn’t work.

If I leave the system running and on at all times I get the same power consumption as if I use Cellular.off() or System.sleep().
It’s only when I use something like SLEEP_MODE_SOFTPOWEROFF or SLEEP_MODE_DEEP that power usage actually drops.

Does anyone know what happening, is Cellular.off() broken or does the Cellular module actually draw very little power?

This is using version 1.0.0 of the firmware.

Thanks

Does your RGB LED actually turn breathing white and stay that way after you called Cellular.off()?
How are you measuring your power consumption?

Yes, breathing white but I have attempted to override and turn this off incase the light being on was the cause of the power drain!
I am recording the battery level every 10 minutes.
The graph below shows 3 tests, the 3rd is ongoing but pretty conclusive!

The first curve uses
delay(10 * 60 * 1000);

The second curve was
System.sleep(10 * 60);

And the third curve is
System.sleep(SLEEP_MODE_SOFTPOWEROFF, (10 * 60));

Is this a Hard requirement for your Project, as the Electron wasn’t meant for low-power consumption running 24/7.
However, you can wake very frequently to collect data and then resume sleeping, & wake by interrupt.

I assume you eventually want the Electron performing something in addition to just reporting battery voltage every 10 minutes.
If you can share your project Goals, I’m sure plenty of people will give great recommendations to get you there.

1 Like

I have got a weather station running from a solar panel and that works well but I am toying with the idea of adding a wind speed sensor which will need the the microcontroller running all the time.
With that in mind I rewrote the code to only shut down the cellular connection expecting the battery usage to stay the same, it didn’t so I setup a second system to measure power consumption in different modes.

The docs describe System.sleep() as “Low power usage.”, it’s not so I am assuming the latest firmware upgrade broke Cellular.off() as well as RSSI reporting?

I tested Cellular.off on 1.0.0 on an Electron and it is working. However, you will not see much of a reduction in power usage on an Electron by doing that or using the poorly named System.sleep() function.

The reason is that when not transmitting or receiving data the cellular modem uses little current. It’s dwarfed by the 40-60 mA required to run the STM32F205 MCU.

This is the code I used:

#include "Particle.h"

SYSTEM_MODE(SEMI_AUTOMATIC);

void setup() {

}

void loop() {
	Particle.connect();
	waitUntil(Particle.connected);
	delay(30000);
	Cellular.off();
	delay(30000);
	Cellular.on();
}

3 Likes

I’ve never done it, but I seem to remember the mentioning of adding an external IC as a counter for wind speed to allow the Electron to sleep.

Or, you could have the Electron just measure wind speed and direction after it wakes up while it’s connecting to the Cell network and Particle Cloud.
For instance, if you want data every 10 minutes, use SLEEP_NETWORK_STANDBY for 7mA current during sleep (detailed info here). Start gathering wind data as soon as the Electron Wakes from Sleep Time.

Stop mode (pin + time) with SLEEP_NETWORK_STANDBY is available to also handle your rain gauge interrupt. During a Rain Gauge Interrupt, the Electron increments a counter and then checks to see if the Sleep Time has Elapsed, and goes back to sleep for the remainder of that scheduled sleep time after the interrupt has been processed. Normal duties are only performed if the Sleep Time has been fulfilled.
Threading and Manual Mode would likely be helpful.

2 Likes

Thanks for that. I assumed even when not transmitting it would be the big power draw of the system.

Going to go back to a deep sleep between updates and solve the data collection another way.