TinySkiff ESP32-S3 Lab · Day 3 of 30

Prove the whole chain
with one blink

No wiring today. You upload five short lines and the board's own tiny LED starts blinking — the smallest possible proof that everything from your keyboard to the chip is connected and listening.

About 15 minutesArduino firstNo wiring todayNo electronics assumed
Agent assist code TSK-DAY03-BLINK

Hand this to an agent so it can pull the lesson packet and coach you step by step.

01 First, know the pieces

What you need

Almost nothing today — the LED you'll blink is already on the board. Tap Define on anything unfamiliar; the answer opens as a field note.

Official manual photo of the ESP32-S3 development board.
Manual photo

ESP32-S3 board

The board — and the small onboard LED you'll blink.

Official manual screenshot of the Arduino IDE interface.
Manual screenshot

Arduino IDE

Opens the sketch, uploads it, and reports "Done uploading."

Official manual page showing an Arduino Blink sketch.
Manual sketch

Official sketch

Sketch_01.1_Blink.ino

02 One action at a time

Build it

The whole day is upload-and-watch. Tap each step as you go to keep your place — you can finish without opening a single field note.

0 / 5 done
  1. Plug the ESP32-S3 into your computer with a data-capable USB-C cable.

  2. In Arduino IDE, select your ESP32-S3 board and the port it appears on.

  3. Open Sketch_01.1_Blink.ino.

  4. Press Upload and wait for the IDE to say Done uploading.

  5. Watch the small onboard LED near the chip start to blink.

It's alive.

Your code is running on the board. Every later day starts from this exact upload-and-watch loop.

03 Read just enough code

Read the code

Five short lines. Two of them run once to get ready; three of them repeat forever. That's the shape of nearly every Arduino sketch.

Sketch_01.1_Blink.ino
#define LED_BUILTIN 2

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // on
  delay(1000);                       // wait 1 second
  digitalWrite(LED_BUILTIN, LOW);    // off
  delay(1000);                       // wait 1 second
}
#define LED_BUILTIN 2Names the onboard LED's pin so the rest of the sketch reads plainly.
pinMode(LED_BUILTIN, OUTPUT)Runs once in setup() to say this pin will push signal out.
digitalWrite(LED_BUILTIN, HIGH)Turns the LED on; LOW turns it off.
delay(1000)Holds that state for one second before the next line.

04 Understand, don't memorise

Why it blinks

There's no magic here — just two functions the board runs in a fixed order, over and over.

Run once

setup()

The board prepares the pin as an output.

Then loop

loop()

Everything inside runs again and again without stopping.

Light on

HIGH + delay

Voltage on the pin lights the LED; delay holds it there.

Light off

LOW + delay

Voltage off; delay holds the dark before it repeats.

The rhythm one blink = 1 s on + 1 s off = a 2-second cycle

setup() vs loop()

setup() gets things ready a single time; loop() is the part that keeps running.

05 Know it worked

Test & debug

Nothing prints to the screen today — the proof is on the board itself.

What you should see
Onboard LED
  • The small onboard LED turns on for one second.
  • Then off for one second.
  • Then it repeats, steady, for as long as the board has power.

The larger LED that stays lit is the power light — look for the smaller one that blinks.

If it doesn't
  • Nothing blinks? Confirm the right board and port are selected, then upload again.
  • No `Done uploading`? Try a different USB-C cable — some are charge-only and carry no data.
  • One LED glows steady? That's the power LED. The blink is a second, smaller LED near the chip.

06 Make the idea yours

Try this: find a heartbeat

Same sketch, one small change: the two delay numbers. Timing is what gives a blink its character.

Speed it up

Set both delay(1000) lines to delay(200) and upload. Notice how different 200 feels.

Find a heartbeat

Adjust the two numbers until the blink feels like a resting pulse. Write down what you landed on.

Logbook

07 Learn it with a hand on the tiller

Coach me through it

Every lesson ships with a code and a machine-readable packet, so an agent can guide you with full context.

Lesson code

TSK-DAY03-BLINK

How the agent should behave: keep it to upload-and-watch, check board and port and cable before touching code, and explain setup()/loop() and the delay numbers on request.

Field note

Shortcut

Prompt copied