활동 개요

2026년 5월 20일에는 CareWave 프로젝트의 핵심 기반 기술인 ESP32-S3 기반 WiFi CSI 데이터 수집 시스템을 실제 보드에서 구현하고 검증했다.

이번 작업의 목표는 ESP32-S3 보드에서 WiFi Sensing에 필요한 원시 데이터인 CSI(Channel State Information)를 실제로 출력하는 것이었다.

결과적으로 ESP32-S3 보드에 펌웨어 Flash 업로드를 완료했고, Active AP / STA 구조를 구성했으며, WiFi CSI 기능을 활성화한 뒤 Serial Monitor에서 CSI_DATA Raw Data 출력까지 확인했다.

CareWave ESP32-S3 WiFi CSI ESP-IDF Active AP Active STA Raw Data

이번 작업의 핵심 목표

CareWave는 카메라나 웨어러블 없이 WiFi 신호 변화만으로 노인의 상태를 감지하는 시스템이다. 이를 위해서는 먼저 사람이 움직일 때 WiFi 신호가 어떻게 변하는지 측정할 수 있어야 한다. 이번 작업은 그 첫 단계로, ESP32-S3에서 WiFi CSI 데이터를 직접 수집하는 환경을 구축한 것이다.

CareWave 전체 흐름

ESP32-S3 보드
    ↓
WiFi Packet 송수신
    ↓
CSI Raw Data 추출
    ↓
CSV 저장
    ↓
Python 전처리
    ↓
Amplitude / Phase 변환
    ↓
AI 모델 학습 및 낙상 감지

따라서 이번 작업은 AI 모델을 바로 구현한 단계가 아니라, AI가 학습할 수 있는 원천 센서 데이터 수집 단계에 해당한다.

작업 결과 요약

  • ESP32-S3 펌웨어 Flash 업로드 성공
  • ESP-IDF Monitor 출력 확인 성공
  • Active AP / STA 구조 구축 완료
  • WiFi CSI 기능 활성화 및 오류 해결
  • CSI Raw Data 출력 성공
  • CSI 데이터 수집 파이프라인 1차 검증 완료

1. Flash 업로드 및 Monitor 출력 확인

Flash 업로드 및 Monitor 실행 성공 화면 ESP-IDF Flash 업로드 및 Monitor 출력 성공 화면

ESP-IDF 환경에서 ESP32-S3 보드에 펌웨어를 업로드한 뒤, Monitor를 통해 보드가 정상적으로 실행되는지 확인한 화면이다.

ESP32-S3는 일반 웹 서버 코드처럼 실행하는 것이 아니라, 작성한 펌웨어를 보드에 직접 Flash 업로드해야 한다. Monitor 화면에 보드 정보와 프로그램 시작 로그가 출력되었다는 것은 펌웨어가 정상적으로 올라갔고 ESP32-S3 내부에서 프로그램이 실행되고 있다는 의미다.

노트북과 ESP32-S3의 연결 구조

이번 실험에서는 ESP32-S3 보드를 USB-C 케이블로 노트북에 연결하여 작업을 진행했다. 다만 실제 WiFi CSI 데이터 자체가 USB를 통해 전달되는 것은 아니다.

USB 연결은 크게 다음 역할을 담당한다.

USB-C 연결 역할

1. ESP32-S3 보드 전원 공급
2. 펌웨어 Flash 업로드
3. Serial Monitor 출력 확인

즉, 노트북은 ESP32-S3에 코드를 업로드하고 실행 로그를 확인하는 역할을 한다. 실제 CSI 데이터는 ESP32 보드끼리 WiFi 패킷을 주고받는 과정에서 생성된다.

전체 데이터 흐름

노트북
    ↓ USB-C
ESP32-S3 RX 보드(active_ap)
    ↑
    │ WiFi packet / WiFi signal
    ↓
ESP32-S3 TX 보드(active_sta)
    ↑
    ↓ USB-C 또는 보조 전원
노트북 또는 전원 공급

즉, USB는 코드 업로드와 로그 확인용 연결이고, 실제 WiFi CSI는 ESP32 보드 간 무선 통신 과정에서 발생한다.

처음 이해하기 어려웠던 개념 정리

이번 작업은 일반적인 웹 개발과 다르게 ESP32-S3 보드 안에 프로그램을 직접 넣어 실행하는 방식이다. 따라서 펌웨어, Flash, Monitor, Serial 같은 개념을 함께 이해해야 한다.

펌웨어
→ ESP32-S3 보드 내부에서 직접 실행되는 프로그램

Flash
→ 작성한 펌웨어를 ESP32-S3 보드에 업로드하는 과정

Monitor
→ ESP32-S3 보드가 출력하는 실행 로그를 노트북에서 확인하는 기능

Serial
→ USB 연결을 통해 ESP32-S3와 노트북이 문자 데이터를 주고받는 통신 방식

정리하면, 노트북에서 코드를 작성하고 ESP-IDF 명령어로 ESP32-S3 보드에 Flash 업로드한다. 이후 ESP32-S3는 보드 내부에서 해당 코드를 직접 실행하고, 실행 중 발생하는 로그와 CSI_DATA를 USB Serial을 통해 노트북 Monitor 화면에 출력한다.

코드 작성
    ↓
