Optimizing Raspberry Pi Power Consumption
BluesBlues
When the Raspberry Pi single-board computer was first announced back in 2012, I doubt many people were considering the utility of a Pi in an entirely off-grid setting, especially considering the state of battery technology at the time.
Fast forward to today. While we haven't precisely made-at-home nuclear reactors an option (yet), we do have access to robust battery and solar tech along with new reasons to deploy Raspberry Pis in edge computing scenarios.
There are numerous microcontrollers and stripped-down single-board computers (SBCs) like the Raspberry Pi Zero that is more energy-efficient than a full Raspberry Pi 4. But that efficiency comes with a cost of its own in terms of reduced features and functionality.
Perhaps the question we should be asking is, "Why on earth would we want to deploy a Raspberry Pi remotely?"
The answer? Usually, you wouldn't!
However, there are some legitimate exceptions to this:
If you're running Machine Learning models remotely that need to be processed with minimal delay, the ARM Cortex-A72 CPU running at 1.5GHz is tough to beat. Specific TinyML workloads can run in milliseconds on MCUs, but if your project needs to do machine vision work, an SBC is a better fit.
The Pi HAT ecosystem is mature and provides production-ready expansion options for nearly every scenario. Case in point, the Notecard and Notecarrier Pi HAT from Blues Wireless allow for drop-in cellular communications (at a power-sipping 8mA when idle) for scenarios where remote data relaying is a key requirement.
The Raspberry Pi OS ships with a complete Python distribution. While CircuitPython and MicroPython are acceptable for most IoT projects, some Python libraries don't support those two derivatives.
The anchor around the neck of the Raspberry Pi is its estimated 600mA active current consumption.
Here are a few techniques we can use to trim that down to a manageable value with some simple configuration changes:
By turning off functionality that they won't use and supplementing solar power, the newest models of Raspberry Pi have a promising future in the realm of edge computing for cellular IoT solutions.
Estimated power savings: approximately 100mA.
If you're running your Raspberry Pi in a headless configuration, you can likely get away with not powering the onboard USB controller. Note that even if you aren't using a mouse or keyboard, they are still powered!
To disable the USB controller on your Raspberry Pi, execute the following command:
echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/unbind
And then to re-enable the USB controller when it's needed again:
echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/bind
After a reboot, the USB controller will be enabled automatically.
Estimated power savings: approximately 30mA.
When using a Raspberry Pi in a headless configuration, you also, by definition, don't need to hook up a monitor. If that's the case, you can disable the HDMI output as well.
To disable the HDMI output on your Raspberry Pi, execute the following command:
sudo /opt/vc/bin/tvservice -o
And then, to re-enable the HDMI output when you need it back again, use this command:
sudo /opt/vc/bin/tvservice -p
As with disabling the USB controller, HDMI output is enabled after a reboot.
Estimated power savings: approximately 40mA.
If your solution isn't using Wi-Fi or Bluetooth, you can likely disable them as well. Please note, however, that if you disable HDMI, USB, and Wi-Fi simultaneously, you'll have trouble interfacing with your Pi!
To disable Wi-Fi and Bluetooth, open /boot/config.txt
, add these parameters, and reboot:
[all]
dtoverlay=disable-wifi
dtoverlay=disable-bt
To re-enable Wi-Fi and Bluetooth (or just one of them), simply remove the parameter(s) from the file and reboot.
Estimated power savings: variable based on applications.
If you don't require the full power of the Raspberry Pi CPU (which is overkill for many remote monitoring situations anyway), you might save a few mA by underclocking the CPU.
For example, to set the CPU clock speed to a maximum of 900MHz, you could update /boot/config.txt
and change the following parameters:
[all]
arm_freq=900
arm_freq_max=900
You can also play around with the core_freq_min
, over_voltage
, over_voltage_min
and many other parameters that are well documented in the Raspberry Pi overclocking options.
Please note that you may not see power savings in certain scenarios. For example, if you have a process that runs longer at a slower clock speed versus shorter at a faster clock speed, you're not going to see a net change in power consumption.
Estimated power savings: approximately 10mA.
We can disable the onboard LEDs on the Pi by again editing the /boot/config.txt
file, adding the following, and rebooting:
[pi4]
# Disable the PWR LED
dtparam=pwr_led_trigger=none
dtparam=pwr_led_activelow=off
# Disable the Activity LED
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off
# Disable ethernet port LEDs
dtparam=eth_led0=4
dtparam=eth_led1=4
Please note that these configurations are specific to the Raspberry Pi 4 Model B; documentation on variables usable in the /boot/config.txt
file can be found here.
Any changes made to your /boot/config.txt
file will persist after a reboot. If you'd like to issue the USB, HDMI, Wi-Fi, and Bluetooth disabling commands upon boot, edit your .bashrc
file and add those commands.
Likewise, deleting the changes you made and rebooting will reset your Raspberry Pi back to its default state.
Maybe the most obvious tip of them all for remote deployments is to source additional power from the sun. By adding a reasonably-sized solar array to your Raspberry Pi, you can significantly extend battery life (even making it a theoretically fully sustainable solution in full sun environments).
Using the PiJuice HAT is an easy way to add a solar array to your Raspberry Pi. It also provides mechanisms for graceful shutdowns (and boot-ups) at pre-defined battery charge levels.
You can see a PiJuice used in this Hackster project: Solar-Powered Crypto Mining with Raspberry Pi.
Alternatively, you can use a USB power bank with pass-through charging. This allows the power bank to power the Pi and a solar array to charge the battery simultaneously.
This arrangement was tested in another Hackster project: Remote Birding with TensorFlow Lite and Raspberry Pi.
Remote monitoring solutions are often outside the range of traditional network communication options like Wi-Fi. This is one reason why Blues Wireless created the developer-friendly Notecard to provide cost-effective cellular for IoT solutions.
The Notecard is a tiny 30mm x 35mm System on Module (SoM) and ships ready to embed in a project via its M.2 connector. To make prototyping easier, Blues Wireless also provides a series of expansion boards (called Notecarriers).
The Notecarrier-Pi acts as a host HAT for the Notecard. It provides an interface between the Raspberry Pi and the Notecard. With pass-through headers, it fits right in with whatever other Pi HATs you are using (like the PiJuice HAT pictured above).
The beauty of the Notecard can be boiled down to:
The Most Comprehensive IoT Newsletter for Enterprises
Showcasing the highest-quality content, resources, news, and insights from the world of the Internet of Things. Subscribe to remain informed and up-to-date.
New Podcast Episode
Recent Articles