Community project

Miniature 4G Kids Phone

ESP32
Photo of Miniature 4G Kids Phone
Generated with AI

Piotr Gawlik

Published October 22, 2026

This guide walks through building a miniature 4G kids phone prototype based on the ESP32 microcontroller. The project demonstrates basic button input handling and LED status indicators, providing a foundation for understanding how physical controls and feedback work in embedded systems.

Following this guide, builders will receive a wiring diagram showing how to connect two tactile buttons and two LEDs to the ESP32, a complete parts list, and firmware that debounces button presses and controls the indicator lights. Assembly takes just a few minutes and requires only basic soldering skills.

Wiring diagram

Wiring diagram for Miniature 4G Kids Phone

Gather all the parts

QtyComponent
1

Owned normally-open tactile button

Owned normally-open tactile button

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Owned normally-open tactile button

Owned normally-open tactile button

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Owned green LED

Owned green LED

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Owned red LED

Owned red LED

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Series resistor

2.2 kohm

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Series resistor

2.2 kohm

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Button pull-up resistor

10 kohm

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

1

Button pull-up resistor

10 kohm

Revision B controller validation sheet only; see design/README.md for unreleased phone circuitry.

Assemble it in 3 steps

1. Review the unreleased phone design

Read data/design/README.md. Only the USB-powered button and LED validation circuit is released here. Do not connect the battery, charger, boost converter or modem to this validation circuit.

  • The phone power and audio design is not released for assembly or child use.

2. Connect the two buttons

Connect MAMA between D1 (GPIO3) and ground, and TATA between D2 (GPIO4) and ground. Add one 10 kohm resistor from each button signal to 3V3. Use two electrically distinct switch contacts.

3. Connect the indicators

D4 (GPIO6) connects through its 2.2 kohm resistor to the green LED anode. D5 (GPIO7) connects through its separate 2.2 kohm resistor to the red LED anode. Both cathodes go to ground. Red stays on to indicate this is not phone firmware; green lights when a button is pressed.

Review all connections

1. Connections between "sw_mama" and "ESP32"

Functionsw_mamaESP32
data1GPIO 3
ground2GND

2. Connections between "sw_tata" and "ESP32"

Functionsw_tataESP32
data1GPIO 4
ground2GND

3. Connections between "r_mama" and "ESP32"

Functionr_mamaESP32
power13V3
data2 → Owned normally-open tactile button 1EXT

4. Connections between "r_tata" and "ESP32"

Functionr_tataESP32
power13V3
data2 → Owned normally-open tactile button 1EXT

5. Connections between "r_green" and "ESP32"

Functionr_greenESP32
data1GPIO 6
data2 → Owned green LED AEXT

6. Connections between "led_green" and "ESP32"

Functionled_greenESP32
groundKGND

7. Connections between "r_red" and "ESP32"

Functionr_redESP32
data1GPIO 7
data2 → Owned red LED AEXT

8. Connections between "led_red" and "ESP32"

Functionled_redESP32
groundKGND

Deploy the firmware

#include <Arduino.h>
// UI validation ONLY. No modem control or phone functionality is implemented.
// Green lights only while a button is held: it does NOT report network readiness.
constexpr int MAMA=3,TATA=4,GREEN=6,RED=7;
void setup(){pinMode(MAMA,INPUT);pinMode(TATA,INPUT);pinMode(GREEN,OUTPUT);pinMode(RED,OUTPUT);digitalWrite(RED,HIGH);}
void loop(){ static uint32_t changed=0; static bool previous=false,stable=false;
 bool pressed=!digitalRead(MAMA)||!digitalRead(TATA);
 if(pressed!=previous){previous=pressed;changed=millis();}
 if(millis()-changed>=30)stable=pressed;
 digitalWrite(GREEN,stable); delay(5);
}

Remix this project

Make it yours in one click

Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.

Open in Schematik