Overview
The SHILLEHTEK 1x 18650 Battery Holder Box is a compact, single-cell plastic enclosure designed to hold one standard 18650 lithium-ion cell. It features pre-attached red (+) and black (-) silicone-jacketed lead wires roughly 150 mm long, making it ready to drop into any project that needs a portable 3.7 V power source. The body measures approximately 75 x 21 x 18 mm and uses spring-loaded contacts at both ends to grip the cell firmly without the need for soldering tabs.
This holder is intentionally simple: there is no on/off switch, no protection circuitry, and no cover. It is a passive mechanical mount for your battery, intended for makers, prototypers, and DIY electronics enthusiasts who want quick, swappable single-cell power for boards like the ESP32, Arduino, Raspberry Pi Pico, LoRa nodes, sensor loggers, or small flashlights.
Because the holder has no built-in protection, you should always pair it with a matching 1S BMS or TP4056-style charge/protect module for charging and over-discharge protection. SHILLEHTEK stocks compatible 1S BMS and TP4056 modules sized exactly for this holder's output current range.
At a Glance
Specifications
| Parameter | Value |
|---|---|
| Cell Type | 1x 18650 Li-ion |
| Nominal Output Voltage | 3.7 V |
| Full Charge Voltage | 4.2 V |
| Recommended Discharge Cutoff | 2.8 - 3.0 V |
| Max Continuous Current | ~3 A (limited by leads & contacts) |
| Housing Material | ABS plastic |
| Wire Type | 22 AWG silicone, red (+) / black (-) |
| Wire Length | ~150 mm |
| Dimensions | 75 x 21 x 18 mm |
| Weight (empty) | ~10 g |
Wiring Guide
Insert one 18650 cell into the holder, observing the polarity markings molded into the plastic. The flat (+) end of the cell goes against the spring marked +; the raised (-) button goes against the opposite spring.
| Cell Side | Holder Contact |
|---|---|
| Positive (+) flat top | Red wire side, marked + |
| Negative (-) raised button | Black wire side, marked - |
The two output wires connect directly to your load or charge/protect circuit. Strip ~5 mm of insulation and tin the ends for screw terminals, or solder them straight to a PCB.
| Wire | Polarity | Connects To |
|---|---|---|
| Red | + (3.0 - 4.2 V) | Load VIN / BMS B+ / TP4056 B+ |
| Black | - (GND) | Load GND / BMS B- / TP4056 B- |
Because this holder has no protection, always charge through a 1S BMS or a TP4056 charger module. Wire the holder leads to the battery side of the protection board, and connect your load and USB-C input to the output side.
| Holder Wire | TP4056 / 1S BMS Pad |
|---|---|
| Red (+) | B+ (battery positive) |
| Black (-) | B- (battery negative) |
The TP4056 OUT+ / OUT- pads then feed your load. SHILLEHTEK sells matching 1S BMS modules with built-in TP4056 charging that pair perfectly with this holder.
Common single-cell projects that use this holder:
- ESP32 / ESP8266 sensor nodes with a 3.3 V LDO or buck
- Raspberry Pi Pico projects through a boost converter
- LoRa & LoRaWAN endpoints running on RFM95 modules
- DIY flashlights with a constant-current LED driver
- Portable data loggers with SD card and RTC
Code Examples
The snippets below read the pack voltage through an analog input and a resistor divider (e.g. 100 kΩ over 100 kΩ), so a 4.2 V cell shows up as ~2.1 V at the ADC pin - safely within range.
const int VBAT_PIN = A0;
const float DIVIDER = 2.0; // 100k / 100k -> gain of 2
const float VREF = 5.0; // change to 3.3 for 3V3 boards
void setup() {
Serial.begin(115200);
analogReference(DEFAULT);
}
void loop() {
int raw = analogRead(VBAT_PIN);
float vAdc = raw * (VREF / 1023.0);
float vBat = vAdc * DIVIDER;
Serial.print("Battery: ");
Serial.print(vBat, 2);
Serial.println(" V");
delay(1000);
}
#define VBAT_PIN 34
const float DIVIDER = 2.0;
const float VREF = 3.3;
void setup() {
Serial.begin(115200);
analogReadResolution(12); // 0..4095
analogSetAttenuation(ADC_11db); // 0..~3.3 V
}
void loop() {
int raw = analogRead(VBAT_PIN);
float vAdc = raw * (VREF / 4095.0);
float vBat = vAdc * DIVIDER;
Serial.printf("VBAT = %.2f V\n", vBat);
delay(1000);
}
from machine import ADC, Pin
import time
vbat = ADC(Pin(26)) # GP26 = ADC0
DIVIDER = 2.0
VREF = 3.3
while True:
raw = vbat.read_u16()
vadc = raw * VREF / 65535
vpack = vadc * DIVIDER
print("VBAT = {:.2f} V".format(vpack))
time.sleep(1)