ESP32 유용한 Wi-Fi 라이브러리 함수(Arduino IDE)
이 글은 ESP32에 유용한 Wi-Fi 함수를 모아놓은 것입니다. Wi-Fi 네트워크 스캔, Wi-Fi 네트워크 연결, Wi-Fi 연결 강도 확인, 연결 상태 확인, 연결 끊김 후 네트워크 재연결, Wi-Fi 상태, Wi-Fi 모드, ESP32 IP 주소 확인, 고정 IP 주소 설정 등의 내용을 다룹니다.
이 기능은 새로운 것이 아닙니다. ESP32로 Wi-Fi를 처리하는 방법에 대한 예제는 많이 있습니다. 하지만 ESP32에서 가장 많이 사용되고 실용적인 Wi-Fi 함수들을 모아보는 것이 유용할 것이라고 생각했습니다.

ESP32 유용한 Wi-Fi 라이브러리 함수 Arduino IDE
목차
이 튜토리얼에서 다룰 내용은 다음과 같습니다(링크를 클릭하면 해당 섹션으로 이동할 수 있습니다).
Wi-Fi 모드: 스테이션, 액세스 포인트 및 둘 다(스테이션 + 액세스 포인트);
Wi-Fi 네트워크 스캔;
Wi-Fi 네트워크 연결;
Wi-Fi 연결 상태 확인;
Wi-Fi 연결 강도 확인;
ESP32 IP 주소 확인;
ESP32 고정 IP 주소 설정;
Wi-Fi 연결 해제;
연결 끊김 후 Wi-Fi 다시 연결;
ESP32 Wi-Fi 이벤트;
연결 끊김 후 Wi-Fi 네트워크 다시 연결(Wi-Fi 이벤트);
ESP32 WiFiMulti
ESP32 호스트 이름 변경
Wi-Fi 라이브러리 포함하기
ESP32 Wi-Fi 기능을 사용하려면 먼저 다음과 같이 WiFi.h 라이브러리를 코드에 포함해야 합니다.
#include <WiFi.h>
이 라이브러리는 Arduino IDE에 ESP32 애드온을 설치하면 자동으로 "설치"됩니다. ESP32가 설치되어 있지 않으면 다음 튜토리얼을 따르세요.
Arduino IDE(Windows, Mac OS X, Linux)에 ESP32 보드 설치
VS Code와 PaltformIO를 사용하려면 WiFi.h 라이브러리와 해당 함수를 사용할 수 있도록 ESP32 보드로 새 프로젝트를 시작하면 됩니다.
ESP32 Wi-Fi 모드
ESP32 보드는 Wi-Fi 스테이션, 액세스 포인트 또는 둘 다로 작동할 수 있습니다. Wi-Fi 모드를 설정하려면 WiFi.mode()를 사용하고 원하는 모드를 인수로 설정하세요.
| WiFi.mode(WIFI_STA) | station mode: the ESP32 connects to an access point |
| WiFi.mode(WIFI_AP) | access point mode: stations can connect to the ESP32 |
| WiFi.mode(WIFI_AP_STA) | access point and a station connected to another access point |
WiFi.mode(WIFI_STA) 스테이션 모드: ESP32가 액세스 포인트에 연결됩니다.
WiFi.mode(WIFI_AP) 액세스 포인트 모드: 스테이션이 ESP32에 연결할 수 있습니다.
WiFi.mode(WIFI_AP_STA) 액세스 포인트와 다른 액세스 포인트에 연결된 스테이션
Wi-Fi 스테이션
ESP32를 Wi-Fi 스테이션으로 설정하면 다른 네트워크(예: 라우터)에 연결할 수 있습니다. 이 시나리오에서 라우터는 ESP 보드에 고유한 IP 주소를 할당합니다. ESP 고유 IP 주소를 참조하여 동일한 네트워크에 연결된 다른 장치(스테이션)를 통해 ESP와 통신할 수 있습니다.

