# ESP32 CAN Logger 조립설명서

## 📦 구성품 확인

조립을 시작하기 전에 다음 부품들이 모두 포함되어 있는지 확인하세요.

### 필수 부품
| 번호 | 부품명 | 수량 | 비고 |
|------|--------|------|------|
| 1 | ESP32 WROOM-32 개발보드 | 1 | 30핀 |
| 2 | MCP2515 CAN 컨트롤러 모듈 | 1 | 8MHz 크리스탈 |
| 3 | SD 카드 리더 모듈 | 1 | SPI 인터페이스 |
| 4 | DS3231 RTC 모듈 | 1 | 배터리 포함 (선택사항) |
| 5 | Micro SD 카드 | 1 | 4GB 이상 권장 |
| 6 | 점퍼 케이블 (암-암) | 20개 | 듀폰 케이블 |
| 7 | 점퍼 케이블 (수-수) | 10개 | 듀폰 케이블 |
| 8 | USB 케이블 (Micro USB) | 1 | 전원 및 프로그래밍용 |
| 9 | DB9 커넥터 (수) | 1 | CAN 버스 연결용 |
| 10 | 브레드보드 (선택) | 1 | 중형 830핀 |

### 옵션 부품
- 케이스 또는 아크릴 플레이트
- 120Ω CAN 터미네이션 저항 (CAN 버스 종단에 필요시)
- 5V 전원 어댑터

---

## 🔧 조립 전 준비사항

### 1. 작업 환경 준비
- 깨끗하고 정전기가 없는 작업대를 준비하세요
- 충분한 조명을 확보하세요
- 정전기 방지 팔찌 착용을 권장합니다

### 2. 도구 준비
- 작은 십자 드라이버 (케이스 조립시)
- 니퍼 또는 와이어 스트리퍼 (필요시)
- 멀티미터 (테스트용, 선택사항)

### 3. 부품 검사
- 모든 부품의 외관 손상 여부를 확인하세요
- 핀이 구부러지지 않았는지 확인하세요
- SD 카드가 포맷되어 있는지 확인하세요 (FAT32 권장)

---

## 📐 배선 가이드

### 핀 배치도 개요

```
ESP32 WROOM-32
┌─────────────────────────┐
│  3V3  EN  VP  VN  GPIO34│
│  GND  23  22  TX  RX   21│
│  19   18   5  17  16   4 │
│   0    2  15  13  12  14 │
│  27   26  25  33  32  35 │
│  VIN GND                 │
└─────────────────────────┘
```

### 1. MCP2515 CAN 모듈 연결 (HSPI)

**MCP2515 모듈** → **ESP32 핀**

| MCP2515 핀 | ESP32 핀 | 설명 |
|------------|----------|------|
| VCC | 3.3V | 전원 (+) |
| GND | GND | 접지 (-) |
| CS | GPIO 15 | Chip Select |
| SO (MISO) | GPIO 12 | Master In Slave Out |
| SI (MOSI) | GPIO 13 | Master Out Slave In |
| SCK | GPIO 14 | SPI Clock |
| INT | GPIO 27 | Interrupt (인터럽트) |

⚠️ **주의사항:**
- MCP2515는 반드시 **3.3V**로 연결하세요 (5V 연결 시 ESP32 손상 가능)
- INT 핀은 CAN 메시지 수신 시 인터럽트를 발생시킵니다
- 케이블은 가능한 짧게 연결하세요 (10cm 이내 권장)

### 2. SD 카드 모듈 연결 (VSPI)

**SD 카드 모듈** → **ESP32 핀**

| SD 모듈 핀 | ESP32 핀 | 설명 |
|------------|----------|------|
| VCC | 5V | 전원 (+) |
| GND | GND | 접지 (-) |
| CS | GPIO 5 | Chip Select |
| MISO | GPIO 19 | Master In Slave Out |
| MOSI | GPIO 23 | Master Out Slave In |
| SCK | GPIO 18 | SPI Clock |

⚠️ **주의사항:**
- SD 카드 모듈은 **5V** 또는 **3.3V** 호환 모듈을 사용하세요
- 일부 모듈은 레벨 시프터가 내장되어 있습니다
- Micro SD 카드를 미리 삽입해두세요

### 3. DS3231 RTC 모듈 연결 (I2C) - 선택사항

**DS3231 RTC** → **ESP32 핀**

| RTC 핀 | ESP32 핀 | 설명 |
|--------|----------|------|
| VCC | 3.3V | 전원 (+) |
| GND | GND | 접지 (-) |
| SDA | GPIO 25 | I2C Data |
| SCL | GPIO 26 | I2C Clock |

💡 **참고:**
- RTC 모듈은 선택사항입니다
- RTC가 없어도 웹 인터페이스를 통해 시간을 동기화할 수 있습니다
- RTC 배터리(CR2032)가 장착되어 있는지 확인하세요

### 4. CAN 버스 연결

**MCP2515 CAN_H/CAN_L** → **DB9 커넥터**

