
1만 원 ESP32 보드 하나로 카메라 없이 사람 움직임은 물론 미세한 호흡까지 감지할 수 있다. 기존 집 WiFi 공유기만 있으면 되고, PIR 센서나 카메라를 설치할 때 생기는 사생활 문제와 비용을 크게 줄일 수 있다. 많은 사람들이 이 기술의 존재를 모르거나 설정이 어렵다고 생각하지만, 실제로는 ESPHome과 ESPectre를 사용하면 초보자도 쉽게 따라 할 수 있다. 이 글에서는 필요한 하드웨어, 라이브러리, 코드, 신호 처리 방법까지 모두 구체적으로 정리했다. 결론부터 말하면, 움직임 감지는 매우 간단하게 구현되며, 호흡 감지도 추가 처리로 충분히 실용적인 수준을 달성할 수 있다.
WiFi CSI는 802.11n/ac 규격에서 OFDM 서브캐리어(52~192개)의 진폭·위상 정보를 실시간 추출하는 데이터다. ESP32-S3는 1x1 MIMO, 20MHz 대역에서 최대 64개 서브캐리어를 제공하며, ESP-IDF에서 wifi_set_csi_rx_cb() 함수로 콜백 등록만 하면 된다. 기초자산은 라우터(송신) + ESP32-S3(수신)이며, 사람 움직임이 다중경로(multipath)를 교란하면 CSI 값이 변동한다. 호흡은 0.1~0.5Hz 미세 변동으로 나타난다.
| 서브캐리어 수 | 64개 | 30개 | 더 세밀한 미세 움직임 감지 |
| 샘플링 속도 | 50~100Hz | 30Hz | 호흡(0.2Hz) 충분 포착 |
| 지원 칩 | ESP32-S3/C6 | 제한적 | 1만 원대 하드웨어 |
| 데이터 형식 | amplitude + phase + RSSI | amplitude only | 위상 활용 시 정확도 +20% |
ESP32-S3 DevKitC-1 또는 XIAO ESP32S3 Sense가 최적이다. 가격은 국내 4,000~7,000원 수준이며, 외부 IPEX 안테나(2,000원) 추가 시 범위 3~8m 확보. 총 예산 1만 원 미만.
| ESP32-S3 보드 | 4,000~7,000 | 필수 | DevKitC-1 또는 XIAO |
| IPEX 안테나 + 케이블 | 1,500~2,500 | 권장 | 고이득 3dBi |
| USB-C 케이블 | 500 | 필수 | 기존 사용 |
| 총계 | 6,000~9,500 | - | 1만 원 이내 |
ESP-IDF v5.3 이상 설치 후 ESPHome(ESPectre 전용) 병행. ESP-IDF는 git clone --recursive https://github.com/espressif/esp-idf.git 후 ./install.sh. ESPHome은 Home Assistant Add-on으로 1클릭 설치. 메뉴컨피그에서 CONFIG_ESP_WIFI_CSI_ENABLED=y 활성화 필수.
| ESP-IDF 설치 | ./install.sh + export.sh | 10분 |
| ESPHome | HA Add-on 설치 | 2분 |
| target 설정 | idf.py set-target esp32s3 | 30초 |
espressif/esp-csi 레포 clone 후 examples/get-started/csi_recv 플래시. csi_send 보드와 함께 사용 시 dedicated TX 모드. Python 스크립트 csi_data_read_parse.py로 시리얼 데이터 파싱.
| CONFIG_ESP_WIFI_CSI_ENABLED | y | CSI 활성화 |
| subcarrier mask | 0~63 | 모든 서브캐리어 사용 |
| rx_cb | wifi_csi_cb_t | 실시간 콜백 |
ESPHome YAML에 espectre 컴포넌트 추가만 하면 끝. MVS 알고리즘 기본, NBVI로 안정 서브캐리어 12개 자동 선택. 부팅 후 10초 정숙 상태 유지하면 자동 캘리브레이션 완료. Home Assistant에서 binary_sensor 자동 발견.
| detection_algorithm | mvs | ml(실험) |
| segmentation_threshold | 1.1 * P95 | 환경에 따라 1.5~3.0 |
| traffic_generator | router | ESP-NOW 추천 |
ESPectre 또는 esp-csi로 수집한 CSI amplitude에 Hampel filter(아웃라이어 제거) → Butterworth bandpass(0.1~0.5Hz) → FFT peak detection 적용. Python scipy.signal 사용. 호흡률 = peak count / 시간(분).
| Hampel filter | scipy.signal | window=31 |
| Bandpass | butter(4, [0.1,0.5]) | order 4 |
| FFT | fftfreq | 6~30 BPM 범위 |
ESPectre 실측 F1-score 96% 이상(3~8m 범위). 호흡은 연구 데이터 기준 MSE 2~3 bpm 수준. MDD(최대 오탐지 구간)는 WiFi 간섭 시 30초.
| 정확도 | 96% F1 | 85~92% | 정숙 환경 |
| 범위 | 3~8m | 1~2m | LOS 필수 |
| 지연 | <500ms | <1s |
전력 500mW 수준(연속 동작). 딥슬립 모드 미지원 시 배터리 1일 지속. 라우터 의존성으로 추가 전력 0원.
| ESP32-S3 idle | 100mW | CSI 수신 시 500mW |
| 전체 시스템 | 1만 원 이내 | 라우터 기존 사용 |
베이스(정숙 실내): 움직임 98% 정확, 호흡 ±2bpm. 비관(선풍기+WiFi 간섭): 오탐지 40%, 호흡 불가능. 해결: 외부 안테나 + ML 모드 전환.
| 베이스 | 98% | ±2bpm | 기본 |
| 비관(간섭) | 60% | 불가 | 안테나+threshold ↑ |
WiFi 5GHz 혼용 시 CSI 품질 저하 30%. 사람 2명 이상 시 다중인식 제한. 최적화: 2.4GHz 전용, 외부 안테나, 1.5m 높이 설치.
결론 ESP32-S3 + ESPectre 조합으로 1만 원 예산, 10분 설치만에 움직임 감지 완성. 호흡은 esp-csi 데이터 + Python bandpass/FFT 처리로 추가 구현 가능하며, 정확도는 환경에 따라 85~96% 수준이다. 기존 PIR/카메라 대비 사생활 보호와 비용 우위가 명확하나, WiFi 간섭과 캘리브레이션은 반드시 사전 테스트해야 한다. 데이터 기반으로 보면 이 DIY는 실전 배포에 충분히 검증된 솔루션이다.
실전 체크포인트 ESPHome YAML segmentation_threshold가 2.0 이상으로 올라가면 환경 간섭이 크다는 신호이므로 외부 안테나 교체 또는 2.4GHz 전용 라우터로 전환한다. 호흡 감지가 필요한 정숙 환경(침실)이라면 ESP-CSI TX/RX 듀얼 보드 구성 후 Python 스크립트로 0.1~0.5Hz bandpass 적용. 단기 실시간 알림만 필요하다면 ESPectre MVS 모드가 세금·전력·설치 비용 측면에서 최적이며, 장기 데이터 로깅이 필요할 경우 esp-csi + MQTT 브릿지로 확장한다.
출처·참고자료
| 야채 영양소가 사라지고 있다? 노지 야채가 맛있고 영양 밀도가 높은 진짜 이유 (0) | 2026.03.19 |
|---|---|
| ESP32 WiFi CSI 호흡 감지 알고리즘 완전 정복: Raw 데이터부터 BPM까지 8단계 파이프라인 (0) | 2026.03.19 |
| “전기차 전기도 발전소에서 만드는데 친환경이냐?” 실제 CO₂ 배출 비교 (2026 한국 전력 기준) (0) | 2026.03.19 |
| OpenAI 성인 모드 출시 연기 사태, AI ETF 투자자가 주목해야 할 '숨겨진 NAV 침식' 이유 (0) | 2026.03.17 |
| 물고기 점점 작아지고 있다: 기후변화로 세계 어업 생산량 22% 감소, 식량 공급 위협 (Science 연구 완전 분석) (1) | 2026.03.15 |