Nano 33 BLE power consumption

I have a Nano 33 BLE (not the sense version) set up as a GATT peripheral, using a BME280 T/P/H sensor. The peripheral advertises periodically (once an hour for 60 seconds), the single central, running on an RPi 4, polls for the peripheral, connects when it appears, gets a reading and disconnects. The peripheral then ceases advertising until the next poll period.

The peripheral is battery powered, so the idea of the above was to minimise the time that the peripheral was interacting over BT, and so minimise power consumption.

My first go at powering the peripheral used a step up regulator from a 4000 mAh lipo to 5V and into the USB connector. The peripheral last 6 days before the battery ran out of charge. I now measured the current draw and discovered it was drawing ~25mA when it was in sleep mode (using delay()).

After some googling I discovered that the internal step down to 3.3V is quite inefficient. I changed to step up/step down regulator and powered the board directly via the 3.3V power input. This made a big difference - the quiescent current dropped to around 5mA. The difference was probably a combination of the original and the internal regulator, but the internal step down must be quite inefficient.

This has extended the life of the peripheral per battery charge to around a month, which is better but not quite what I was hoping for from a 4000mAh battery.

So my questions are:

  • Should I be expecting better than 5mA current draw when the Nano isn’t doing anything?
  • Is there some way to send the board into a deeper sleep?

I am currently using the ArduinoBLE library v1.1.2, which I believe had a fix for power consumption.

As a side note I have tried turning off the pins suggested in that issue:

  digitalWrite(PIN_ENABLE_SENSORS_3V3, LOW);
  digitalWrite(PIN_ENABLE_I2C_PULLUP, LOW);

but it didn’t seem to make any difference.

The code that I am using to test the power usage is pretty basic:

#include <ArduinoBLE.h>

void setup() {
  Serial.begin(9600);  
  while (!Serial);

  Serial.println("Setup complete...");

}

void loop() {
  sleepMode();
}

void sleepMode() {
    Serial.println("Sleep mode: sleeping for 20 sec");
    delay(20000);
    Serial.println("Exiting sleep mode...");
}

I would greatly appreciate any pointers that anyone can provide. I was kind of hoping that I wouldn’t have to charge the battery for a few months at least.

mwebby:
powered the board directly via the 3.3V power input.

Did you cut the "3.3 V" jumper?

Here's everything I've learned so far about reducing power consumption of the Nano 33 BLE:

Thanks for the quick reply pert. Yes I did cut the jumper and thanks for the link to your previous post. I hadn't powered off the power LED - so down to 0.9mA at rest for my test sketch and ~1.5mA for the GATT peripheral code. This looks like about what is presently possible without resorting to powering the board off.

It sounds like there is still the potential for support for Nordic's power management in the ArduinoBLE, which may provide the opportunity to improve things in future.

Thanks again for the help.

You're welcome. I'm glad if I was able to be of assistance. Enjoy!
Per