
ESP32-S3 board
The brain of the build — with a Wi-Fi radio already aboard.
TinySkiff ESP32-S3 Lab · Day 29 of 30
No wiring today — the radio is already inside the ESP32-S3. You hand the board your Wi-Fi name and password, watch it join your network, and read back the address your router assigns it. That address is the board's berth number, and Day 30 dials it.
TSK-DAY29-WIFI
Hand this to an agent so it can pull the lesson packet and coach you step by step.
01 First, know the pieces
Three things on the bench, plus one you already own: the name and password of your 2.4 GHz Wi-Fi network. Have both written down before you start. Tap Define on anything unfamiliar — the answer opens as a field note you can read and dismiss without losing your place.

The brain of the build — with a Wi-Fi radio already aboard.

Uploads the sketch and opens Serial Monitor.

Sketch_23.1_WiFi_Station.ino
02 One action at a time
The whole day is edit two lines, upload, and read the monitor. Tap each step as you go to keep your place — you can finish without opening a single field note.
Plug the ESP32-S3 into your computer with a data-capable USB cable.
Open Sketch_23.1_WiFi_Station.ino in Arduino IDE.
Replace both "********" strings with your own Wi-Fi name and password — keep the double quotes, and use your 2.4 GHz network.
Select your ESP32-S3 board and its port, then press Upload.
Open Serial Monitor and set the baud rate to 115200.
Watch Setup start, then dots while the board negotiates, then the IP address your router assigns.
Write that address in your logbook — Day 30 dials it.
03 Read just enough code
The sketch is short enough to read whole. Two lines near the top hold the placeholders you replace with your own credentials; setup() does all the work and loop() stays empty. Switch to MicroPython if you'd rather see the same idea in Python.
#include <WiFi.h>
const char *ssid_Router = "********"; //Enter the router name
const char *password_Router = "********"; //Enter the router password
void setup(){
Serial.begin(115200);
delay(2000);
Serial.println("Setup start");
WiFi.begin(ssid_Router, password_Router);
Serial.println(String("Connecting to ")+ssid_Router);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("\nConnected, IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Setup End");
}
void loop() {
}
WiFi.begin(ssid_Router, password_Router)Asks to join your router by name — station mode — using the credentials you typed into the two strings above. while (WiFi.status() != WL_CONNECTED)Waits for the router to accept the board, printing a dot every half second — and it will wait forever, so endless dots mean wrong credentials. Serial.println(WiFi.localIP())Prints the IP address your router assigned — the board's berth number, and the number Day 30 dials. Optional side path · no wiring
ssidRouter = '********' #Enter the router name
passwordRouter = '********' #Enter the router password
def STA_Setup(ssidRouter,passwordRouter):
print("Setup start")
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to',ssidRouter)
sta_if.active(True)
sta_if.connect(ssidRouter,passwordRouter)
while not sta_if.isconnected():
pass
print('Connected, IP address:', sta_if.ifconfig())
print("Setup End")
network.WLAN(network.STA_IF)Creates the station interface — MicroPython's handle on the board's radio in join-a-network mode.sta_if.ifconfig()Returns the board's network details once connected — the first value is its IP address.Same radio, same credentials — replace both '********' strings before you run it in Thonny. If MicroPython isn't set up yet, skip this — it should never block the Arduino-first day.
04 Understand, don't memorise
Chapter 23 of the manual gives the radio three working modes. Today's upload is station mode — the board joins your network the way your phone does. The challenge flips it to access-point mode, where the board hosts a network of its own.
The board calls your router by name and offers the password.
The router verifies the password and accepts the board onto the network.
The router hands the board an IP address of its own — its berth number.
The sketch prints that address so you can write it down for Day 30.
station = join a network · access point = be the network
Your router runs a small harbourmaster service called DHCP. Every device that joins gets assigned a free berth — an IP address — which is why the one your board prints will differ from the one in this lesson.
The third mode, AP+Station (Sketch_23.3_AP_Station), runs both at the same time — the board stays joined to your router while hosting its own network.
05 Know it worked
Success and recovery sit side by side, so you never have to go hunting when something looks off.
Your network name and the address itself will differ — the IP is whatever your router assigns. A handful of dots is normal; they should stop within a few seconds.
06 Make the idea yours
Same board, opposite role. The second official sketch turns the ESP32-S3 into an access point — a network your phone can see and join. It fits inside today's 25 minutes.
Upload Sketch_23.2_WiFi_AP — the line WiFi.softAP(ssid_AP, password_AP) turns the board into an access point, and the monitor prints Soft-AP IP address = …. Your phone's Wi-Fi list now shows WiFi_Name; join it with the password 12345678.
Change ssid_AP to your boat's name, pick a new password of 8 or more characters, and re-upload. Rescan on your phone and there it is.
Back in station mode, open your router's device list and find your board there — the same IP address the monitor printed.
Logbook
07 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-DAY29-WIFI
How the agent should behave: keep credentials private — the learner edits them into the sketch locally, never into chat — and check the 2.4 GHz band, both placeholder strings, and baud rate before changing code.