IoT 기기를 만들 때 가장 귀찮은 작업 중 하나가 바로 코드에 WiFi 비밀번호를 하드코딩하는 것입니다. 공유기 비번이 바뀌거나 장소를 옮기면 매번 펌웨어를 새로 올려야 하죠.
오늘은 스마트폰 앱 터치 한 번으로 ESP32-C3에 WiFi 정보를 전달하는 SmartConfig 기능을 알아보겠습니다.
1. SmartConfig란?
SmartConfig는 Espressif에서 개발한 기술로, WiFi 정보를 모르는 ESP32 기기에 스마트폰 앱이 특수한 UDP 패킷을 공중에 뿌려 SSID와 비밀번호를 전달하는 방식입니다.
- 장점: 코드에 비번을 적을 필요가 없음, 사용자 친화적임.
- 준비물: ESP32-C3, MicroPython 설치됨, 스마트폰(EspTouch 앱).
2. MicroPython 핵심 코드
마이크로파이썬에서는 network 모듈을 통해 매우 간단하게 구현할 수 있습니다.
Python
import network
import time
def start_smart_config():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# 이미 연결되어 있는지 확인
if not wlan.isconnected():
print("SmartConfig 대기 중...")
# SmartConfig 시작!
wlan.start_smartconfig()
# 연결될 때까지 무한 대기 (성공하면 자동으로 멈춤)
while not wlan.isconnected():
time.sleep(1)
print(".", end="")
print("\nWiFi 연결 성공!")
print("IP 정보:", wlan.ifconfig())
# 연결 성공 후 SmartConfig 모드 종료
wlan.stop_smartconfig()
start_smart_config()
3. 스마트폰에서 설정하기
기기에서 “SmartConfig 대기 중…”이라는 메시지가 나오면 스마트폰에서 다음 과정을 진행합니다.
- 앱 설치: 구글 플레이스토어나 앱스토어에서 “EspTouch” (또는 EspTouch:SmartConfig) 앱을 설치합니다.
- WiFi 연결: 스마트폰을 ESP32가 연결될 2.4GHz WiFi에 먼저 연결합니다.
- 정보 입력: 앱을 열고 WiFi 비밀번호를 입력한 뒤 Confirm 버튼을 누릅니다.
- 완료: 잠시 기다리면 ESP32 시리얼 모니터에 연결 성공 메시지가 뜹니다.
4. 실전 꿀팁: 자동 재연결 로직
실제 프로젝트에서는 공유기 비번이 바뀌었을 때만 SmartConfig를 켜는 것이 효율적입니다.
- Step 1: 먼저 NVS나 내부 메모리에 저장된 정보로 접속 시도.
- Step 2: 10~20초 후에도 실패하면 자동으로
start_smartconfig()호출. - Step 3: 성공하면 다시 메인 루프로 복귀.
이렇게 짜두면 공유기가 바뀌어도 기기를 뜯을 필요가 전혀 없습니다!
5. 주의사항
- 5GHz 미지원: ESP32-C3는 2.4GHz WiFi만 지원하므로, 스마트폰도 반드시 2.4GHz에 연결된 상태여야 합니다.
- 보안: 공공장소에서 실행 시 비번이 노출될 아주 미세한 위험이 있으니, 설정이 끝나면 반드시
stop_smartconfig()를 호출하세요.
맺음말
SmartConfig를 적용하는 순간, 여러분의 ESP32 프로젝트는 ‘장난감’에서 ‘제품’ 수준으로 업그레이드됩니다. 이제 번거로운 하드코딩에서 벗어나 보세요!
최신 esptouch 설명
https://github.com/EspressifApp/EsptouchForAndroid?tab=readme-ov-file#readme
🚀 EspTouch 기술 요약 (GitHub 기준)
1. 기술 개요
- SmartConfig 기술: 사용자가 WiFi SSID와 비밀번호를 입력하면, 스마트폰이 특수한 패킷을 공중에 송출(Multicast/Broadcast)하고, ESP32가 이 패킷을 가로채서 WiFi 정보를 획득하는 기술입니다.
- 가장 큰 특징: 장치에 직접 연결하거나 물리적인 조작을 할 필요 없이 무선으로 정보를 전달할 수 있습니다.
2. EspTouch V1 vs V2 (주요 차별점) 최근 릴리즈의 핵심은 V2의 도입입니다.
- V1 (Standard):
- 기존 ESP32/ESP8266에서 널리 쓰이는 방식.
- SSID와 Password 정보를 전달하는 데 집중.
- 보통 MicroPython의
start_smartconfig()가 이 방식을 따릅니다.
- V2 (Advanced):
- 보안 강화: AES 암호화를 사용하여 전송되는 비밀번호 데이터를 보호합니다.
- 커스텀 데이터 지원: WiFi 정보 외에 장치 ID, 사용자 토큰 등 추가적인 데이터를 함께 보낼 수 있습니다.
- 그룹 캐스팅: 여러 대의 기기를 동시에 설정하기에 더 적합합니다.
3. 앱 작동 요구사항
- Android 권한:
ACCESS_FINE_LOCATION(위치 권한)이 필수입니다. 이는 안드로이드 OS 보안 정책상 연결된 WiFi의 이름(SSID)을 읽어오기 위해 반드시 필요합니다. - 네트워크: 스마트폰이 2.4GHz WiFi에 연결되어 있어야 합니다. (ESP32-C3는 5GHz를 인식하지 못하기 때문)
4. 개발자 지원 (오픈 소스)
- 이 리포지토리에는 단순히 앱 설치 파일만 있는 것이 아니라, 개발자가 자신의 서비스 앱에 이 기능을 직접 넣을 수 있도록 Android SDK 형태의 라이브러리 코드를 제공합니다.
“왜 V1을 먼저 써야 하나요?”
GitHub 설명을 보면 V2가 더 좋아 보이지만, MicroPython 유저라면 일단 V1 모드로 설명하시는 것이 좋습니다.
- 이유: MicroPython의 기본 빌드 펌웨어에 포함된
network모듈은 전통적인 V1 방식을 기준으로 설계된 경우가 많습니다. V2를 쓰려면 펌웨어 수준에서 별도의 복호화 라이브러리가 필요할 수 있기 때문입니다.
“Espressif의 최신 가이드에 따르면, EspTouch는 기존의 단순 연결 방식(V1)을 넘어 AES 암호화와 추가 데이터 전송이 가능한 V2로 진화했습니다. 하지만 일반적인 마이크로파이썬 프로젝트라면 가장 호환성이 좋은 V1 방식으로도 충분히 강력한 기능을 구현할 수 있습니다. 반드시 위치 권한 허용과 2.4GHz WiFi 연결을 확인하세요!”


답글 남기기