ESP32 스테이션 모드 라우터 액세스 포인트
라우터는 인터넷에 연결되어 있으므로 ESP32 보드를 사용하여 API 데이터(예: 날씨 데이터)와 같은 인터넷 정보를 요청하거나, 온라인 플랫폼에 데이터를 게시하거나, 인터넷의 아이콘과 이미지를 사용하거나, JavaScript 라이브러리를 포함하여 웹 서버 페이지를 구축할 수 있습니다.
ESP32를 스테이션으로 설정하고 Wi-Fi 네트워크에 연결
ESP32를 스테이션으로 설정하고 네트워크에 연결하는 방법은 "Wi-Fi 네트워크 연결"을 참조하세요.
근처에 네트워크가 없어도 ESP에 연결하여 제어해야 하는 경우에는 이 구성이 적합하지 않을 수 있습니다. 이 시나리오에서는 ESP 보드를 액세스 포인트로 설정해야 합니다.
액세스 포인트
ESP32 보드를 액세스 포인트로 설정하면 공유기에 연결하지 않고도 Wi-Fi 기능을 갖춘 모든 기기를 사용하여 연결할 수 있습니다. ESP32를 액세스 포인트로 설정하면 자체 Wi-Fi 네트워크가 생성되어 스마트폰이나 컴퓨터와 같은 주변 Wi-Fi 기기(스테이션)가 ESP32에 연결할 수 있습니다. 따라서 공유기에 연결하지 않고도 ESP32를 제어할 수 있습니다.
이 기능은 공유기 없이 여러 ESP32 기기가 서로 통신하도록 하려는 경우에도 유용합니다.

ESP32 액세스 포인트 모드
ESP32는 공유기와 같은 유선 네트워크에 더 이상 연결되지 않기 때문에 소프트 AP(소프트 액세스 포인트)라고 합니다. 즉, 인터넷에서 라이브러리를 로드하거나 펌웨어를 사용하려고 하면 작동하지 않습니다. 또한 인터넷 서비스에 HTTP 요청을 보내 센서 판독값을 클라우드에 게시하거나 인터넷 서비스(예: 이메일 전송)를 사용하는 경우에도 작동하지 않습니다.
ESP32를 액세스 포인트로 설정
ESP32를 액세스 포인트로 설정하려면 Wi-Fi 모드를 액세스 포인트로 설정하세요.
WiFi.mode(WIFI_AP)
그런 다음 다음과 같이 softAP() 메서드를 사용하세요.
WiFi.softAP(ssid, password);
ssid는 ESP32 액세스 포인트에 지정할 이름이고, password 변수는 액세스 포인트의 비밀번호입니다. 비밀번호를 설정하지 않으려면 NULL로 설정하세요.
softAP() 메서드에 전달할 수 있는 다른 선택적 매개변수도 있습니다. 모든 매개변수는 다음과 같습니다.
WiFi.softAP(const char* ssid, const char* password, int channel, int ssid_hidden, int max_connection)
- ssid: 액세스 포인트 이름 - 최대 63자;
- password: 최소 8자; 액세스 포인트를 개방하려면 NULL로 설정;
- channel: Wi-Fi 채널 번호(1-13)
- ssid_hidden: (0 = 브로드캐스트 SSID, 1 = SSID 숨기기)
- max_connection: 최대 동시 연결 클라이언트 수(1-4)
ESP32를 액세스 포인트로 설정하는 방법을 설명하는 전체 튜토리얼이 있습니다.
웹 서버용 ESP32 액세스 포인트(AP) 설정 방법
Wi-Fi 스테이션 + 액세스 포인트
ESP32는 Wi-Fi 스테이션과 액세스 포인트로 동시에 설정할 수 있습니다. 모드를 WIFI_AP_STA로 설정하세요.
WiFi.mode(WIFI_AP_STA);
Wi-Fi 네트워크 스캔
ESP32는 Wi-Fi 범위 내에서 근처 Wi-Fi 네트워크를 스캔할 수 있습니다. Arduino IDE에서 파일 > 예제 > WiFi > WiFiScan으로 이동하세요. 그러면 ESP32 보드 범위 내의 Wi-Fi 네트워크를 스캔하는 스케치가 로드됩니다.

