Overview
The 351015 500mAh 3.7V Lithium Polymer Rechargeable Battery is a compact, pre-wired LiPo pouch cell designed for ultra-small portable electronics. With dimensions of just 3.5mm thick by 10mm wide by 15mm long (the "351015" name follows the standard LiPo dimensional convention), it is one of the smallest off-the-shelf cells that still delivers a usable 500mAh capacity at 3.7V nominal. Each cell ships with pre-soldered red (+) and black (-) lead wires so you can drop it into your project without any battery-tab welding.
This single-cell (1S) LiPo is the go-to power source for wearables, tiny IoT sensor nodes, smart cards, Bluetooth tags, mini drones, GPS trackers, and ultra-low-power ESP32 deep-sleep designs where every gram and millimeter matters. Pair it with a low-quiescent-current boost converter or LDO and you can run an MCU, BLE radio, and a small sensor for weeks between charges when sleep modes are used aggressively.
Important: this cell ships without a built-in protection circuit (no PCM/BMS). That keeps the package size tiny but means you are responsible for over-charge, over-discharge, and over-current protection. ShillehTek strongly recommends pairing this battery with a TP4056-style 1S Li-ion CC/CV charger module and a small 1S BMS board to handle charging safely and prevent the cell from being driven outside its 3.0V - 4.2V safe window.
At a Glance
Specifications
| Parameter | Value |
| Cell Chemistry | Lithium Polymer (Li-Po) |
| Nominal Voltage | 3.7V |
| Fully Charged Voltage | 4.20V (+/- 0.05V) |
| Cut-off (Empty) Voltage | 3.00V |
| Rated Capacity | 500mAh |
| Standard Charge Current | 0.5C (250mA) |
| Max Charge Current | 1.0C (500mA) |
| Max Continuous Discharge | 1.0C (500mA) |
| Charge Method | CC/CV (constant current / constant voltage) |
| Internal Resistance | <= 250 mΩ |
| Cycle Life | 500+ cycles to 80% capacity |
| Operating Temperature | Charge 0℃ to 45℃ / Discharge -20℃ to 60℃ |
| Dimensions (T x W x L) | 3.5 x 10 x 15 mm |
| Weight | ~ 10 g |
| Leads | Pre-soldered red (+) and black (-) wires |
Wiring Guide
Connecting the Cell
The battery ships with two thin pre-soldered lead wires. Polarity is fixed and must be respected on every connection.
| Wire Color | Polarity | Notes |
|---|---|---|
| Red | Positive (+) | Connects to B+ on a BMS / charger or VBAT on a project board |
| Black | Negative (-) | Connects to B- on a BMS / charger or GND on a project board |
Charging the Cell
A 1S LiPo cell must be charged with a dedicated CC/CV charger configured for 4.20V and a current of 0.5C or less. The ShillehTek TP4056 charger module is the easiest match for this cell - set the charge current resistor for ~250mA (the standard 0.5C rate for a 500mAh cell).
| TP4056 Pin | Connection | Details |
|---|---|---|
| B+ / BAT+ | Battery Red wire | Positive terminal of the cell |
| B- / BAT- | Battery Black wire | Negative terminal of the cell |
| IN+ | 5V USB Vbus | From USB-C / micro-USB input |
| IN- | USB GND | From USB ground |
Powering Your Project
The cell's terminal voltage will sit between 3.0V (empty) and 4.2V (full) during normal use. Most 3.3V MCUs (ESP32, RP2040, nRF52) include an onboard LDO that accepts this range directly, so the cell can often be wired straight to the VBAT input of a dev board.
| Target Board | Where to Connect | Notes |
|---|---|---|
| ESP32 / ESP32-S3 dev board | VBAT or 5V input pad | Many ShillehTek ESP32 boards accept 3.0 - 5.5V directly on 5V |
| Raspberry Pi Pico | VSYS (pin 39) | VSYS accepts 1.8 - 5.5V; cell connects directly |
| Arduino Pro Mini 3.3V | RAW pin | RAW pin feeds the onboard LDO |
| 5V logic project | Through boost converter | Use a 3.7V to 5V boost module (e.g., MT3608) |
Safety + Protection Stack
Because this cell has no built-in protection circuit, the recommended safety stack adds an external 1S BMS between the cell and your load/charger. The BMS protects against over-charge, over-discharge, and over-current.
| Stage | Module | Function |
|---|---|---|
| 1. Cell | 351015 500mAh LiPo | Bare cell with red/black leads |
| 2. Protection | 1S BMS (DW01 + 8205A or HX-1S equivalent) | Over-charge / over-discharge / over-current cutoff |
| 3. Charging | TP4056 1S charger | CC/CV charge at 4.2V, 250mA |
| 4. Regulation | Boost / LDO (if needed) | Converts cell voltage to project rail |
- Never exceed 4.2V per cell on charge.
- Never discharge below 3.0V per cell - the cell may be unrecoverable, and recharging an over-discharged LiPo is unsafe.
- Never short the red and black leads together.
- Never puncture, crush, or pierce the pouch.
- Never expose to temperatures above 60℃ (storage above 45℃ ages the cell rapidly).
- Stop using the cell immediately if it swells, smells sweet/chemical, or feels hot at rest.
Code Examples
The following examples read the cell's terminal voltage through a simple 2-resistor divider so you can estimate state of charge from any project's MCU. Wire the divider as: cell (+) -> 100k -> ADC pin -> 100k -> GND. This gives a 1/2 ratio so a 4.2V cell reads ~2.1V at the ADC input.
Arduino (5V / ATmega328P)
// 351015 LiPo cell voltage monitor for Arduino Uno / Nano (5V, 10-bit ADC)
// Wiring: Cell (+) -- 100k -- A0 -- 100k -- GND
// Divider ratio = 0.5, so multiply ADC voltage x 2 to get cell voltage.
const int BAT_PIN = A0;
const float VREF = 5.0; // 5V Arduino reference
const float DIVIDER = 2.0; // (R1 + R2) / R2 with R1 = R2 = 100k
float readCellVoltage() {
long sum = 0;
for (int i = 0; i < 16; i++) { // average 16 samples to reduce noise
sum += analogRead(BAT_PIN);
delay(2);
}
float adc = sum / 16.0;
float vpin = (adc / 1023.0) * VREF;
return vpin * DIVIDER;
}
int stateOfCharge(float v) {
// Rough linear SoC map for 1S LiPo (3.0V empty, 4.2V full)
float pct = (v - 3.0) / (4.2 - 3.0) * 100.0;
if (pct < 0) pct = 0;
if (pct > 100) pct = 100;
return (int)pct;
}
void setup() {
Serial.begin(9600);
}
void loop() {
float v = readCellVoltage();
int soc = stateOfCharge(v);
Serial.print("Cell: ");
Serial.print(v, 2);
Serial.print(" V (");
Serial.print(soc);
Serial.println("%)");
if (v < 3.1) Serial.println("WARNING: cell near empty - stop discharge.");
delay(2000);
}
ESP32 (3.3V ADC)
// 351015 LiPo cell voltage monitor for ESP32
// Wiring: Cell (+) -- 100k -- GPIO34 -- 100k -- GND
// GPIO34 is an input-only ADC1 pin (safe for use during Wi-Fi).
// ESP32 ADC is nonlinear - we use analogReadMilliVolts() for a calibrated reading.
const int BAT_PIN = 34;
const float DIVIDER = 2.0; // R1 = R2 = 100k
float readCellVoltage() {
uint32_t sumMv = 0;
for (int i = 0; i < 32; i++) {
sumMv += analogReadMilliVolts(BAT_PIN); // returns calibrated mV
delay(2);
}
float vpin = (sumMv / 32.0) / 1000.0; // average, convert to volts
return vpin * DIVIDER;
}
void setup() {
Serial.begin(115200);
analogSetPinAttenuation(BAT_PIN, ADC_11db); // ~0 - 3.3V input range
}
void loop() {
float v = readCellVoltage();
float soc = (v - 3.0) / 1.2 * 100.0;
if (soc < 0) soc = 0;
if (soc > 100) soc = 100;
Serial.printf("LiPo: %.2f V (%.0f%%)\n", v, soc);
if (v < 3.1) Serial.println("Low battery - going to deep sleep");
delay(2000);
}
Raspberry Pi Pico (MicroPython)
# 351015 LiPo cell voltage monitor for Raspberry Pi Pico (MicroPython)
# Wiring: Cell (+) -- 100k -- GP26/ADC0 -- 100k -- GND
# Pico ADC is 12-bit, 3.3V reference, exposed via machine.ADC().read_u16()
from machine import ADC, Pin
import time
adc = ADC(Pin(26)) # ADC0 on GP26
VREF = 3.3
DIVIDER = 2.0 # R1 = R2 = 100k
def read_cell_voltage():
total = 0
for _ in range(32):
total += adc.read_u16() # 0..65535
time.sleep_ms(2)
raw = total / 32
vpin = (raw / 65535) * VREF
return vpin * DIVIDER
def state_of_charge(v):
pct = (v - 3.0) / 1.2 * 100
return max(0, min(100, pct))
while True:
v = read_cell_voltage()
soc = state_of_charge(v)
print("LiPo: {:.2f} V ({:.0f}%)".format(v, soc))
if v < 3.1:
print("WARNING: cell near empty - stop discharge.")
time.sleep(2)