Reducing power consumption for ble mesh sensor server node using LPN mode

Hi, 

I am using nrf mesh sdk v5.0.0 and am using sensor server model example to build our own application on top of it. SOC we are using is  nRF52832.  I have enabled the LPN mode in the example and I am also able to establish friendship with a nearby friend node. And am also receiving messages intended to the LPN node when the LPN node polls its friend node. The purpose for LPN node is to reduce battery consumption by disabling the scanner. But the device is consuming a solid 5 - 8 mA after establishing friendship. Is it possible to reduce the battery consumption in the micro amperes range. Any guidance on how to achieve it would be really great. I am also interfacing an LED, I2C sensor and a switch with the SOC. Before and after establishing friendship, I am seeing same amount of current being consumed. 

Parents
  • Hi Hariharan, 

    Could you describe how did you do the test ? How did you do provisioning ? 


    Have you tested with the LPN example with no modification ? In the example the power consumption should drop down to few uA after it provisioned and get a friendship. 

    Which current do you see exactly after you establish friendship ? Have you verified that the CPU was not being kept awake by other modules ? 

  • I am provisioning the sensor node using an ESP32(acting as a provisioner). Once the provisioning and model configuration is done, I am initiating the friendship establishment procedure. The current consumption goes as low as 150ua after establishing friendship. But it increases to 3ma after publishing data once. And it should return to low power consumption mode right? But its not. The sensor node is constantly consuming 3ma after publishing. I dont know why this is happening. Can you please guide me?

  • Hi Hariharan, 

    The LPN node is put to sleep when the mesh stack finished processing and it will return to the main loop which calls sd_app_evt_wait();
    The NRF_MESH_EVT_READY_TO_POWER_OFF event is not really related to the LPN feature of put the CPU to sleep when there is no activity. '

    It's about putting the device to POWER OFF , and you need to close down mesh stack before enter power off. So when you receive NRF_MESH_EVT_READY_TO_POWER_OFF  you can turn off the chip (System OFF , not CPU sleep) 

    I suspect that the higher power consumption may have something to do with the NRF_LOG that you are using. Is there any reason you can't use the __LOG via RTT like what we use in the LPN example ? 

  • Why do you think NRF_LOG may have something to do with higher power consumption? I am using NRF_LOG because we have developed our custom sensor board with nRf52832. We only have TX pin for logging in runtime. That's why I have used NRF_LOG.  As you will see in the video attached as URL below, current consumption goes around 150ua once friendship is established. But once sensor data is published once after model publication is set, the current consumption is in constant 3ma and above. I think the LPN node is not put to sleep after data is published once through the "app_sensor_get_cb()" callback function. Is the application is not returning back to the sd_app_evt_wait() in the main thread? Is there a chance that any interrupt is not cleared after data is published once?

    I am establishing a friendship with a friend node only after model publication is set by the provisioner. After model publication is set, the sensor node initiates the friendship procedure.

    https://www.kapwing.com/videos/63aed5592e16220088250022

  • Hi Hariharan, 


    Have you tested with the LPN example ? and measure the current consumption on the example ? 
    150uA is too low for the CPU (when active CPU consumes about 3mA-4mA), so I suspect it could be something else, UART can be the case. If a pin has a pull up and it set to low, it will draw some current.

    If you can test with the LPN example and achieve low power consumption when periodically sending some dummy data, you can try to compare with your application and see why it doesn't work as it should. 

  • Yeah sure. I will try it with the LPN example. In my application, I am also reading battery voltage using adc and using i2c to read data from sensor. Should I disable the adc interface and i2c interface every time the data is read and enable it like every time I want to read battery voltage and sensor data?

  • Hi Hariharan, 
    In theory if a peripheral is not active it shouldn't consume power consumption. But for testing I would suggest to disable them one by one (not use them at all, not initialize ) and check if the power consumption goes down. Only wake up and send dummy data. So we can narrow down where the issue is. 

Reply Children
No Data
Related