📖 Scenario: You want to connect your ESP8266 or ESP32 microcontroller to a WiFi network so it can communicate with other devices or the internet.
🎯 Goal: Build a simple Arduino program that connects your ESP8266/ESP32 to a WiFi network and prints the connection status and IP address to the Serial Monitor.
📋 What You'll Learn
Create variables for WiFi network name and password
Initialize WiFi connection using the variables
Check connection status in a loop until connected
Print connection status and IP address to Serial Monitor
💡 Why This Matters
🌍 Real World
Connecting ESP8266 or ESP32 to WiFi is the first step to making smart devices that can send data to the internet or be controlled remotely.
💼 Career
Understanding how to connect microcontrollers to WiFi networks is essential for IoT developers and embedded systems engineers.
Progress0 / 4 steps
1
Set up WiFi network credentials
Create two variables called ssid and password and set them to the exact strings "YourNetworkName" and "YourNetworkPassword" respectively.
Arduino
Hint
Use const char* type for the network name and password strings.
2
Start Serial and WiFi connection
Add void setup() function. Inside it, start Serial communication at 115200 baud with Serial.begin(115200);. Then start WiFi connection using WiFi.begin(ssid, password);.
Arduino
Hint
Use Serial.begin(115200); to start serial and WiFi.begin(ssid, password); to start connecting.
3
Wait for WiFi connection
Inside void setup(), add a while loop that waits until WiFi.status() == WL_CONNECTED. Inside the loop, print "Connecting to WiFi..." to Serial and add a 500 ms delay.
Arduino
Hint
Use while loop to check connection status and delay(500); to wait half a second each time.
4
Print connection success and IP address
After the while loop in setup(), print "WiFi connected!" and then print the IP address using WiFi.localIP() with Serial.println().
Arduino
Hint
Use Serial.println("WiFi connected!"); and Serial.println(WiFi.localIP()); to show the IP address.
Practice
(1/5)
1. What is the main purpose of WiFi.begin(ssid, password) in ESP8266/ESP32 programming?
easy
A. To start connecting the device to a WiFi network
B. To disconnect from the current WiFi network
C. To check the current WiFi signal strength
D. To get the IP address of the device
Solution
Step 1: Understand the function purpose
WiFi.begin(ssid, password) is used to initiate connection to a WiFi network using the given network name (SSID) and password.
Step 2: Compare with other options
Disconnecting, checking signal strength, or getting IP address are done by other functions, not WiFi.begin.
Final Answer:
To start connecting the device to a WiFi network -> Option A
Quick Check:
WiFi.begin starts connection [OK]
Hint: Remember: begin means start connection [OK]
Common Mistakes:
Confusing begin with disconnect
Thinking it returns IP address
Assuming it checks signal strength
2. Which of the following is the correct syntax to check if the ESP8266 is connected to WiFi?
easy
A. if (WiFi.connected())
B. if (WiFi.checkConnection())
C. if (WiFi.isConnected())
D. if (WiFi.status() == WL_CONNECTED)
Solution
Step 1: Recall the correct method to check WiFi connection
The standard way is to use WiFi.status() and compare it to WL_CONNECTED to confirm connection.
Step 2: Verify other options
Methods like WiFi.connected(), WiFi.isConnected(), or WiFi.checkConnection() do not exist in the ESP8266 WiFi library.
Hint: Use WiFi.status() with WL_CONNECTED constant [OK]
Common Mistakes:
Using non-existent methods like WiFi.connected()
Confusing status check syntax
Forgetting to compare with WL_CONNECTED
3. What will the following code print if the ESP8266 successfully connects to WiFi?
WiFi.begin("MySSID", "MyPass");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println(WiFi.localIP());
medium
A. The IP address assigned to the ESP8266
B. The SSID of the WiFi network
C. The WiFi password
D. Nothing, it will cause an error
Solution
Step 1: Analyze the connection loop
The code waits until WiFi.status() returns WL_CONNECTED, meaning the device is connected to WiFi.
Step 2: Understand the output command
WiFi.localIP() returns the IP address assigned to the device by the router, which is printed to Serial.
Final Answer:
The IP address assigned to the ESP8266 -> Option A
Quick Check:
WiFi.localIP() prints device IP [OK]
Hint: localIP() shows device IP after connection [OK]
Common Mistakes:
Thinking it prints SSID or password
Assuming it prints connection status
Believing it causes an error
4. Identify the error in this ESP32 WiFi connection code:
WiFi.begin(ssid, password);
while (WiFi.status() = WL_CONNECTED) {
delay(1000);
}
Serial.println("Connected!");
medium
A. Missing WiFi.begin() call
B. Incorrect delay value
C. Using single '=' instead of '==' in the while condition
D. No Serial.begin() before printing
Solution
Step 1: Check the while loop condition
The condition uses a single '=' which is an assignment, not a comparison. It should be '==' to compare values.
Step 2: Confirm other parts
WiFi.begin() is called, delay is valid, and Serial.begin() is not shown but not the main error here.
Final Answer:
Using single '=' instead of '==' in the while condition -> Option C
Quick Check:
Use '==' for comparison in conditions [OK]
Hint: Use '==' to compare, '=' assigns value [OK]
Common Mistakes:
Confusing '=' with '==' in conditions
Ignoring Serial.begin() setup
Assuming delay value causes error
5. You want your ESP32 to connect to WiFi and print its IP address only after a successful connection, but also stop trying after 10 seconds if it fails. Which code snippet correctly implements this?
hard
A. WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if (millis() > 10000) break;
}
Serial.println(WiFi.localIP());
B. WiFi.begin(ssid, password);
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED && millis() - start < 10000) {
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(WiFi.localIP());
} else {
Serial.println("Failed to connect");
}
C. WiFi.begin(ssid, password);
for (int i = 0; i < 20; i++) {
if (WiFi.status() == WL_CONNECTED) break;
delay(500);
}
Serial.println(WiFi.localIP());
D. WiFi.begin(ssid, password);
while (WiFi.status() == WL_CONNECTED) {
delay(10000);
}
Serial.println(WiFi.localIP());
Solution
Step 1: Understand the timeout logic
WiFi.begin(ssid, password);
unsigned long start = millis();
while (WiFi.status() != WL_CONNECTED && millis() - start < 10000) {
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(WiFi.localIP());
} else {
Serial.println("Failed to connect");
} uses millis() to track elapsed time and stops trying after 10 seconds (10000 ms) if not connected.
Step 2: Check connection and print accordingly
It prints the IP only if connected; otherwise, it prints a failure message. This matches the requirement exactly.
Final Answer:
The code with 10-second timeout using millis() and conditional IP printing -> Option B
Quick Check:
Use millis() for timeout and check status before printing [OK]
Hint: Use millis() to limit connection wait time [OK]
Common Mistakes:
Not stopping connection attempts after timeout
Printing IP without checking connection
Using wrong while condition logic
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.