| MCP2515 | DB9 핀 | 설명 |
|---------|--------|------|
| CAN_H | Pin 7 | CAN High |
| CAN_L | Pin 2 | CAN Low |
| GND | Pin 3 | 신호 접지 (선택) |

💡 **CAN 터미네이션:**
- CAN 버스의 양 끝단에는 120Ω 저항이 필요합니다
- 중간 노드의 경우 터미네이션 저항을 연결하지 마세요
- MCP2515 모듈에 터미네이션 점퍼가 있다면 필요시 설정하세요

---

## 🔨 단계별 조립 과정

### Step 1: 브레드보드 배치 (선택사항)

브레드보드를 사용하는 경우:
1. ESP32를 브레드보드 중앙에 배치합니다
2. 각 모듈들을 ESP32 주변에 배치합니다
3. 전원 레일(+/-) 위치를 확인합니다

### Step 2: 전원선 연결

**중요: 전원선을 먼저 연결합니다**

1. ESP32의 **GND** 핀들을 모두 브레드보드의 **GND 레일**에 연결
2. ESP32의 **3.3V** 핀을 **3.3V 레일**에 연결
3. ESP32의 **5V** (VIN) 핀을 **5V 레일**에 연결

### Step 3: MCP2515 CAN 모듈 연결

1. **전원 연결:**
   - MCP2515 VCC → ESP32 3.3V (빨간 케이블)
   - MCP2515 GND → ESP32 GND (검은 케이블)

2. **SPI 신호선 연결 (HSPI):**
   - CS → GPIO 15 (주황 케이블)
   - SO → GPIO 12 (파란 케이블)
   - SI → GPIO 13 (녹색 케이블)
   - SCK → GPIO 14 (노란 케이블)

3. **인터럽트 핀 연결:**
   - INT → GPIO 27 (보라 케이블)

### Step 4: SD 카드 모듈 연결

1. **Micro SD 카드를 먼저 삽입합니다**

2. **전원 연결:**
   - SD VCC → ESP32 5V (빨간 케이블)
   - SD GND → ESP32 GND (검은 케이블)

3. **SPI 신호선 연결 (VSPI):**
   - CS → GPIO 5 (주황 케이블)
   - MISO → GPIO 19 (파란 케이블)
   - MOSI → GPIO 23 (녹색 케이블)
   - SCK → GPIO 18 (노란 케이블)

### Step 5: RTC 모듈 연결 (선택사항)

1. **배터리 확인:**
   - RTC 모듈 뒷면의 CR2032 배터리를 확인합니다

2. **전원 연결:**
   - RTC VCC → ESP32 3.3V (빨간 케이블)
   - RTC GND → ESP32 GND (검은 케이블)

3. **I2C 신호선 연결:**
   - SDA → GPIO 25 (파란 케이블)
   - SCL → GPIO 26 (녹색 케이블)

### Step 6: CAN 버스 연결

1. **DB9 커넥터 배선:**
   - MCP2515의 CAN_H → DB9 Pin 7
   - MCP2515의 CAN_L → DB9 Pin 2
   - (선택) GND → DB9 Pin 3

2. **터미네이션 저항 설정 (필요시):**
   - CAN 버스 종단 노드인 경우 120Ω 저항 연결
   - 중간 노드는 터미네이션 불필요

### Step 7: 최종 점검

✅ **연결 상태 체크리스트:**

- [ ] 모든 전원선(VCC, GND) 연결 확인
- [ ] MCP2515 HSPI 핀 (GPIO 12, 13, 14, 15) 연결 확인
- [ ] MCP2515 INT 핀 (GPIO 27) 연결 확인
- [ ] SD 카드 VSPI 핀 (GPIO 5, 18, 19, 23) 연결 확인
- [ ] RTC I2C 핀 (GPIO 25, 26) 연결 확인 (선택)
- [ ] SD 카드 삽입 확인
- [ ] 모든 점퍼 케이블의 접촉 불량 확인
- [ ] 전원 쇼트 여부 멀티미터로 확인 (선택)

---

## 📱 펌웨어 업로드

### 1. Arduino IDE 설치 및 설정

1. **Arduino IDE 설치**
   - https://www.arduino.cc/en/software 에서 다운로드
   - 최신 버전 설치 (1.8.x 이상 또는 2.x)

2. **ESP32 보드 패키지 추가**
   ```
   파일 → 환경설정 → 추가 보드 매니저 URL:
   https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
   ```

3. **보드 설치**
   ```
   도구 → 보드 → 보드 매니저
   "esp32" 검색 후 설치
   ```

### 2. 필수 라이브러리 설치

**라이브러리 매니저에서 설치:**
- `mcp2515` by Cory Fowler
- `SoftWire` by Testato
- `WebSockets` by Markus Sattler
- `SD` (기본 내장)

**설치 방법:**
```
스케치 → 라이브러리 포함하기 → 라이브러리 관리
각 라이브러리 이름 검색 후 "설치" 클릭
```

### 3. 코드 업로드

1. **ESP32를 USB 케이블로 PC에 연결**

