GPS 안 터지는 실내에서도 완벽하게! ESP32와 Wi-Fi CSI로 나만의 위치 추적 시스템 만들기 (A to Z)
GPS가 닿지 않는 실내에서도 Wi-Fi 신호 반사를 이용하는 CSI 기술과 가성비 최고인 ESP32 보드를 활용하여 나만의 실내 위치 추적 시스템을 만드는 방법을 쉽고 재미있게 알려드립니다.
GPS가 닿지 않는 실내에서도 ESP32와 Wi-Fi CSI를 활용하면 방이나 구역 단위의 위치를 추정하는 실험용 시스템을 만들 수 있습니다. 다만 Wi-Fi CSI는 좌표를 직접 알려주는 기술이 아니므로, 기준 위치에서 데이터를 수집하고 모델을 학습해야 합니다. 이번 글에서는 준비물부터 수집·분석·검증까지 실제 제작 흐름을 살펴보겠습니다.
먼저 알아둘 핵심
ESP32는 Wi-Fi 신호의 CSI 데이터를 수집하는 센서 역할을 합니다.
가장 쉬운 목표는 정확한 좌표보다 ‘거실·방·복도’와 같은 구역 분류입니다.
ESP-IDF와 Espressif의 ESP-CSI 예제를 활용하면 데이터 수집을 시작할 수 있습니다.
가구 배치, 사람의 움직임, 공유기 위치가 바뀌면 정확도가 달라집니다.
Wi-Fi CSI가 GPS 없이 위치를 알아내는 원리
CSI(Channel State Information, 채널 상태 정보)는 Wi-Fi 신호가 공간을 지나면서 얼마나 약해지고 위상이 어떻게 달라졌는지 보여주는 세부 측정값입니다. 벽, 문, 가구와 사람 때문에 신호가 반사되고 여러 경로로 전달되면 CSI 패턴도 달라집니다.
특정 지점에서 반복 측정한 CSI를 ‘지문’처럼 저장하고 새로운 측정값과 비교하면 어느 지점과 가장 비슷한지 판단할 수 있습니다. 이를 핑거프린팅 방식이라고 합니다. 단, 사람의 위치를 추적하는지, ESP32 장치 자체의 위치를 추적하는지에 따라 센서 배치와 학습 방법이 달라집니다.
만들기 전에 무엇을 준비해야 할까요?
CSI 수집을 지원하는 ESP32 개발 보드, Wi-Fi 송신원(공유기 또는 다른 ESP32), USB 케이블, 컴퓨터가 필요합니다. 컴퓨터에는 ESP-IDF 개발환경과 시리얼 로그를 읽을 도구를 준비하세요. 데이터 분석에는 Python과 표·그래프 처리 라이브러리를 사용할 수 있습니다.
보드마다 CSI 지원 범위와 설정이 다르므로 구매 전 해당 칩의 ESP-IDF 문서를 확인해야 합니다. 또한 Wi-Fi 비밀번호가 필요한 일반 연결 방식인지, 별도 송신 보드를 사용할지 먼저 결정하세요.
ESP32에서 CSI를 수집하는 순서
ESP-IDF를 설치하고 사용하는 ESP32 보드에 맞는 프로젝트를 설정합니다.
ESP-CSI의 수신 예제로 시작하고, 공유기 또는 송신 ESP32에서 패킷이 들어오도록 구성합니다.
프로젝트 설정에서 CSI 기능을 활성화한 뒤 수신 콜백, CSI 설정, 수집 활성화를 구성합니다.
시리얼 로그로 들어오는 CSI 값과 시간·위치 라벨을 함께 저장합니다.
같은 위치에서 여러 번 측정하고, 다른 위치로 이동해 데이터셋을 만듭니다.
ESP-IDF에서는 esp_wifi_set_csi_rx_cb(), esp_wifi_set_csi_config(), esp_wifi_set_csi() 같은 API를 사용합니다. CSI 콜백 안에서 무거운 분석을 바로 실행하지 말고, 데이터를 큐로 넘겨 별도 작업에서 처리하는 편이 안정적입니다.
수집한 데이터로 ‘현재 어느 방인가’를 판단하기
처음부터 실내 지도의 좌표를 추정하기보다 여러 구역을 구분하는 분류 모델로 시작하면 검증하기 쉽습니다. 예를 들어 테스트용 집을 거실·침실·주방 세 구역으로 나누고 각 구역에서 시간대와 방향을 바꿔 데이터를 수집합니다. 이는 설명을 위한 가상 사례입니다.
수집 데이터에는 노이즈 제거, 결측값 확인, 신호 크기 정규화 등의 전처리를 적용할 수 있습니다. 이후 KNN이나 랜덤 포레스트 같은 간단한 분류 모델로 구역을 예측해 보세요. 학습에 쓰지 않은 시간대의 데이터로 별도 테스트해야 실제 사용 가능성을 가늠할 수 있습니다.
정확도를 높이려면 무엇을 점검해야 할까요?
같은 방이라도 문이 열리거나 사람이 지나가면 신호 패턴이 바뀝니다. 따라서 공유기와 ESP32를 고정하고, 측정 위치별 데이터를 다양하게 모으는 것이 중요합니다. 필요하면 수신 지점을 늘리고 일정 기간 뒤 데이터를 다시 수집해 모델을 갱신하세요.
CSI만으로 누구의 위치인지 자동 식별되거나 항상 정확한 좌표가 나오는 것은 아닙니다. 특히 사람이 움직이는 상황의 존재 감지와 기기를 들고 이동하는 상황의 위치 추정은 서로 다른 문제입니다. 개인 공간 밖에서 측정한다면 사용자에게 목적을 알리고 적절한 동의를 받으세요.
오늘 바로 시작할 첫 번째 실험
먼저 ESP32 보드의 CSI 지원 여부를 확인하고 ESP-CSI 수신 예제로 CSI 로그가 실제 출력되는지 확인하세요. 데이터가 안정적으로 수집된 다음에야 구역 라벨을 붙이고 위치 추정 모델을 만드는 단계로 넘어갈 수 있습니다.