I wrapped up a standalone battery charger demo for the Seeed XIAO nRF54LM20A using the onboard Nordic nPM1300 PMIC and the 1.54" 200×200 e-paper display.
This project is intended as both a PMIC demonstration and a reference for anyone wanting to build battery-powered devices with the XIAO platform.
Features
Native nPM1300 charger control
Selectable charge currents
200 mA
500 mA
800 mA
One-button user interface
Battery voltage monitoring
Estimated State-of-Charge
Charge current monitoring
PMIC temperature monitoring
USB input detection
Session statistics
Estimated charge time remaining
RGB status indication throughout the charging cycle
Low-power e-paper interface
The UI is designed around a single USER button, making it easy to operate without any external controls.
User Flow
Fire Horse splash screen
Charger setup
Select desired charge current
Start / Cancel
15-second safety countdown
Live charging dashboard
Statistics pages
Fire Horse “sleep” screen on completion or cancel
The charging dashboard provides live information including:
Battery voltage
Battery current
PMIC temperature
Charge time
Battery percentage
Peak current
Peak temperature
USB voltage
Session statistics
The countdown and live displays use partial e-paper refreshes to minimize flashing while keeping updates responsive.
Hardware
Seeed XIAO nRF54LM20A
Onboard Nordic nPM1300 PMIC
1.54" SSD1681 (200×200) e-paper display
Single LiPo battery (tested with 1000–2000 mAh cells)
Purpose
This isn’t intended to replace a commercial battery charger. It’s a demonstration of how much capability is already available on the XIAO board with very little additional hardware. It also serves as a starting point for portable instruments, IoT devices, asset trackers, environmental sensors, and other battery-powered projects that need intelligent charging and battery management.
I hope it gives others a useful example of integrating the nPM1300 with a clean, low-power e-paper user interface. Feedback and suggestions are always welcome!
Here is the serial output …
=== CHARGE STATUS ===
Set: 200 mA
VBAT: 4227 mV
IBAT: 42 mA
PMIC temp: 33245 mC
Session SOC: 94%
Added: 0.21 mAh
_Update_Full : 1294663
=== CHARGE STATUS ===
Set: 200 mA
VBAT: 4227 mV
IBAT: 42 mA
PMIC temp: 33245 mC
Session SOC: 94%
Added: 0.41 mAh
_Update_Full : 1294663
=== CHARGE STATUS ===
Set: 200 mA
VBAT: 4227 mV
IBAT: 41 mA
PMIC temp: 33245 mC
Session SOC: 94%
Added: 0.60 mAh
_Update_Full : 1294663
=== CHARGE STATUS ===
Set: 200 mA
VBAT: 4227 mV
IBAT: 37 mA
PMIC temp: 34830 mC
Session SOC: 94%
Added: 6.23 mAh
_Update_Full : 1294661
_Update_Full : 1294663
_Update_Full : 1294662
_Update_Full : 1294663
=== CHARGE STATUS ===
Set: 200 mA
VBAT: 4227 mV
IBAT: 37 mA
PMIC temp: 34037 mC
Session SOC: 94%
Added: 6.70 mAh