ESP-IDF에서 빌드
    ↓
ESP32-S3 보드에 Flash 업로드
    ↓
보드 내부에서 펌웨어 실행
    ↓
WiFi packet 송수신
    ↓
CSI_DATA 생성
    ↓
USB Serial을 통해 Monitor 화면에 출력

2. Active AP 보드 구성

RX 보드용 active_ap Flash 성공 화면 active_ap Flash 성공 화면

active_ap 코드를 ESP32-S3 보드에 업로드한 화면이다. 이 보드는 WiFi AP 역할을 하며, CSI 데이터를 수집하는 수신기 역할을 담당한다.

Active AP 역할

ESP32-S3 active_ap
    ↓
WiFi AP 생성
    ↓
STA 보드 접속 대기
    ↓
WiFi Packet 수신
    ↓
CSI Callback 실행
    ↓
CSI_DATA 출력

3. GitHub 코드 구조 정리

이번에 사용한 CSI_DATA 레포는 ESP32-S3에서 CSI 데이터를 수집하기 위한 코드이며, 핵심 구조는 active_ap, active_sta, _components, python_utils로 나눌 수 있다.

CSI_DATA-main

├─ active_ap
│  └─ AP 역할 보드 코드
│
├─ active_sta
│  └─ STA 역할 보드 코드
│
├─ passive
│  └─ 주변 WiFi 패킷을 수동으로 수신하는 코드
│
├─ _components
│  ├─ csi_component.h
│  ├─ sockets_component.h
│  ├─ sd_component.h
│  ├─ nvs_component.h
│  └─ time_component.h
│
└─ python_utils
   ├─ parse_csi.py
   ├─ serial_plot_csi_live.py
   └─ serial_measure_rate.py

active_ap

active_ap는 AP 역할을 하는 보드에 업로드하는 코드다. 이 보드는 WiFi AP를 만들고, STA 보드가 보낸 패킷을 수신한다. 패킷을 받을 때마다 CSI callback이 호출되고 CSI_DATA가 출력된다.

active_sta

active_sta는 STA 역할을 하는 보드에 업로드하는 코드다. 이 보드는 AP 보드가 만든 WiFi에 접속한 뒤 UDP 패킷을 지속적으로 보낸다. 이 패킷이 있어야 AP 보드에서 CSI 데이터가 발생한다.

_components

_components 폴더는 공통 기능을 모아둔 곳이다. 특히 csi_component.h는 CSI callback과 CSI_DATA 출력에 직접 관련된 핵심 파일이다.

python_utils

python_utils 폴더는 ESP32에서 출력된 CSI 데이터를 Python으로 읽고, 시간 추가, 실시간 그래프 출력, amplitude/phase 분석 등에 활용할 수 있는 보조 도구를 포함한다.

4. CSI Raw Data 출력 성공

Serial Monitor에서 CSI_DATA 출력 확인 CSI Raw Data 출력 화면

ESP-IDF Monitor에서 실제 CSI_DATA가 출력되는 화면이다. 이번 작업에서 가장 중요한 결과다.

Monitor에 출력된 CSI_DATA는 ESP32-S3가 WiFi 패킷을 수신할 때마다 생성되는 WiFi 채널 상태 정보다. 즉, 사람이 공간 안에서 움직일 때 WiFi 신호가 어떻게 변하는지 분석하기 위한 원본 데이터다.

CSI_DATA 예시 구조

CSI_DATA,
AP,
MAC 주소,
RSSI,
Rate,
Channel,
Timestamp,
CSI Length,
[CSI Raw Data 배열]

가장 중요한 값은 마지막 배열 형태의 CSI Raw Data이다. 이 값은 이후 I/Q 값으로 해석하고, amplitude와 phase로 변환하여 움직임 분석에 사용할 수 있다.

5. 오늘 작업 기록

작업 정리 및 다음 할 일 기록 2026년 5월 20일 작업 기록

Flash 업로드, Active AP / STA 구조 구축, CSI Raw Data 출력 성공까지의 진행 상황을 정리한 기록이다.

오늘 완료한 일

  • ESP32-S3 펌웨어 Flash 업로드 성공
  • Monitor 출력 확인 성공
  • 보드에서 프로그램 실행 성공 확인
  • Active AP / STA 구조 구축 완료
  • WiFi CSI 기능 활성화 및 오류 해결
  • CSI Raw Data 출력 성공
  • CSI 데이터 수집 파이프라인 1차 검증 완료

다음 할 일

  • Serial Monitor에서 출력되는 CSI_DATA를 CSV 파일로 저장
  • CSI Raw Data를 amplitude / phase 형태로 전처리
  • 낙상, 보행, 정지 등 행동별 데이터 수집 실험 설계
  • 이후 UDP 기반 실시간 서버 전송 구조로 확장

정리

2026년 5월 20일 작업에서는 ESP32-S3 기반 WiFi CSI 데이터 수집 시스템을 실제로 구현하고, Serial Monitor에서 CSI Raw Data가 출력되는 것을 확인했다.

이번 결과는 CareWave 프로젝트에서 카메라 없이 WiFi 신호만으로 공간 내 움직임을 감지하기 위한 가장 핵심적인 기반 기술 검증에 해당한다.

← CareWave 목록으로 돌아가기