Skip to content

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.

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.

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 router
WiFi.mode(WIFI_AP); // create your own network
WiFi.mode(WIFI_AP_STA); // both simultaneously
#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.

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.

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.

WiFi is the most power-hungry feature on the ESP32-S3:

ModeCurrent 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.

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.

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.

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.

WiFiESP-NOWBLE
Best forInternet, web servers, cloud, APIsDirect board-to-board, no routerPhone apps, low-power sensors
Needs routerYesNoNo
Range (indoors)~30 m~50+ m~10–30 m
PowerHighest (~290 mA TX)Low (~100 mA TX)Very low
Talks to phonesVia 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.

FeatureESP32-S3
Frequency2.4 GHz only
Standard802.11 b/g/n
Max data rate150 Mbps (HT40)
ModesSTA, AP, STA+AP
TX current~285–290 mA
Conflicts withADC2 (GPIO 11–20)
Arduino libraryWiFi.h (pre-installed)

GreatScott! — ~11 minutes. WiFi web server basics and controlling hardware from a phone browser. Practical and beginner-focused.