ESP32 WiFi 네트워크 스캔
이 기능은 연결하려는 Wi-Fi 네트워크가 보드 또는 다른 애플리케이션의 범위 내에 있는지 확인하는 데 유용할 수 있습니다. Wi-Fi 강도가 부족하여 라우터에 연결하지 못할 수 있으므로 Wi-Fi 프로젝트가 제대로 작동하지 않는 경우가 많습니다.
예제는 다음과 같습니다.
/*
Example from WiFi > WiFiScan
Complete details at https://RandomNerdTutorials.com/esp32-useful-wi-fi-functions-arduino/
*/
#include "WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
보드에 업로드하여 사용 가능한 네트워크와 RSSI(수신 신호 강도 표시기)를 확인할 수 있습니다.
WiFi.scanNetworks()는 검색된 네트워크 수를 반환합니다.
int n = WiFi.scanNetworks();
스캔 후 각 네트워크에 대한 매개변수에 액세스할 수 있습니다.
WiFi.SSID()는 특정 네트워크의 SSID를 출력합니다.
Serial.print(WiFi.SSID(i));
WiFi.RSSI()는 해당 네트워크의 RSSI를 반환합니다. RSSI는 수신 신호 강도 표시기(Received Signal Strength Indicator)의 약자로, RF 클라이언트 장치가 액세스 포인트 또는 라우터에서 수신하는 전력 수준을 추정한 값입니다.
Serial.print(WiFi.RSSI(i));
마지막으로, WiFi.encryptionType()은 네트워크 암호화 유형을 반환합니다. 이 예시에서는 개방형 네트워크의 경우 *를 표시합니다. 하지만 해당 함수는 다음 옵션 중 하나를 반환할 수 있습니다(개방형 네트워크뿐만 아니라):
- WIFI_AUTH_OPEN
- WIFI_AUTH_WEP
- WIFI_AUTH_WPA_PSK
- WIFI_AUTH_WPA2_PSK
- WIFI_AUTH_WPA_WPA2_PSK
- WIFI_AUTH_WPA2_ENTERPRISE

ESP32 WiFi 네트워크 스캔 예제 시리얼 모니터
Wi-Fi 네트워크 연결
ESP32를 특정 Wi-Fi 네트워크에 연결하려면 해당 네트워크의 SSID와 비밀번호를 알아야 합니다. 또한 해당 네트워크가 ESP32 Wi-Fi 범위 내에 있어야 합니다(이를 확인하려면 이전 예제를 사용하여 Wi-Fi 네트워크를 스캔할 수 있습니다).
다음 함수를 사용하여 ESP32를 Wi-Fi 네트워크에 연결할 수 있습니다(initWiFi()):
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
ssid 및 password 변수는 연결하려는 네트워크의 SSID와 비밀번호를 저장합니다.
// 네트워크 자격 증명으로 대체
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
그런 다음 setup() 함수에서 initWiFi() 함수를 호출하기만 하면 됩니다.
작동 방식
이 함수의 작동 방식을 간략히 살펴보겠습니다.
먼저 Wi-Fi 모드를 설정합니다. ESP32가 다른 네트워크(액세스 포인트/핫스팟)에 연결될 경우 스테이션 모드여야 합니다.
WiFi.mode(WIFI_STA);
그런 다음 WiFi.begin()을 사용하여 네트워크에 연결합니다. 네트워크 SSID와 비밀번호를 인수로 전달해야 합니다.
WiFi.begin(ssid, password);
Wi-Fi 네트워크에 연결하는 데 시간이 걸릴 수 있으므로 일반적으로 WiFi.status()를 사용하여 연결이 이미 설정되었는지 확인하는 while 루프를 추가합니다. 연결이 성공적으로 설정되면 WL_CONNECTED를 반환합니다.
while (WiFi.status() != WL_CONNECTED) {
Wi-Fi 연결 상태 가져오기
Wi-Fi 연결 상태를 가져오려면 WiFi.status()를 사용할 수 있습니다. 이 함수는 표의 상수에 해당하는 다음 값 중 하나를 반환합니다.
| Value | Constant | Meaning |
| 0 | WL_IDLE_STATUS | temporary status assigned when WiFi.begin() is called |
| 1 | WL_NO_SSID_AVAIL | when no SSID are available |
| 2 | WL_SCAN_COMPLETED | scan networks is completed |
| 3 | WL_CONNECTED | when connected to a WiFi network |
| 4 | WL_CONNECT_FAILED | when the connection fails for all the attempts |
| 5 | WL_CONNECTION_LOST | when the connection is lost |
| 6 | WL_DISCONNECTED | when disconnected from a network |
0 WL_IDLE_STATUS: WiFi.begin()이 호출될 때 할당되는 임시 상태입니다.
1 WL_NO_SSID_AVAIL: 사용 가능한 SSID가 없는 경우입니다.
2 WL_SCAN_COMPLETED: 네트워크 스캔이 완료된 경우입니다.
3 WL_CONNECTED: WiFi 네트워크에 연결된 경우입니다.
4 WL_CONNECT_FAILED: 모든 시도에도 연결이 실패한 경우입니다.
5 WL_CONNECTION_LOST: 연결이 끊어진 경우입니다.
6 WL_DISCONNECTED: 네트워크 연결이 끊어진 경우입니다.
WiFi 연결 강도 가져오기
WiFi 연결 강도를 가져오려면 WiFi 연결 후 WiFi.RSSI()를 호출하면 됩니다. 예를 들어 보겠습니다.
/*
Complete details at https://RandomNerdTutorials.com/esp32-useful-wi-fi-functions-arduino/
*/
#include <WiFi.h>
// Replace with your network credentials (STATION)
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
initWiFi();
Serial.print("RRSI: ");
Serial.println(WiFi.RSSI());
}
void loop() {
// put your main code here, to run repeatedly:
}
네트워크 자격 증명을 입력하고 코드를 업로드하세요.
시리얼 모니터를 열고 ESP32 내장 RST 버튼을 누르세요. 네트워크에 연결되고 RSSI(수신 신호 강도 표시기)가 출력됩니다.

