# ESP32 Serial Logger v2.0 UART2 시리얼 모니터링 + SD카드 로깅 + WiFi 웹 인터페이스 + DS3231 RTC ## 하드웨어 - **보드:** ESP-WROOM-32D DevKitC V4 - **RTC:** DS3231 모듈 (I2C, ±2ppm 정밀도) - **SD카드:** SPI 방식 MicroSD 모듈 ## 핀 연결 ``` ESP32 대상장치 (UART) GPIO17 (TX) ──────────── RX GPIO16 (RX) ──────────── TX GND ──────────────────── GND ESP32 SD Card Module (VSPI) GPIO18 ──────────────── SCLK GPIO19 ──────────────── MISO GPIO23 ──────────────── MOSI GPIO5 ──────────────── CS 3.3V ──────────────── VCC GND ──────────────── GND ESP32 DS3231 RTC Module (SoftWire I2C) GPIO25 ──────────────── SDA GPIO26 ──────────────── SCL 3.3V ──────────────── VCC GND ──────────────── GND ``` > SoftWire 사용으로 임의 GPIO에 DS3231 연결 가능. GPIO 6~11은 SPI Flash 전용. ## Arduino IDE 설정 | 설정 | 값 | |---|---| | Board | ESP32 Dev Module | | Upload Speed | 921600 | | CPU Frequency | 240MHz (WiFi/BT) | | Flash Frequency | 80MHz | | Flash Mode | QIO | | Flash Size | 4MB (32Mb) | | Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) | | PSRAM | Disabled | ## 필수 라이브러리 | 라이브러리 | 설치 | |---|---| | WebSockets by Markus Sattler (Links2004) | Library Manager | | ArduinoJson v6.x | Library Manager | | SoftWire by Steve Marple | Library Manager → "SoftWire" | | AsyncDelay by Steve Marple | Library Manager (SoftWire 의존) | | SD, SPI | 설치 불필요 (내장) | ## 시간 동기화 전략 (장기 로깅용) ``` 시간 우선순위: 1. NTP (STA 모드, 1시간마다 자동 보정) 2. 브라우저 시간 (WebSocket 접속 시 자동 전송) 3. DS3231 RTC (부팅 즉시 + 60초마다 드리프트 보정) ``` ### 동작 흐름 1. 부팅 → DS3231에서 시간 읽어 시스템 시계 즉시 설정 2. 핸드폰 접속 → 브라우저 시간 → 시스템 시계 + DS3231 동시 설정 3. WiFi 끊김/장기 방치 → 60초마다 DS3231 → 시스템 시계 보정 4. STA 모드 → NTP 성공 시 RTC도 자동 업데이트 ## FreeRTOS 태스크 구조 ``` Core 1: SerialRX(Pri:5), SerialTX(Pri:4) Core 0: SDLog(Pri:3), WebBroadcast(Pri:2), RTC(Pri:1), NTP(Pri:1) Loop: server.handleClient() ``` ## 로그 파일 - 경로: /logs/LOG_YYYYMMDD_HHMMSS.csv - 형식: "Timestamp","Direction","Data"