Raspberry Pi 3 power saving techniques

If you are hopeing that there is some magic bullet for power consumption, some setting you can change that will cut power use in half, forget it. The Pi doesn't have much in the way of energy saving features.

It is not that the hardware lacks energy saving support. The BCM2837 and BCM2837B0 processors, used in the Pi 3 model B and B+ respectively, do have some very capable power management capbilities allowing for selective shutdown of processor sections when not in use and even entire cores. It's just that none of that is available if you're running linux on it, as almost everyone is. It's too specialised, too propritary - unless someone with an extensive knowledge of both the processor and the linux kernel is able to tackle the problem, it's not going to help you. Going from a 4-core to a 1-core configuration without a reboot is not something the kernel can handle.

If power consumption is tight enough that you are reading this guide, you should seriously consider using a Zero or Zero W. If you really need the hardware capabilities of the Pi 3 B/B+ though, there are some techniques you can use to reduce the power use of your pi. They can shave a bit off, and sometimes that's enough.

1. Look outside the pi, and to your power supply.

Before even considering the power savings of the pi itsself, look to what is powering it. Are you running off of a boost converter to power it from li-ion batteries, or a buck converter? Those circuits can, when carefully optimised, achieve efficiencies upwards of 95% - but if you've just picked up a module on eBay, it may not be that optimal - you could be wasting upwards of sixty percent of your available power just on an inefficient power supply! If you're more of a software expert you might have to skip the efficiency measurements with a multimeter, but there is one thing to look out for: If you are using a buck converter to run your pi from a voltage source above 5V, get a syncronous buck converter. These types are significently more efficient than the more common, lower cost non-syncronous buck converters.

The Pi itsself contains a number of buck converters to turn the 5V input into the required 3.3V, 1.8V and 1.2V, all handled by the mysteriously undocumented XR77004 chip - a custom component designed specifically for the Raspberry Pi. Fortunately the Pi 3's power supply electronics are already well-engineered, so there is nothing you can do to impove the efficiency here. It's actually quite impressive the lengths that the Pi design team went to in achieving such efficient performance within a very tight cost constraint.

2. Apply conventional processor-use-minimisation techniques.

You might think that underclocking the processor is the way to go. You'd be wrong: The processor consumes power almost regardless of clock rate. Even so, the processor does support (and most distros will have enabled) frequency scaling, so some saving can be achieved just by minimising processor load. The usual advice here from any linux system applies. Do not run X, uninstall or disable every service you possibly can, monitor top to see where the processor time is spent. As an added bonus this will free memory too. One significent power-consumer is network transmission, so make sure to minimise the time spent waking up the wireless as well - that means disable avahi unless you really need it.

3. Disable the HDMI output.

Now we're getting into pi-specific techniques. There is no way to selectively cut power to parts of the Pi hardware to reduce power consumption - with the exception of the HDMI circuity. You can disable this with the command '/usr/bin/tvservice -o' - power use will immediately drop quite significently. You can add that command to rc.local or your distribution's equivilent.

The Pi 3 B/B+'s audio circuitry, rather cleverly, uses the processor's PWM driver outputs through a power buffer chip and analog filtering - in essence, a directly driven class D amplifier. While you could cut power to this by physically removing the buffer chip, there is no reason to do so: It uses negligable power when not playing sound.

4. Turn the status LED off.

Add one line to config.txt: "dtoverlay=pi3-act-led,gpio=17"

This save 5mA from the 3.3V rail... or maybe 4mA from the 5V input. It's pretty tiny. But it's an easy thing to do, so there is no reason not to.

5. Remove the power LED.

Remove, not disable - and for good reason, which can be seen on the schematic. The power LED is controlled by one of the GPIO ports of the processor, so it can be turned off from software, just like the status LED - but the electronics for doing so are quite different. When the GPIO is high, this turns on an N-channel MOSFET which shorts out the LED - meaning it actually draws more power to turn off than leave on! 5mA when off, direct from the 5V rail, or 4mA to turn on. This part of the Pi is not designed for efficiency. If you want to save those 4mA, which is a sign that you are getting desperate for power savings, you've only one option: Physically remove either the power LED or the series resistor using a soldering iron.

That's it. You now know every means there is to reduce power consumption, and it's not going to save you very much. Maybe fifty miliamps at most.

There is one more useful thing to know, though: The INA219 chip. It can be connected to the Pi via I2C and used to monitor both battery voltage and current draw. This won't help you reduce power use, but it will at least let you monitor how flat the battery is getting, estimate remaining battery time and achieve a clean shutdown.