Overview
The TPL5110 (with driven output line) or the TPL5111 (with toggling enable line) allow some really simple low-power projects. Use the zero to sever and supply power, or the one to control enable pins (for LDO/MCU).
Just adjust the potentiometer to tweak the turn-on time, and then with the TPL5111 you send a low high transition to the Done pin to go to sleep. The Enable pin goes low and MCU sleeps until the next cycle.
All of that means you can easily create a no-code low-power project, just by hooking up the TPL5111 to a WipperSnapper compatible board, and combine that with an E-ink display for the ultimate low power setup.
The board wakes up, connects to WiFi and Adafruit IO, get's the latest messages (E-Ink Display) and sends some sensor data. Two small Actions on Adafruit IO switch the Done pin to a high level, and then ten seconds later back to low. A third action updates the screen message with time + weather every 10mins.
Pin Choices
Avoid any pins that are level shifted (I'm looking at you Pin 5 on the ItsyBitsy) or not input/output as required.
Try to avoid pins that are less compatible or reserved for other things (strapping pins, I2C bus, etc).
Initially I chose pin 33 for my Done signalling, but that had unexpected behaviour and didn't cleanly sink to 0v without an additional pull down resistor (the 1 megaohm resistor on the TPL5110 was too weak).
See this brief answer about why a pin (33) was not returning to zero volts when the ESP32 got de-powered:
WipperSnapper Device Setup
Create a New Device on Adafruit IO to install WipperSnapper on your WiFi enabled board.
Dedicate one pin to signalling the work is Done and the board is ready to sleep.
Configure a MOSFET component or equivalent digital output component pointed at the Done pin.
Also setup the onboard neopixel as an indicator that the board is awake.
Add the display or other components then head over to Actions to configure the sleeping.
My WipperSnapper Device Config:
(For an ItsyBitsy ESP32 + E-Ink Friend Breakout + 2.9" Flexible E-Ink display)
{
"exportVersion": "1.0.0",
"exportedBy": "tyeth",
"exportedAt": "2025-10-20T02:29:51.504Z",
"exportedFromDevice": {
"board": "itsybitsy-esp32",
"firmwareVersion": "1.0.0-beta.119"
},
"components": [
{
"name": "2.9\" Grayscale eInk (ILI0373)",
"type": "eink-29-grayscale-ili0373",
"displayType": "epd",
"driver": "epd_ili0373",
"textSize": 3,
"csPinName": "D12",
"dcPinName": "D14",
"spiBus": 0,
"epdMode": "grayscale4",
"width": 296,
"height": 128,
"isDisplay": true,
"rstPinName": "D7",
"busyPinName": "D13"
},
{
"name": "Analog Pin (Device Online Signal + 30s timer)",
"pinName": "A38",
"type": "analog_pin",
"mode": "ANALOG",
"direction": "INPUT",
"analogReadMode": "PIN_VOLTAGE",
"period": 30,
"isPin": true
},
{
"name": "MOSFET Driver (TPL5111 Done pin)",
"pinName": "D32",
"type": "mosfet_driver",
"mode": "DIGITAL",
"direction": "OUTPUT",
"isPin": true
},
{
"name": "NeoPixel",
"pixelNumber": 1,
"pixelsOrder": "GRB",
"pixelBrightness": 255,
"pinName": "D0",
"type": "neopixel",
"pixelsType": "NEOPIXEL",
"isPixel": true
}
]
}
Actions Setup
Now create an Action that sets the Done pin to 1 based on data arriving from the Analog input component.
Configure the action to use a 5-15s delay, to give the board time to do anything important when it wakes.
Create a new action, which triggers when the Done Pin is set to 1, and configure a delay of 10s for the Action.
Configure the action to publish a 0 to the Done pin (so when the device wakes again it won't set Done=1).
Add a third action to update the display or whatever is appropriate (like acting on some sensor data).
Use \n to force a line break when working with Displays on WipperSnapper
Hey presto, now you have a low power weather data clock, using zero programming knowledge and just a brief foray into the wonderful world of wiring and electronic signals.
This page (TPL5111 - Low Power projects (WipperSnapper, Arduino, CircuitPython, etc)) was last updated on October 20, 2025.