이 글에서는 ESP32가 Wi-Fi 네트워크에서 연결이 끊어진 후 다시 연결하는 방법을 간략하게 설명합니다. 이 방법은 ESP32가 일시적으로 Wi-Fi 신호를 잃었을 때, ESP32 가 라우터의 Wi-Fi 범위에서 벗어났을 때, 라우터가 재부팅되었을 때, 라우터의 인터넷 연결이 끊어졌을 때 등 다양한 상황에서 유용할 수 있습니다.

WiFiMulti도 한번 살펴보세요. WiFiMulti를 사용하면 여러 개의 네트워크(SSID/비밀번호 조합)를 등록할 수 있습니다. ESP32 는 신호 강도(RSSI)가 가장 강한 Wi-Fi 네트워크에 자동으로 연결됩니다. 연결이 끊어지면 목록에서 다음 네트워크에 자동으로 연결됩니다. 자세한 내용은 다음 글을 참조하세요: ESP32 WiFiMulti: 가장 강한 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;
}
간격(interval)과 이전 밀리초(previousMillis) 변수를 지정하는 것을 잊지 마세요. 밀리초 단위(예: 30초)로, 간격은 각 확인 사이의 시간을 나타냅니다:
unsigned long previousMillis = 0;
unsigned long interval = 30000;
다음은 완전한 예시입니다.
/*
Ebokify
Complete project details at https://ebokify.com/resolve-reconnect-esp32-to-wi-fi-network
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초마다 연결 상태를 확인하는 방법을 보여줍니다. 연결이 끊어진 경우 연결을 끊고 다시 연결을 시도합니다.
또는 Wi-Fi 이벤트를 사용하여 연결 끊김을 감지하고 해당 상황이 발생했을 때 수행할 작업을 처리하는 함수를 호출할 수도 있습니다.
ESP32 Wi-Fi 이벤트
ESP32 는 다양한 Wi-Fi 이벤트를 처리할 수 있습니다. Wi-Fi 이벤트 기능을 사용하면 Wi-Fi 상태를 지속적으로 확인할 필요가 없습니다. 이벤트가 발생하면 관련 처리 함수가 자동으로 호출됩니다.
다음 이벤트들은 연결이 끊어졌는지 또는 다시 연결되었는지를 감지하는 데 매우 유용합니다.
- ARDUINO_EVENT_WIFI_STA_CONNECTED: ESP32가 스테이션 모드로 액세스 포인트/핫스팟(라우터)에 연결되었습니다.
ARDUINO_EVENT_WIFI_STA_DISCONNECTED: ESP32 스테이션이 액세스 포인트에서 연결이 끊어졌습니다.
다음 섹션에서 응용 사례를 확인하세요.
와이파이 연결이 끊어진 후 다시 연결하기 (와이파이 이벤트)
Wi-Fi 이벤트는 연결이 끊어진 시점을 파악하고 나중에 다시 연결을 시도하는 데 유용할 수 있습니다(이벤트 사용 ARDUINO_EVENT_WIFI_STA_DISCONNECTED). 아래는 코드 예시입니다.
/*
Ebokify
Complete project details at https://ebokify.com/resolve-reconnect-esp32-to-wi-fi-network/
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);
}
어떻게 작동하나요?
이 예제에는 세 가지 Wi-Fi 이벤트를 포함했습니다: ESP32가 연결될 때, IP 주소를 획득할 때, 그리고 연결이 끊어질 때 발생하는 이벤트입니다:
ARDUINO_EVENT_WIFI_STA_CONNECTED
ARDUINO_EVENT_WIFI_STA_GOT_IP
ARDUINO_EVENT_WIFI_STA_DISCONNECTED.
WiFiStationConnected() 함수는 ESP32 스테이션이 액세스 포인트에 연결될 때
(ARDUINO_EVENT_WIFI_STA_CONNECTED 이벤트) 호출됩니다.
WiFi.onEvent(WiFiStationConnected, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFiStationConnected() 함수는 단순히 ESP32가 액세스 포인트(예: 라우터)에 성공적으로 연결되었음을 출력합니다. 그러나 이 함수를 수정하여 다른 작업을 수행하도록 할 수 있습니다(예: 네트워크 연결 성공을 표시하기 위해 LED를 켜는 등).
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.println("Connected to AP successfully!");
}
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.disconnected.reason);
Serial.println("Trying to Reconnect");
WiFi.begin(ssid, password);
}
결론
다음은 ESP32를 사용하여 끊어진 연결을 다시 연결하는 모든 방법의 목록입니다.
ESP32 Wi-Fi 의 가장 일반적인 기능들을 더 잘 이해하려면 다음 튜토리얼을 시청하는 것을 권장합니다.
ESP32용 유용한 Wi-Fi 라이브러리 함수 (Arduino IDE)
ESP32가 마음에 드셨다면 다음 제품들도 좋아하실 수 있습니다:
ESP32와 PIR 모션 센서 사용 (인터럽트 및 타이머)
아두이노 IDE 2.0에 ESP32 보드를 설치하는 방법
ESP32 보드를 아두이노 IDE에 1분 안에 설치하세요
ESP32 및 ESP8266에 MicroPython 펌웨어를 플래싱하는 방법
이 튜토리얼이 유용하셨기를 바랍니다. 읽어주셔서 감사합니다.
이 튜토리얼의 원문을 참고하시려면 이 링크를 따라가세요. 원 저자에게 감사합니다.
'ESP32' 카테고리의 다른 글
| ESP32-C3 기반 스마트 시계 (0) | 2026.02.27 |
|---|---|
| zclaw - ESP32에서 888KB로 구동되는 개인용 AI 비서 (0) | 2026.02.25 |
| zclaw 888KiB ESP32 기반 AI 에이전트 (0) | 2026.02.25 |
| ESP32 보드에서 구동되는 초경량 오픈소스 'zclaw' 공개 (0) | 2026.02.25 |
| ESP32 MPU-6050 가속도계 및 자이로스코프 웹 서버 (0) | 2026.02.17 |
| ESP32 ADXL345 Accelerometer Interfacing (0) | 2026.02.17 |
| GY-291 ADXL345 i2c SPI 가속도 센서 (인터럽트 기능) - ESP32, ESP8266, STM32 및 아두이노 호환 (1) | 2026.02.17 |
| ESP32 MPU-6050 웹 서버 3D 객체 표현 (0) | 2026.02.14 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