
ESP32-S3 board
The brain that runs your uploaded sketch.
TinySkiff ESP32-S3 Lab · Day 13 of 30
Today the board learns to measure. You wire a rotary potentiometer — a knob that dials a voltage — to GPIO 1, and the ESP32-S3's ADC turns that voltage into a number between 0 and 4095. Open Serial Monitor and the number follows your hand.
TSK-DAY13-ADC
Hand this to an agent so it can pull the lesson packet and coach you step by step.
01 First, know the pieces
Five things, one of them new. Tap Define on any part you haven't met — the answer opens as a field note you can read and dismiss without losing your place.

The brain that runs your uploaded sketch.

Spreads the pins into rows you can reach and label.

The knob — a resistor track with a sliding tap.

Temporary, solder-free connections.

Uploads the sketch and opens Serial Monitor.
02 Make the physical circuit
The official Freenove diagram is your chart — schematic on top, the same circuit built on a breadboard below. Click it to enlarge. Three wires today, and each row below tells you where one goes and why.
Keep the pot on 3.3V. GPIO 1 is built to read voltages up to 3.3V, so power the potentiometer from the 3.3V pin — the 5V pin would push the wiper past that limit. Unplug USB before you move any wire.
03 One action at a time
This is the main path — you can finish the day without opening a single field note. Tap each step as you go to keep your place.
Seat the ESP32-S3 on the GPIO extension board and keep USB unplugged while you wire.
Push the potentiometer into the breadboard so each of its three pins has its own row.
Run a jumper from one outer pin to 3.3V and a second jumper from the other outer pin to GND.
Run the third jumper from the middle pin (pin 3) to GPIO 1.
Compare every wire to the chart before you plug in USB.
Open Sketch_08.1_ADC.ino in Arduino IDE and upload it.
Open Serial Monitor and set the baud rate to 115200.
Turn the knob slowly from one end to the other and watch the numbers sweep.
04 Read just enough code
The working part of the sketch is four lines, five times a second — read the pin, do one line of arithmetic, print, wait. Switch to MicroPython if you'd rather see the same idea in Python — the wiring never changes.
#define PIN_ANALOG_IN 1
void setup() {
Serial.begin(115200);
}
void loop() {
int adcVal = analogRead(PIN_ANALOG_IN);
double voltage = adcVal / 4095.0 * 3.3;
Serial.printf("ADC Val: %d, \t Voltage: %.2fV\r\n", adcVal, voltage);
delay(200);
}
analogRead(PIN_ANALOG_IN)Samples the voltage on GPIO 1 and returns a number from 0 to 4095. adcVal / 4095.0 * 3.3Converts the reading back into volts — 4095.0 is the top reading, so a full turn lands exactly on 3.30V.Serial.printf("ADC Val: %d, \t Voltage: %.2fV\r\n", adcVal, voltage)Prints the raw reading and the voltage on one line, five times a second. Optional side path · same circuit
adc=ADC(Pin(1))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT)
adcVal=adc.read()
voltage = adcVal / 4095.0 * 3.3
print("ADC Val:",adcVal,"\tVoltage:",voltage,"V")
adc.atten(ADC.ATTN_11DB)Opens the input range so the pin can read the full 0 to 3.3V sweep.adc.width(ADC.WIDTH_12BIT)Sets 12-bit readings — 0 to 4095 — the same scale the Arduino core uses by default.Same pins, same wiring. MicroPython asks you to set the range and the resolution yourself — the two adc. lines above — where the Arduino core picks those defaults for you. Run it in Thonny if MicroPython is set up; otherwise skip it — it should never block the Arduino-first path.
05 Understand, don't memorise
Two ideas meet today. The potentiometer turns position into voltage, and the ADC turns voltage into a number your code can hold.
The knob moves a contact along a track between 3.3V and ground.
The middle pin sits at a voltage that matches the knob's position.
analogRead converts that voltage into a number from 0 to 4095.
The sketch sends the reading and the voltage up the USB cable five times a second.
voltage = reading ÷ 4095 × 3.3
Twelve bits give 4096 steps numbered 0 through 4095 — so 4095 means the pin sees the full 3.3V, and the code divides by 4095.0 to match.
The track splits 3.3V along its length and the wiper taps off the share at its position — a divider you adjust by hand.
06 Know it worked
Success and recovery sit side by side, so you never have to go hunting when something looks off.
The values track the knob — one end reads near 0, the other near 4095, and every position between prints its own pair.
07 Make the idea yours
Same working circuit, one new habit: reading the world through numbers. It fits inside today's 20 minutes.
Turn the knob until the reading sits near 2048 — half of 4095. Check the shaft — is it pointing halfway round?
Pick three positions — a quarter turn, halfway, three quarters — and write down the reading at each. Then hold one position still and watch how steady the number stays.
Logbook
08 Learn it with a hand on the tiller
Every lesson ships with a code and a machine-readable packet, so an agent can guide you with full context.
TSK-DAY13-ADC
How the agent should behave: guide one wire at a time, wait for you to confirm, explain terms on request, and always check wiring, board, port, and baud rate before changing code.