ESP32 Wi-Fi 연결 강도 확인
절댓값이 낮을수록 Wi-Fi 연결이 가장 강력함을 의미합니다.
ESP32 IP 주소 가져오기
ESP32를 Wi-Fi 스테이션으로 설정하면 다른 네트워크(예: 라우터)에 연결할 수 있습니다. 이 경우 라우터는 ESP32 보드에 고유한 IP 주소를 할당합니다. 보드의 IP 주소를 가져오려면 네트워크 연결을 설정한 후 WiFi.localIP()를 호출해야 합니다.
Serial.println(WiFi.localIP());
고정 ESP32 IP 주소 설정
무작위로 할당된 IP 주소를 가져오는 대신 WiFi.config()를 사용하여 원하는 사용 가능한 IP 주소를 ESP32에 설정할 수 있습니다.
setup() 및 loop() 함수 외부에서 다음 변수에 사용자의 고정 IP 주소와 해당 게이트웨이 IP 주소를 정의합니다. 기본적으로 다음 코드는 게이트웨이 192.168.1.1에서 작동하는 IP 주소 192.168.1.184를 할당합니다.
// Set your Static IP address
IPAddress local_IP(192, 168, 1, 184);
// Set your Gateway IP address
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8); // optional
IPAddress secondaryDNS(8, 8, 4, 4); // optional
그런 다음 setup()에서 WiFi.config() 메서드를 호출하여 ESP32에 구성을 할당해야 합니다.
// Configures static IP address
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("STA Failed to configure");
}
primaryDNS 및 secondaryDNS 매개변수는 선택 사항이며 제거할 수 있습니다.
고정 IP 주소 설정 방법을 알아보려면 다음 튜토리얼을 읽어보세요.
ESP32 고정 IP 주소 연결
Wi-Fi 네트워크 연결 해제
이전에 연결된 Wi-Fi 네트워크 연결을 해제하려면 WiFi.disconnect()를 사용하세요.
WiFi.disconnect()

