Go Down

Topic: MKR 1300 power consumption too hight (Read 1 time) previous topic - next topic


Good morning everyone,

I recently acquired the Arduino of the matter and after trying it a little I am a bit disappointed / lost since I have been doing consumer tests using various libraries "LowPower" such as "LowPower.h" and "ArduinoLowPower.h" with their respective functions standby () and deepSleep () but not lower than 20mA (in both cases).

Over there I read that values of 1.5mA are obtained using these libraries, but I can not get below 20mA even sleeping the Murata chip (radio) with the sleep () function of the library "Lora.h" of Arduino- Lora.

On the other hand, it seems very high consumption in normal operation (32mA) if we compare it with other plates on the market focused on low consumption that are usually around 12mA.

The tests I am relizando feeding the plate to 5.5V by pin Vin, as I have fed the rest of plates that I have tested (Moteino, Lora32u4 II) with which I have obtained values of 12mA in normal mode and 0.6mA in sleep mode.

Let's see if anyone can help me understand what is happening or what I'm doing wrong.

Thank you very much.


Hi Tirititelu,

The sleep() function in the MKRWAN.h does nothing.  The mkrwan-1300fw is supposed to sleep the Murata module when it is idle.

I have achieved 1.16mA during sleep.  Im my view this is still two orders of magnitude too high to be useful for a battery operating application. 

At the moment I suspect that the Murata firmware isn't actually sleeping properly.  Unfortunately, I do not know why.

There is a line of code in wiring.c (see below) in the Arduino library that sets all the IO pins to floating inputs.  You need to comment out the pinMode line.

// Setup all pins (digital and analog) in INPUT mode (default is nothing)
  for (uint32_t ul = 0 ; ul < NUM_DIGITAL_PINS ; ul++ )
    pinMode( ul, INPUT ) ;

I am unsure of what the quiescent current of the LDO regulator is and haven't been able to track down which regulator is used as the schematics use a generic name and not the actual part number.

I apply 3.3V to the Vin (Vbatt) pins.


I do not use the MKRWAN.h library, I use the Lora.h library.

What library does "wiring.c" belong to?.



Apologies, I missed your post.

Wiring.h is one of the low level includes deep in the arduino core.

Not sure if you followed my other posts but there is a bug with the MKRWAN1300 that will not let let achieve less than about 1.16mA sleep current.  You can hack the board to fix it but it is a pretty complicated hack.  Arduino said they are working on a board rev but I do not know when this will be available.


Ok, I found the file "wiring.c" and made the change. Now I have a consumption of 1.15mA with a sketch that only sleeps the board with the function "LowPower.deepSleep ()".

If I add communications LoRa with the library "ArduinoLora.h" and its function "LoRa.begin ()" the consumption rises to 8.1mA even sleeping the radio with "LoRa.sleep ()", I can not get down to 1.15mA nor using the "LoRa.end ()" function after sending LoRa packet. This is strange. Do you know how to get the 1.15mA again after making a communication LoRa ?.



I have not used that lbrary.  I used the MKRWAN library that Arduino provides for connectivity to LoRaWAN.  With the MKRWAN library you can achieve 1.15mA with an unmodified board.  If you go to the trouble of making the modifications, you can achieve less than 10 uA using LowPower.deepsleep().

There are a few other issues when sleeping that need to be addressed in the MKRWAN and module firmware.  I have discovered that the module firmware asychronously sends downlink data to the SAMD21 when it is sleeping.  So you miss downlinks when you sleep.  I have a very crude work around for that problem at the moment.


Thanks, but I do not use the MRKWAN library because it does not allow P2P mode, only OTAA and ABP.
I would need to know how to get back to 1.15mA after sending a LoRa package, since once I activate LoRa communications with Lora.begin () I can not return to that consumption without using LoRa.end () or LoRa. endPacket ().


Go Up