2. **보드 설정:**
   ```
   도구 → 보드: "ESP32 Dev Module"
   도구 → Upload Speed: "115200"
   도구 → Flash Frequency: "80MHz"
   도구 → Port: [해당 COM 포트 선택]
   ```

3. **펌웨어 파일 열기:**
   - ESP32_CAN_Logger.ino 파일 열기
   - 같은 폴더에 index.h, transmit.h, graph.h, graph_viewer.h 파일 확인

4. **컴파일 및 업로드:**
   - 좌측 상단의 "✓" 버튼 클릭 (컴파일)
   - 에러가 없으면 "→" 버튼 클릭 (업로드)
   - "Connecting..." 메시지가 나오면 ESP32의 BOOT 버튼을 누르세요

5. **업로드 확인:**
   - 시리얼 모니터 열기 (도구 → 시리얼 모니터)
   - Baud Rate: 115200
   - 초기화 메시지 확인

---

## 🧪 동작 테스트

### 1. 기본 동작 확인

**시리얼 모니터 확인:**
```
========================================
  ESP32 CAN Logger with RTC Time Sync  
========================================
✓ MCP2515 초기화 완료
✓ SD 카드 초기화 완료
✓ DS3231 RTC 감지됨
✓ AP IP: 192.168.4.1
✓ 모든 태스크 시작 완료
========================================
  웹 인터페이스 접속
========================================
  1. WiFi: Byun_CAN_Logger (12345678)
  2. http://192.168.4.1
  3. Pages:
     - Monitor:  /
     - Transmit: /transmit
     - Graph:    /graph
========================================
```

### 2. LED 확인

- **ESP32 LED:** 부팅 시 깜빡임
- **MCP2515 LED:** CAN 메시지 수신 시 깜빡임 (모듈에 따라 다름)
- **SD 카드 LED:** 쓰기 작업 시 깜빡임

### 3. WiFi 연결 테스트

1. **스마트폰 또는 노트북 WiFi 설정:**
   - SSID: `Byun_CAN_Logger`
   - 비밀번호: `12345678`

2. **웹 브라우저 접속:**
   - 주소: `http://192.168.4.1`
   - 메인 모니터 페이지가 표시되어야 합니다

### 4. SD 카드 테스트

1. **웹 페이지에서 "Start Logging" 클릭**
2. **로깅 중지 후 SD 카드를 PC에서 확인**
3. **`.bin` 파일이 생성되었는지 확인**

### 5. CAN 통신 테스트

1. **CAN 버스를 차량 OBD-II 포트 또는 CAN 테스터에 연결**
2. **웹 페이지에서 실시간 메시지 확인**
3. **ID, DLC, Data가 정상적으로 표시되는지 확인**

---

## ⚠️ 문제 해결

### 1. ESP32가 부팅되지 않음
- **원인:** 전원 부족 또는 USB 케이블 불량
- **해결:** 
  - 5V 2A 이상의 전원 어댑터 사용
  - USB 케이블 교체
  - EN 버튼을 눌러 리셋

### 2. SD 카드를 인식하지 못함
- **원인:** SD 카드 불량 또는 포맷 문제
- **해결:**
  - SD 카드를 FAT32로 재포맷
  - 다른 SD 카드로 교체
  - 연결 상태 재확인

### 3. MCP2515 초기화 실패
- **원인:** SPI 배선 오류 또는 전압 문제
- **해결:**
  - HSPI 핀 배선 재확인 (GPIO 12, 13, 14, 15)
  - VCC가 3.3V에 연결되었는지 확인
  - 점퍼 케이블 접촉 불량 확인

### 4. WiFi에 연결되지 않음
- **원인:** 신호 간섭 또는 채널 충돌
- **해결:**
  - ESP32를 재부팅
  - 다른 WiFi 기기들을 끄고 재시도
  - ESP32에 가까이 접근

### 5. CAN 메시지가 수신되지 않음
- **원인:** CAN 버스 연결 오류 또는 속도 불일치
- **해결:**
  - CAN_H, CAN_L 배선 확인
  - CAN 속도 설정 확인 (기본 1Mbps)
  - 터미네이션 저항 확인 (양 끝단 120Ω)
  - CAN 버스의 전압 레벨 확인 (CAN_H: 3.5V, CAN_L: 1.5V)

### 6. RTC 시간이 동기화되지 않음
- **원인:** I2C 배선 오류 또는 배터리 방전
- **해결:**
  - GPIO 25(SDA), 26(SCL) 배선 확인
  - CR2032 배터리 전압 확인 (3V)
  - 배터리 교체

---

## 📞 고객 지원

조립 중 문제가 발생하거나 추가 지원이 필요한 경우:

- **이메일:** support@example.com
- **전화:** 000-0000-0000
- **운영 시간:** 평일 09:00 - 18:00

---

## 📄 관련 문서

- **사용설명서:** ESP32_CAN_Logger_사용설명서.pdf 참조
- **회로도:** schematics.pdf 참조
- **핀배치도:** pinout_diagram.pdf 참조

---

**© 2025 Byun CAN Logger. All rights reserved.**

**버전:** 1.3  
**최종 수정:** 2025년 1월
