Power consumption is clearly a major factor for IoT devices. The expectations of battery life for this device is for at least one month (750 hours+) of operation. The battery pack which came with the Micro:Bits is rated at 3V and 1000mAh. This means we have to get current consumption below 1 mA on average.
The consumers of the power are the Micro:Bit and the RN2483 radio. Initial measurements on the Micro:Bit are immediately not encouraging. Just sleeping, with no LED on has a current consumption of 1.75mA, and turning the LEDs on adds another 9mA. So even with the LED's off and doing nothing, we would drain the batteries in well undre our target of one month. So why is this ? The NRF51822 has great low power operating capability, but there is nothing in Micropython (Yet!) to take advantage of this. We could move to programming in C++ under MBed to get direct control of the NRF51822's power management, but that messes with our "Just do IoT" philosophy for using the basic toolchains provided. The circuit schematic of the Micro:Bit is not published, and it is also not clear how the second ARM M0 processor which does the USB interface is powered. It may be we can fix the NRF51822, but the USB chip while unused on battery power still sucks the juice. Maybe we bit the dirt on this project, or do we need a good hack!
Let's look at the radio anyways. The specification is a bit more clear here, with quoted values of 2.8mA at idle, 14.2mA on receive, 10uA on sleep, and 38mA on transmit. Some big numbers and a small one. However, the duty cycle of LoRaWAN is 1%, so it appears that the RN2483 could be power managed to meet our target of one month operation.
I did some measurements of current consumption of the whole Prototype system and on the RN2483 alone, while running the LoRaWAN Micropython program, which confirmed the figures above. The whole system took around 8.5mA at idle, which would maybe drop to around 8mA with the few LED's of the tick turned off. When transmitting the current jumped to around 50mA, but only for around 100mS. When receiving there is a smaller current jump to around 24mA as expected from the specification.
Looking at the RN2483 alone confirms the datasheet figures with 2.5mA at idle, and 40mA when transmitting. I sent the command to the RN2483 to enter deep sleep mode, and the current plummeted to around 2 uA, until the RN2483 awoke after the set sleep time.
So where from here ? I really hope the software developers for the Micro:Bit look to a power management strategy, but that will not help me short term. My decision is to add a circuit to turn power off to the device between transmission events.. This will be awoken by the deep sleep mode of the RN2483, or by an external Real Time Clock IC, which can power down the Micro:Bit between transmissions. This also gives the opportunity to make a PCB to hold the RN2483 and an edge connector for the Micro:Bit.