82 lines
2.8 KiB
Markdown
82 lines
2.8 KiB
Markdown
# 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"
|