What is WiFi?
The tinyCore ESP32-S3 has a built-in 2.4 GHz WiFi radio. With it, your board can connect to your home network and reach the internet, or create its own wireless network that phones and laptops join directly. This is what turns a small microcontroller into a networked device — serving web pages, pushing sensor data to the cloud, pulling information from APIs, and receiving commands over HTTP.
Why This Matters for Your Projects
Section titled “Why This Matters for Your Projects”WiFi is how your tinyCore reaches the internet. Anytime you want to control your project from a phone browser, log data to Google Sheets or ThingSpeak, get the current time, check the weather, or update firmware without plugging in a USB cable — you need WiFi.
Three WiFi Modes
Section titled “Three WiFi Modes”The ESP32-S3 supports three operating modes:
Station (STA) — your tinyCore connects to an existing WiFi network (your router). The router assigns it an IP address. This is what you use for internet access, cloud services, and web APIs.
Access Point (AP) — your tinyCore creates its own WiFi network. Other devices connect to it directly. No internet in this mode — it’s useful when there’s no router around, or for initial device setup and configuration.
STA+AP — both at once. The tinyCore stays connected to your router while also hosting its own network. Useful for running a configuration portal while maintaining internet connectivity.
WiFi.mode(WIFI_STA); // connect to your routerWiFi.mode(WIFI_AP); // create your own networkWiFi.mode(WIFI_AP_STA); // both simultaneouslyBasic Connection Code
Section titled “Basic Connection Code”#include <WiFi.h>
const char* ssid = "YourNetwork";const char* password = "YourPassword";
void setup() { Serial.begin(115200); delay(2000);
WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);
Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("\nConnected!"); Serial.print("IP address: "); Serial.println(WiFi.localIP());}
void loop() { // your code here}The flow: set station mode → call WiFi.begin() with your credentials → wait for WL_CONNECTED → get your IP with WiFi.localIP(). That IP is what you type into a browser to reach a web server running on the tinyCore.
What You Can Build
Section titled “What You Can Build”Web server. Host a page on the tinyCore that you open in any phone browser to control LEDs, relays, or read sensor values. No app install needed — just open the IP address. The built-in WebServer library handles this, or use ESPAsyncWebServer for handling multiple connections without blocking.
Cloud data logging. Push sensor readings to ThingSpeak, Google Sheets, Firebase, or any MQTT broker. MQTT (via the PubSubClient library) is the standard lightweight protocol for IoT.
API requests. Pull weather data, get the current time via NTP, or hit any REST API using the built-in HTTPClient library. Parse JSON responses with the ArduinoJson library.
OTA firmware updates. Upload new code over WiFi instead of plugging in USB. The built-in ArduinoOTA library works directly with Arduino IDE. The ElegantOTA library gives you a browser-based upload page.
Home automation. Integrate with Home Assistant using ESPHome (YAML config, no Arduino code needed) or MQTT.
On the tinyCore (ESP32-S3)
Section titled “On the tinyCore (ESP32-S3)”Hardware
Section titled “Hardware”The WiFi radio is inside the ESP32-S3 module on the tinyCore, with a built-in PCB antenna. It supports 2.4 GHz only — no 5 GHz. The standard is 802.11 b/g/n with up to 150 Mbps data rate (HT40).
If your router has a combined 2.4/5 GHz SSID, the tinyCore will connect on 2.4 GHz automatically. But if your router only broadcasts on 5 GHz, the tinyCore won’t see the network at all.
Power Consumption
Section titled “Power Consumption”WiFi is the most power-hungry feature on the ESP32-S3:
| Mode | Current Draw |
|---|---|
| WiFi TX | ~285–290 mA |
| WiFi RX | ~100 mA |
| CPU active (no WiFi) | ~30–50 mA |
| Deep sleep | ~7–8 µA |
For battery projects: wake up, connect to WiFi, send your data, then go back to deep sleep. Leaving WiFi on continuously will drain a small LiPo fast.
ADC2 Conflict
Section titled “ADC2 Conflict”WiFi and ADC2 (GPIO 11–20) share hardware. When WiFi is active, ADC2 readings return garbage. Use ADC1 pins (GPIO 1–10) for analog readings when WiFi is on. This is the same limitation described in the ADC reference.
ESP-NOW Coexistence
Section titled “ESP-NOW Coexistence”You can use ESP-NOW and WiFi at the same time, but they must operate on the same channel. Set mode to WIFI_AP_STA for best results. Disable WiFi power saving with esp_wifi_set_ps(WIFI_PS_NONE) to prevent dropped ESP-NOW packets.
Common Problems and Fixes
Section titled “Common Problems and Fixes”Won’t connect
- Wrong SSID or password (case-sensitive!)
- Router is broadcasting on 5 GHz only
- tinyCore is too far from the router — check signal with
WiFi.RSSI()(anything weaker than -75 dBm is unreliable) - Hidden SSID (requires specifying BSSID and channel in
WiFi.begin())
Random disconnections
Almost always a power supply issue. WiFi TX draws up to 335 mA in bursts. A weak USB cable or underpowered USB port causes brownout resets — you’ll see "Brownout detector was triggered" in the Serial Monitor. Use a quality USB-C cable and a port that can deliver 500+ mA. Also try WiFi.setSleep(false) to disable WiFi modem sleep.
Can’t reach the web server from my phone Your phone and the tinyCore must be on the same WiFi network. If you’re on 5 GHz and the tinyCore is on 2.4 GHz but they share the same router, it should still work — they’re on the same LAN. If it doesn’t, check that your router isn’t isolating clients.
WiFi vs ESP-NOW vs Bluetooth
Section titled “WiFi vs ESP-NOW vs Bluetooth”| WiFi | ESP-NOW | BLE | |
|---|---|---|---|
| Best for | Internet, web servers, cloud, APIs | Direct board-to-board, no router | Phone apps, low-power sensors |
| Needs router | Yes | No | No |
| Range (indoors) | ~30 m | ~50+ m | ~10–30 m |
| Power | Highest (~290 mA TX) | Low (~100 mA TX) | Very low |
| Talks to phones | Via browser (no app needed) | No (ESP devices only) | Via BLE apps |
Use WiFi when you need the internet. Use ESP-NOW for fast, direct communication between boards. Use Bluetooth for connecting to phone apps or low-power beacons.
Quick Reference
Section titled “Quick Reference”| Feature | ESP32-S3 |
|---|---|
| Frequency | 2.4 GHz only |
| Standard | 802.11 b/g/n |
| Max data rate | 150 Mbps (HT40) |
| Modes | STA, AP, STA+AP |
| TX current | ~285–290 mA |
| Conflicts with | ADC2 (GPIO 11–20) |
| Arduino library | WiFi.h (pre-installed) |
Learn More
Section titled “Learn More”- Connect to WiFi — hands-on WiFi tutorial with web server code
- Save Data to Google Sheets — cloud data logging
- Save Data to ThingSpeak — IoT dashboard
- Host a Website Interface — advanced web server
- What is ESP-NOW? — alternative when you don’t need internet
- What is Bluetooth? — alternative for phone connectivity
Video: ESP32 WiFi Basics
Section titled “Video: ESP32 WiFi Basics”GreatScott! — ~11 minutes. WiFi web server basics and controlling hardware from a phone browser. Practical and beginner-focused.