How low can I go with power consumption during sleep?


How a low number of mA can I expect to reach with Helium Developer Kit during timed sleep? I’m trying to get as much battery time as possible, based on Deep sleep example I’m getting 3.2 mA, this seems too high for my needs.


Is your device connecting to Helium Console?
If it is not setup in Helium Console, it is stuck in trying to join the network and does not really go to sleep.

On a device that is connected to a LoRaWAN server (Helium COnsole, TTN or Chirpstack as example), I get 30uA sleep current if no other sensors are connected.

1 Like

That’s really nice!
Did you get those numbers with RAK4631-DeepSleep-LoRaWan example or some other code? The device is connected to Helium Console, I see the data, but I cannot get lower than 0.0032 A.

It depends on the modules that are used.

With the GNSS module the power consumption is higher, around 1mA:

Without any modules, after network connect the consumption is lower

1 Like

All I’ve got connected is a RAK4631

I tried creating really basic example, without connecting to LoRaWAN, just to see how low can I go with basic loop, but results are still around 0.00X A, maybe there is something wrong with mine board?

#include <Arduino.h>
#include <SPI.h>

#include <LoRaWan-RAK4630.h>
#define MAX_SAVE

/* Time the device is sleeping in milliseconds = 2 minutes * 60 seconds * 1000 milliseconds */
#define SLEEP_TIME 5 * 1000

extern SemaphoreHandle_t loraEvent;

// Main loop stuff
void periodicWakeup(TimerHandle_t unused);
extern SemaphoreHandle_t taskEvent;
extern uint8_t rcvdDataLen;
extern uint8_t eventType;

/** Semaphore used by events to wake up loop task */
 SemaphoreHandle_t taskEvent = NULL;

/** Timer to wakeup task frequently and send message */
SoftwareTimer taskWakeupTimer;

void periodicWakeup(TimerHandle_t unused)
  // Give the semaphore, so the loop task will wake up
  xSemaphoreGiveFromISR(taskEvent, pdFALSE);

void setup(void)
  // Create the LoRaWan event semaphore
  taskEvent = xSemaphoreCreateBinary();
  // Initialize semaphore

  pinMode(LED_CONN, OUTPUT);
  digitalWrite(LED_CONN, LOW);
  digitalWrite(LED_BUILTIN, LOW);
  xSemaphoreTake(taskEvent, 10);
  taskWakeupTimer.begin(SLEEP_TIME, periodicWakeup);
void loop(void)
  // Try getting the semaphore, sleep while doing that
  if (xSemaphoreTake(taskEvent, portMAX_DELAY) == pdTRUE)
   digitalWrite(LED_BUILTIN, HIGH);
   digitalWrite(LED_BUILTIN, LOW);
   // Go back to sleep
   xSemaphoreTake(taskEvent, 10);

The problem is that the SX1262 LoRa transceiver does not enter sleep mode automatically.

Try to add


at the end of setup()

1 Like

After connecting power through 3V input and not through USB I’m getting 25 uA!
That was an issue, Radio.Sleep() does not seem to be needed anymore, after adding this line I’m getting some problems.

Anyway, the results are great, thank you for helping.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.