ESP32 Wi-Fi 네트워크 연결 해제
연결 끊김 후 Wi-Fi 네트워크 다시 연결
연결이 끊긴 후 Wi-Fi에 다시 연결하려면 WiFi.reconnect()를 사용하여 이전에 연결되었던 액세스 포인트에 다시 연결을 시도할 수 있습니다.
WiFi.reconnect()
또는 WiFi.disconnect()를 호출한 후 WiFi.begin(ssid,password)를 호출할 수 있습니다.
WiFi.disconnect();
WiFi.begin(ssid, password);
또는 연결이 끊긴 경우 ESP.restart()를 사용하여 ESP32를 다시 시작할 수도 있습니다.
아래 코드 조각과 같은 코드를 loop()에 추가하여 보드가 연결되었는지 주기적으로 확인할 수 있습니다.
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
previousMillis 및 interval 변수를 선언하는 것을 잊지 마세요. interval은 각 확인 사이의 시간 간격(밀리초 단위, 예: 30초)에 해당합니다.
unsigned long previousMillis = 0;
unsigned long interval = 30000;
예제 코드를 참고하세요.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/solved-reconnect-esp32-to-wifi/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
// Replace with your network credentials (STATION)
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
unsigned long previousMillis = 0;
unsigned long interval = 30000;
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
initWiFi();
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
}
void loop() {
unsigned long currentMillis = millis();
// if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >=interval)) {
Serial.print(millis());
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
previousMillis = currentMillis;
}
}
이 예제는 네트워크에 연결하는 방법을 보여주며, 30초마다 네트워크가 연결되어 있는지 확인합니다. 연결되어 있지 않으면 연결을 끊고 다시 연결을 시도합니다.
[해결됨] 연결 끊김 후 ESP32를 Wi-Fi 네트워크에 다시 연결하기 가이드를 참조하세요.
또는 WiFi 이벤트를 사용하여 연결이 끊어졌음을 감지하고, 연결이 끊어졌을 때 수행할 작업을 처리하는 함수를 호출할 수도 있습니다(다음 섹션 참조).
ESP32 Wi-Fi 이벤트
ESP32는 다음과 같은 모든 Wi-Fi 이벤트를 처리할 수 있습니다(소스 코드 참조).
| 0 | ARDUINO_EVENT_WIFI_READY | ESP32 Wi-Fi ready |
| 1 | ARDUINO_EVENT_WIFI_SCAN_DONE | ESP32 finishes scanning AP |
| 2 | ARDUINO_EVENT_WIFI_STA_START | ESP32 station start |
| 3 | ARDUINO_EVENT_WIFI_STA_STOP | ESP32 station stop |
| 4 | ARDUINO_EVENT_WIFI_STA_CONNECTED | ESP32 station connected to AP |
| 5 | ARDUINO_EVENT_WIFI_STA_DISCONNECTED | ESP32 station disconnected from AP |
| 6 | ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE | the auth mode of AP connected by ESP32 station changed |
| 7 | ARDUINO_EVENT_WIFI_STA_GOT_IP | ESP32 station got IP from connected AP |
| 8 | ARDUINO_EVENT_WIFI_STA_LOST_IP | ESP32 station lost IP and the IP is reset to 0 |
| 9 | ARDUINO_EVENT_WPS_ER_SUCCESS | ESP32 station wps succeeds in enrollee mode |
| 10 | ARDUINO_EVENT_WPS_ER_FAILED | ESP32 station wps fails in enrollee mode |
| 11 | ARDUINO_EVENT_WPS_ER_TIMEOUT | ESP32 station wps timeout in enrollee mode |
| 12 | ARDUINO_EVENT_WPS_ER_PIN | ESP32 station wps pin code in enrollee mode |
| 13 | ARDUINO_EVENT_WIFI_AP_START | ESP32 soft-AP start |
| 14 | ARDUINO_EVENT_WIFI_AP_STOP | ESP32 soft-AP stop |
| 15 | ARDUINO_EVENT_WIFI_AP_STACONNECTED | a station connected to ESP32 soft-AP |
| 16 | ARDUINO_EVENT_WIFI_AP_STADISCONNECTED | a station disconnected from ESP32 soft-AP |
| 17 | ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED | ESP32 soft-AP assign an IP to a connected station |
| 18 | ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED | Receive probe request packet in soft-AP interface |
| 19 | ARDUINO_EVENT_WIFI_AP_GOT_IP6 | ESP32 access point v6IP addr is preferred |
| 19 | ARDUINO_EVENT_WIFI_STA_GOT_IP6 | ESP32 station v6IP addr is preferred |
| 19 | ARDUINO_EVENT_ETH_GOT_IP6 | Ethernet IPv6 is preferred |
| 20 | ARDUINO_EVENT_ETH_START | ESP32 ethernet start |
| 21 | ARDUINO_EVENT_ETH_STOP | ESP32 ethernet stop |
| 22 | ARDUINO_EVENT_ETH_CONNECTED | ESP32 ethernet phy link up |
| 23 | ARDUINO_EVENT_ETH_DISCONNECTED | ESP32 ethernet phy link down |
| 24 | ARDUINO_EVENT_ETH_GOT_IP | ESP32 ethernet got IP from connected AP |
| 25 | ARDUINO_EVENT_MAX |
이러한 이벤트를 사용하는 방법에 대한 전체 예제를 보려면 Arduino IDE에서 파일 > 예제 > WiFi > WiFiClientEvents로 이동하세요.
/* This sketch shows the WiFi event usage - Example from WiFi > WiFiClientEvents
Complete details at https://RandomNerdTutorials.com/esp32-useful-wi-fi-functions-arduino/ */
/*
* WiFi Events
0 ARDUINO_EVENT_WIFI_READY < ESP32 WiFi ready
1 ARDUINO_EVENT_WIFI_SCAN_DONE < ESP32 finish scanning AP
2 ARDUINO_EVENT_WIFI_STA_START < ESP32 station start
3 ARDUINO_EVENT_WIFI_STA_STOP < ESP32 station stop
4 ARDUINO_EVENT_WIFI_STA_CONNECTED < ESP32 station connected to AP
5 ARDUINO_EVENT_WIFI_STA_DISCONNECTED < ESP32 station disconnected from AP
6 ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed
7 ARDUINO_EVENT_WIFI_STA_GOT_IP < ESP32 station got IP from connected AP
8 ARDUINO_EVENT_WIFI_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0
9 ARDUINO_EVENT_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode
10 ARDUINO_EVENT_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode
11 ARDUINO_EVENT_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode
12 ARDUINO_EVENT_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode
13 ARDUINO_EVENT_WIFI_AP_START < ESP32 soft-AP start
14 ARDUINO_EVENT_WIFI_AP_STOP < ESP32 soft-AP stop
15 ARDUINO_EVENT_WIFI_AP_STACONNECTED < a station connected to ESP32 soft-AP
16 ARDUINO_EVENT_WIFI_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP
17 ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED < ESP32 soft-AP assign an IP to a connected station
18 ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface
19 ARDUINO_EVENT_WIFI_AP_GOT_IP6 < ESP32 ap interface v6IP addr is preferred
19 ARDUINO_EVENT_WIFI_STA_GOT_IP6 < ESP32 station interface v6IP addr is preferred
20 ARDUINO_EVENT_ETH_START < ESP32 ethernet start
21 ARDUINO_EVENT_ETH_STOP < ESP32 ethernet stop
22 ARDUINO_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up
23 ARDUINO_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down
24 ARDUINO_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP
19 ARDUINO_EVENT_ETH_GOT_IP6 < ESP32 ethernet interface v6IP addr is preferred
25 ARDUINO_EVENT_MAX
*/
#include <WiFi.h>
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
void WiFiEvent(WiFiEvent_t event){
Serial.printf("[WiFi-event] event: %d\n", event);
switch (event) {
case ARDUINO_EVENT_WIFI_READY:
Serial.println("WiFi interface ready");
break;
case ARDUINO_EVENT_WIFI_SCAN_DONE:
Serial.println("Completed scan for access points");
break;
case ARDUINO_EVENT_WIFI_STA_START:
Serial.println("WiFi client started");
break;
case ARDUINO_EVENT_WIFI_STA_STOP:
Serial.println("WiFi clients stopped");
break;
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("Connected to access point");
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("Disconnected from WiFi access point");
break;
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
Serial.println("Authentication mode of access point has changed");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.print("Obtained IP address: ");
Serial.println(WiFi.localIP());
break;
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
Serial.println("Lost IP address and IP address is reset to 0");
break;
case ARDUINO_EVENT_WPS_ER_SUCCESS:
Serial.println("WiFi Protected Setup (WPS): succeeded in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_FAILED:
Serial.println("WiFi Protected Setup (WPS): failed in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_TIMEOUT:
Serial.println("WiFi Protected Setup (WPS): timeout in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_PIN:
Serial.println("WiFi Protected Setup (WPS): pin code in enrollee mode");
break;
case ARDUINO_EVENT_WIFI_AP_START:
Serial.println("WiFi access point started");
break;
case ARDUINO_EVENT_WIFI_AP_STOP:
Serial.println("WiFi access point stopped");
break;
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
Serial.println("Client connected");
break;
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
Serial.println("Client disconnected");
break;
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
Serial.println("Assigned IP address to client");
break;
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
Serial.println("Received probe request");
break;
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
Serial.println("AP IPv6 is preferred");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
Serial.println("STA IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_GOT_IP6:
Serial.println("Ethernet IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_START:
Serial.println("Ethernet started");
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("Ethernet stopped");
break;
case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("Ethernet connected");
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("Ethernet disconnected");
break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("Obtained IP address");
break;
default: break;
}}
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(IPAddress(info.got_ip.ip_info.ip.addr));
}
void setup(){
Serial.begin(115200);
// delete old config
WiFi.disconnect(true);
delay(1000);
// Examples of different ways to register wifi events
WiFi.onEvent(WiFiEvent);
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info){
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
}, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
// Remove WiFi event
Serial.print("WiFi Event ID: ");
Serial.println(eventID);
// WiFi.removeEvent(eventID);
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
void loop(){
delay(1000);
}
Wi-Fi 이벤트를 사용하면 Wi-Fi 상태를 지속적으로 확인할 필요가 없습니다. 특정 이벤트가 발생하면 해당 처리 함수가 자동으로 호출됩니다.
연결 끊김 후 Wi-Fi 네트워크 재연결(Wi-Fi 이벤트)
Wi-Fi 이벤트는 연결이 끊어졌음을 감지하고 바로 재연결을 시도하는 데 유용할 수 있습니다(SYSTEM_EVENT_AP_STADISCONNECTED 이벤트 사용). 샘플 코드는 다음과 같습니다.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/solved-reconnect-esp32-to-wifi/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Connected to AP successfully!");
}
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin(ssid, password);
}
void setup(){
Serial.begin(115200);
// delete old config
WiFi.disconnect(true);
delay(1000);
WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFi.onEvent(WiFiStationDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
/* Remove WiFi event
Serial.print("WiFi Event ID: ");
Serial.println(eventID);
WiFi.removeEvent(eventID);*/
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
void loop(){
delay(1000);
}
작동 방식
이 예제에서는 ESP32가 연결될 때, IP 주소를 받을 때, 연결이 끊어질 때의 세 가지 Wi-Fi 이벤트(ARDUINO_EVENT_WIFI_STA_CONNECTED,
ARDUINO_EVENT_WIFI_STA_GOT_IP,
ARDUINO_EVENT_WIFI_STA_DISCONNECTED)를 추가했습니다.
ESP32 스테이션이 액세스 포인트(ARDUINO_EVENT_WIFI_STA_CONNECTED 이벤트)에 연결되면 WiFiStationConnected() 함수가 호출됩니다.
WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFiStationConnected() 함수는 ESP32가 액세스 포인트(예: 라우터)에 성공적으로 연결되었음을 출력합니다. 하지만 이 함수를 수정하여 다른 작업(예: 네트워크에 성공적으로 연결되었음을 나타내는 LED 켜기)을 수행할 수 있습니다.
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("AP에 성공적으로 연결되었습니다!");
}
ESP32가 IP 주소를 받으면 WiFiGotIP() 함수가 실행됩니다.
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
해당 함수는 단순히 IP 주소를 시리얼 모니터에 출력합니다.
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
ESP32와 액세스 포인트의 연결이 끊어지면(ARDUINO_EVENT_WIFI_STA_DISCONNECTED), WiFiStationDisconnected() 함수가 호출됩니다.
WiFi.onEvent(WiFiStationDisconnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
해당 함수는 연결이 끊어졌음을 나타내는 메시지를 출력하고 다시 연결을 시도합니다.
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Disconnected from WiFi access point");
Serial.print("WiFi lost connection. Reason: ");
Serial.println(info.wifi_sta_disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin(ssid, password);
}
ESP32 WiFiMulti
ESP32 WiFiMulti를 사용하면 여러 네트워크(SSID/비밀번호 조합)를 등록할 수 있습니다. ESP32는 가장 강한 신호(RSSI)를 가진 Wi-Fi 네트워크에 연결합니다. 연결이 끊어지면 목록의 다음 네트워크에 연결됩니다. 이를 위해 WiFiMulti.h 라이브러리를 포함해야 합니다(설치할 필요는 없으며 ESP32 패키지에 기본적으로 포함되어 있습니다).
WiFiMulti 사용 방법을 알아보려면 다음 튜토리얼을 참조하세요.
ESP32 WiFiMulti: 네트워크 목록에서 가장 강한 Wi-Fi 네트워크에 연결
ESP32 호스트 이름 변경
보드에 사용자 지정 호스트 이름을 설정하려면 WiFi.begin(); 전에 WiFi.setHostname(YOUR_NEW_HOSTNAME);을 호출합니다.
기본 ESP32 호스트 이름은 espressif입니다.

WiFi.h 라이브러리에서 제공하는 메서드를 사용하여 사용자 지정 호스트 이름을 설정할 수 있습니다.
먼저 새 호스트 이름을 정의합니다. 예:
String hostname = "ESP32 Node Temperature";
그런 다음 WiFi.begin()을 호출하기 전에 WiFi.setHostname() 함수를 호출합니다. 아래와 같이 WiFi.config()도 호출해야 합니다.
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
WiFi.setHostname(hostname.c_str()); //define hostname
아래 전체 예제를 복사할 수 있습니다.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at https://RandomNerdTutorials.com/esp32-set-custom-hostname-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <WiFi.h>
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Change the hostname
const char* hostname = "esp32-node-temperature";
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE);
WiFi.setHostname(hostname);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.print("\nESP32 IP Address: ");
Serial.println(WiFi.localIP());
Serial.print("ESP32 HostName: ");
Serial.println(WiFi.getHostname());
Serial.print("RRSI: ");
Serial.println(WiFi.RSSI());
}
void setup() {
Serial.begin(115200);
initWiFi();
}
void loop() {
// put your main code here, to run repeatedly:
}
이전 코드 조각을 프로젝트에서 사용하여 ESP32의 사용자 지정 호스트 이름을 설정할 수 있습니다.
중요: 변경 사항을 적용하려면 라우터를 다시 시작해야 할 수 있습니다.
그런 다음 라우터 설정으로 이동하면 사용자 지정 호스트 이름이 설정된 ESP32를 볼 수 있습니다.

ESP32 사용자 지정 호스트 이름 설정 Arduino IDE
마무리
이 글은 가장 많이 사용되고 유용한 ESP32 Wi-Fi 함수들을 모아 놓은 것입니다. ESP32 Wi-Fi 기능을 사용하는 예시는 많지만, Arduino IDE를 사용하여 ESP32에서 Wi-Fi 기능을 사용하는 방법을 설명하는 문서는 거의 없습니다. 따라서 여러분의 프로젝트에서 ESP32 Wi-Fi 관련 기능을 더 쉽게 사용할 수 있도록 이 가이드를 작성했습니다.
다른 제안 사항이 있으시면 댓글 섹션에 공유해 주세요.
이 튜토리얼이 도움이 되었기를 바랍니다.
다음 리소스를 통해 ESP32에 대해 더 자세히 알아보세요.
Arduino IDE로 ESP32 배우기
ESP32 및 ESP8266으로 웹 서버 구축
더 많은 ESP32 프로젝트 및 튜토리얼…
'ESP32' 카테고리의 다른 글
| ESP32 NEO-M8N GPS 모듈 인터페이스 (0) | 2025.12.05 |
|---|---|
| ESP32 SIM800L 및 NEO-6M 모듈을 사용한 GPS 추적기 (1) | 2025.12.04 |
| ESP32 MFRC522 RFID 쓰기 읽기 Arduino IDE (0) | 2025.12.03 |
| Arduino IDE와 ESP-IDF 개발 환경 비교 (0) | 2025.12.02 |
| ESP32 L298N 모터 드라이버 인터페이스법 (0) | 2025.11.30 |
| GPS 데이터 지도에 그려주는 사이트 (0) | 2025.11.29 |
| ESP32 NEO-6M GPS 모듈 문제 해결 가이드 (0) | 2025.11.28 |
| ESP32 NEO-6M GPS 모듈 인터페이스 (0) | 2025.11.28 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