From 23bed9688b9906b97f6d3c4fa3ea8b4731e4c385 Mon Sep 17 00:00:00 2001 From: byun Date: Fri, 24 Oct 2025 20:12:35 +0000 Subject: [PATCH] =?UTF-8?q?=EB=A7=A4=EB=89=B4=EC=96=BC=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assembly_manual.md | 404 +++++++++++++++ user_manual.md | 1175 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1579 insertions(+) create mode 100644 assembly_manual.md create mode 100644 user_manual.md diff --git a/assembly_manual.md b/assembly_manual.md new file mode 100644 index 0000000..d10ca21 --- /dev/null +++ b/assembly_manual.md @@ -0,0 +1,404 @@ +# 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월 diff --git a/user_manual.md b/user_manual.md new file mode 100644 index 0000000..e00bbff --- /dev/null +++ b/user_manual.md @@ -0,0 +1,1175 @@ +# ESP32 CAN Logger 사용설명서 + +## 목차 +1. [제품 소개](#제품-소개) +2. [시작하기](#시작하기) +3. [웹 인터페이스 사용법](#웹-인터페이스-사용법) +4. [CAN 데이터 로깅](#can-데이터-로깅) +5. [CAN 메시지 송신](#can-메시지-송신) +6. [그래프 분석](#그래프-분석) +7. [데이터 다운로드](#데이터-다운로드) +8. [고급 기능](#고급-기능) +9. [문제 해결](#문제-해결) +10. [기술 사양](#기술-사양) + +--- + +## 제품 소개 + +### 개요 +ESP32 CAN Logger는 CAN 버스 데이터를 실시간으로 모니터링하고 기록하는 장치입니다. 자동차 진단, 산업용 장비 모니터링, CAN 통신 분석 등 다양한 용도로 활용할 수 있습니다. + +### 주요 기능 +- ✅ **실시간 CAN 모니터링:** 최대 1Mbps CAN 통신 지원 +- ✅ **고속 데이터 로깅:** SD 카드에 바이너리 형식으로 저장 +- ✅ **WiFi 웹 인터페이스:** 스마트폰/PC에서 무선으로 제어 +- ✅ **CAN 메시지 송신:** 최대 20개의 주기적 메시지 전송 +- ✅ **실시간 그래프:** 데이터 시각화 및 분석 +- ✅ **RTC 시간 동기화:** 정확한 타임스탬프 기록 +- ✅ **다중 CAN 속도 지원:** 125K/250K/500K/1Mbps + +### 제품 사양 +| 항목 | 사양 | +|------|------| +| **메인 컨트롤러** | ESP32 WROOM-32 (듀얼코어 240MHz) | +| **CAN 컨트롤러** | MCP2515 (8MHz 크리스탈) | +| **CAN 속도** | 125Kbps ~ 1Mbps | +| **저장 매체** | Micro SD 카드 (최대 32GB) | +| **WiFi** | 802.11 b/g/n (2.4GHz) | +| **전원** | 5V DC (USB 또는 외부 어댑터) | +| **소비 전력** | 약 500mA (최대) | +| **동작 온도** | -10°C ~ 60°C | +| **크기** | 약 10cm x 7cm (브레드보드 포함) | + +--- + +## 시작하기 + +### 1. 전원 연결 + +**USB 전원 사용:** +1. Micro USB 케이블을 ESP32에 연결 +2. USB 전원 어댑터(5V 2A 이상) 또는 PC USB 포트에 연결 +3. ESP32의 LED가 켜지면 정상 부팅 중 + +**외부 전원 사용:** +- 5V DC 입력을 ESP32의 VIN 핀에 연결 +- GND를 공통 접지에 연결 + +⚠️ **주의:** 5V 이상의 전압을 직접 연결하지 마세요! + +### 2. SD 카드 준비 + +**포맷:** +1. Micro SD 카드를 PC에 삽입 +2. FAT32 파일 시스템으로 포맷 +3. 할당 단위 크기: 4096 바이트 권장 + +**용량 권장:** +- 최소: 4GB +- 권장: 8GB ~ 32GB + +💡 **팁:** 빠른 SD 카드(Class 10 이상)를 사용하면 더 많은 메시지를 기록할 수 있습니다. + +### 3. WiFi 연결 + +**접속 방법:** +1. 스마트폰 또는 노트북의 WiFi 설정 열기 +2. **SSID:** `Byun_CAN_Logger` 검색 +3. **비밀번호:** `12345678` 입력 +4. 연결 완료 후 자동으로 IP 할당됨 + +**웹 인터페이스 접속:** +1. 웹 브라우저 실행 (Chrome, Safari, Firefox 등) +2. 주소창에 `http://192.168.4.1` 입력 +3. 메인 모니터 페이지 표시 + +### 4. CAN 버스 연결 + +**OBD-II 포트 연결 (자동차):** +1. OBD-II to DB9 케이블 사용 +2. 차량의 OBD-II 포트에 연결 +3. DB9 커넥터를 CAN Logger에 연결 +4. 차량 시동을 켜거나 ACC ON + +**표준 CAN 버스 연결:** +- **Pin 7 (CAN_H):** High 신호선 +- **Pin 2 (CAN_L):** Low 신호선 +- **Pin 3 (GND):** 신호 접지 (선택) + +⚠️ **경고:** +- CAN_H와 CAN_L을 반대로 연결하지 마세요 +- 전원 극성을 확인하세요 +- 터미네이션 저항이 필요한 경우 120Ω 연결 + +--- + +## 웹 인터페이스 사용법 + +### 메인 화면 구성 + +웹 인터페이스는 3개의 주요 페이지로 구성됩니다: +1. **Monitor (/)** - 실시간 CAN 모니터링 +2. **Transmit (/transmit)** - CAN 메시지 송신 +3. **Graph (/graph)** - 데이터 시각화 + +### 1. Monitor 페이지 (메인) + +**URL:** `http://192.168.4.1/` + +#### 상단 상태 바 +``` +🟢 Logging: ON/OFF SD Card: ✓/✗ +📊 Messages: 12,543 Speed: 456 msg/s +🕐 Time Sync: ✓/✗ RTC: ✓/✗ +``` + +**상태 표시 의미:** +- **Logging:** 현재 로깅 진행 상태 +- **SD Card:** SD 카드 인식 여부 +- **Messages:** 총 수신 메시지 수 +- **Speed:** 초당 메시지 수신 속도 +- **Time Sync:** 시간 동기화 상태 +- **RTC:** RTC 모듈 감지 여부 + +#### 제어 버튼 + +**🔴 Start Logging / 🟥 Stop Logging** +- 클릭하여 로깅 시작/중지 +- 시작 시 새 로그 파일 자동 생성 +- 파일명 형식: `can_YYYYMMDD_HHMMSS.bin` + +**⚙️ CAN Speed: 1M** +- 클릭하여 CAN 속도 변경 +- 옵션: 125K, 250K, 500K, 1M +- ⚠️ 변경 시 로깅 중단됨 + +**⏰ Time Sync** +- PC/스마트폰의 시간을 ESP32에 동기화 +- RTC가 없는 경우 필수적으로 사용 +- 정확한 타임스탬프를 위해 주기적으로 클릭 + +**📄 View Files** +- SD 카드의 로그 파일 목록 표시 +- 파일 다운로드 가능 +- 파일 크기 및 날짜 확인 + +#### 실시간 CAN 메시지 테이블 + +| ID | DLC | Data | Timestamp | Count | +|----|-----|------|-----------|-------| +| 0x123 | 8 | 01 02 03 04 05 06 07 08 | 12:34:56.789 | 1234 | + +**컬럼 설명:** +- **ID:** CAN 메시지 식별자 (16진수) +- **DLC:** 데이터 길이 (0~8 바이트) +- **Data:** 페이로드 데이터 (16진수) +- **Timestamp:** 수신 시간 (마이크로초 정밀도) +- **Count:** 해당 ID의 누적 수신 횟수 + +**기능:** +- 자동 스크롤 (최신 메시지 표시) +- 최대 100개 메시지 표시 +- 웹소켓 실시간 업데이트 + +### 2. Transmit 페이지 + +**URL:** `http://192.168.4.1/transmit` + +#### CAN 메시지 송신 설정 + +**메시지 슬롯:** 최대 20개 + +각 슬롯의 설정 항목: +- **CAN ID:** 메시지 식별자 (16진수, 예: 0x123) +- **Extended:** 확장 ID 사용 여부 (29비트) +- **DLC:** 데이터 길이 (0~8) +- **Data:** 송신 데이터 (16진수, 예: 01 02 03 04) +- **Interval:** 송신 주기 (밀리초, 예: 100) +- **Active:** 활성화/비활성화 체크박스 + +#### 제어 버튼 + +**💾 Save Slot** +- 현재 설정을 슬롯에 저장 +- 자동으로 송신 시작 + +**🗑️ Delete Slot** +- 슬롯 삭제 및 송신 중지 + +**📤 Start All / ⏸️ Stop All** +- 모든 슬롯 일괄 시작/중지 + +#### 사용 예시 + +**예시 1: ECU 시뮬레이션** +``` +CAN ID: 0x100 +Extended: ☐ +DLC: 8 +Data: 12 34 56 78 9A BC DE F0 +Interval: 100 (100ms마다 전송) +``` + +**예시 2: 센서 데이터 전송** +``` +CAN ID: 0x200 +Extended: ☐ +DLC: 4 +Data: 00 00 00 64 (값 100을 표현) +Interval: 50 (50ms마다 전송) +``` + +**예시 3: 주기적 하트비트** +``` +CAN ID: 0x700 +Extended: ☐ +DLC: 1 +Data: AA +Interval: 1000 (1초마다 전송) +``` + +### 3. Graph 페이지 + +**URL:** `http://192.168.4.1/graph` + +#### 실시간 그래프 설정 + +**Signal 설정:** +1. **CAN ID:** 모니터링할 메시지 ID (16진수) +2. **Byte Offset:** 데이터에서 읽을 위치 (0~7) +3. **Data Type:** 데이터 형식 선택 + - `uint8`: 부호 없는 8비트 정수 (0~255) + - `int8`: 부호 있는 8비트 정수 (-128~127) + - `uint16_le`: 리틀 엔디언 16비트 + - `uint16_be`: 빅 엔디언 16비트 + - `int16_le`: 부호 있는 16비트 LE + - `int16_be`: 부호 있는 16비트 BE + - `uint32_le`: 리틀 엔디언 32비트 + - `uint32_be`: 빅 엔디언 32비트 + - `float_le`: IEEE 754 float LE +4. **Scale:** 스케일 계수 (예: 0.1) +5. **Offset:** 오프셋 값 (예: -40) +6. **Label:** 그래프 레이블 (예: "Engine RPM") +7. **Color:** 그래프 선 색상 + +**공식:** `Value = (Raw × Scale) + Offset` + +#### 그래프 제어 + +**➕ Add Signal** +- 새 신호 추가 (최대 20개) + +**🗑️ Remove Signal** +- 신호 삭제 + +**Clear Graph** +- 그래프 데이터 초기화 + +**Time Window** +- 표시할 시간 범위 설정 (초) +- 기본값: 30초 + +#### 사용 예시 + +**예시 1: 엔진 RPM 모니터링** +``` +CAN ID: 0x316 +Byte Offset: 0 +Data Type: uint16_be +Scale: 0.25 +Offset: 0 +Label: Engine RPM +Color: #FF0000 +→ 결과: RPM = (Raw × 0.25) + 0 +``` + +**예시 2: 냉각수 온도** +``` +CAN ID: 0x329 +Byte Offset: 2 +Data Type: uint8 +Scale: 1 +Offset: -40 +Label: Coolant Temp (°C) +Color: #00FF00 +→ 결과: Temp = Raw - 40 +``` + +**예시 3: 차량 속도** +``` +CAN ID: 0x280 +Byte Offset: 4 +Data Type: uint16_le +Scale: 0.01 +Offset: 0 +Label: Vehicle Speed (km/h) +Color: #0000FF +→ 결과: Speed = Raw × 0.01 +``` + +--- + +## CAN 데이터 로깅 + +### 로깅 시작 + +1. **WiFi 연결 확인** +2. **웹 인터페이스 접속** +3. **SD 카드 상태 확인** (✓ 표시) +4. **CAN 속도 설정** (차량/장비에 맞게) +5. **"Start Logging" 버튼 클릭** + +### 로그 파일 형식 + +**파일명 규칙:** +``` +can_YYYYMMDD_HHMMSS.bin + +예시: +can_20250123_143052.bin +→ 2025년 1월 23일 14시 30분 52초 생성 +``` + +**바이너리 구조:** +```c +struct CANMessage { + uint64_t timestamp_us; // 마이크로초 타임스탬프 (8바이트) + uint32_t id; // CAN ID (4바이트) + uint8_t dlc; // 데이터 길이 (1바이트) + uint8_t data[8]; // 데이터 (8바이트) +} __attribute__((packed)); // 총 21바이트 +``` + +### 저장 용량 계산 + +**계산식:** +``` +파일 크기 (MB) = (메시지 수 × 21 바이트) / 1,048,576 + +예시: +- 1,000,000 메시지 = 약 20 MB +- 100 msg/s × 3600초 (1시간) = 약 7.6 MB +- 1,000 msg/s × 3600초 (1시간) = 약 76 MB +``` + +**SD 카드 용량별 저장 시간:** +| 카드 용량 | 100 msg/s | 500 msg/s | 1,000 msg/s | +|-----------|-----------|-----------|-------------| +| 4GB | 약 520시간 | 약 104시간 | 약 52시간 | +| 8GB | 약 1,040시간 | 약 208시간 | 약 104시간 | +| 16GB | 약 2,080시간 | 약 416시간 | 약 208시간 | + +### 로깅 성능 + +**최대 처리량:** +- **CAN 1Mbps:** 초당 약 7,000 메시지 +- **버퍼 크기:** 1,000 메시지 큐 +- **파일 버퍼:** 8KB (약 380 메시지) + +⚠️ **주의:** +- 메시지가 너무 많으면 큐가 가득 찰 수 있습니다 +- "Queue Full" 경고 시 더 빠른 SD 카드 사용 +- 로깅 중 웹 페이지 접속을 최소화하세요 + +### 로깅 중지 및 파일 저장 + +1. **"Stop Logging" 버튼 클릭** +2. 버퍼의 남은 데이터가 자동으로 저장됨 +3. 파일이 닫히고 SD 카드에 기록 완료 +4. "View Files" 버튼으로 확인 가능 + +💡 **자동 저장:** +- 8KB 버퍼가 가득 차면 자동으로 SD 카드에 쓰기 +- 전원이 꺼져도 버퍼 손실 최소화 (최대 380 메시지) + +--- + +## CAN 메시지 송신 + +### 기본 송신 + +**단계:** +1. `/transmit` 페이지 이동 +2. 송신할 슬롯 선택 (Slot 0~19) +3. CAN ID 입력 (16진수, 예: 0x123) +4. DLC 설정 (0~8) +5. Data 입력 (16진수, 공백으로 구분) +6. Interval 설정 (밀리초) +7. "Save Slot" 클릭 + +**예시:** +``` +Slot: 0 +CAN ID: 0x123 +Extended: ☐ +DLC: 4 +Data: 11 22 33 44 +Interval: 100 +→ 100ms마다 ID 0x123으로 [11 22 33 44] 전송 +``` + +### 주기적 송신 + +**활용 사례:** + +**1. ECU 시뮬레이션** +- 가상 센서 데이터 생성 +- ECU 응답 테스트 +- 프로토콜 검증 + +**2. 게이트웨이 기능** +- 다른 CAN 네트워크로 브릿지 +- 메시지 변환 및 전달 +- 네트워크 라우팅 + +**3. 진단 및 테스트** +- 특정 ID에 대한 응답 확인 +- 스트레스 테스트 (고속 전송) +- 버스 점유율 테스트 + +### Extended ID (확장 ID) + +**Standard ID (11비트):** +- 범위: 0x000 ~ 0x7FF (0 ~ 2047) +- 일반적으로 사용 + +**Extended ID (29비트):** +- 범위: 0x00000000 ~ 0x1FFFFFFF +- Extended 체크박스 활성화 +- J1939, CANopen 등에서 사용 + +### 송신 상태 모니터링 + +**상단 표시:** +``` +📤 Total TX: 12,543 messages +``` + +- 시작 후 총 송신 메시지 수 +- 초당 1회 업데이트 +- 모든 슬롯의 합계 + +### 송신 중지 + +**개별 중지:** +- 해당 슬롯의 "Delete" 버튼 클릭 + +**전체 중지:** +- "Stop All" 버튼 클릭 +- 모든 슬롯 비활성화 + +⚠️ **주의:** +- 송신 설정은 ESP32 재부팅 시 초기화됩니다 +- 과도한 송신은 버스 점유율을 높일 수 있습니다 +- 안전에 영향을 주는 실제 차량에서는 주의하세요 + +--- + +## 그래프 분석 + +### 실시간 데이터 시각화 + +**Graph 페이지 특징:** +- 실시간 웹소켓 업데이트 +- 최대 20개 신호 동시 표시 +- 자동 스케일링 +- 시간축 조정 가능 + +### 신호 추가 및 설정 + +**Step 1: CAN ID 결정** +- 모니터 페이지에서 분석할 ID 확인 +- 예: 엔진 RPM은 보통 0x316 + +**Step 2: 데이터 위치 파악** +- DBC 파일 또는 매뉴얼 참조 +- 바이트 오프셋 확인 (0부터 시작) + +**Step 3: 데이터 타입 선택** +- 센서에 맞는 타입 선택 +- 엔디언 확인 (대부분 빅 엔디언) + +**Step 4: 스케일/오프셋 설정** +- Raw 값을 실제 단위로 변환 +- 공식 확인: `Value = (Raw × Scale) + Offset` + +### 데이터 타입 가이드 + +| 타입 | 크기 | 범위 | 용도 | +|------|------|------|------| +| uint8 | 1 | 0~255 | 온도, 백분율 | +| int8 | 1 | -128~127 | 상대 값 | +| uint16_le | 2 | 0~65535 | RPM, 속도 (LE) | +| uint16_be | 2 | 0~65535 | RPM, 속도 (BE) | +| int16_le | 2 | -32768~32767 | 가속도 (LE) | +| int16_be | 2 | -32768~32767 | 가속도 (BE) | +| uint32_le | 4 | 0~4,294,967,295 | 카운터 (LE) | +| uint32_be | 4 | 0~4,294,967,295 | 카운터 (BE) | +| float_le | 4 | IEEE 754 | 정밀 센서 | + +### 실전 예시 + +**자동차 데이터 분석:** + +**1. 엔진 RPM** +``` +CAN ID: 0x316 +Byte: 0-1 +Type: uint16_be +Scale: 0.25 +Offset: 0 +공식: RPM = Raw × 0.25 +예: Raw=0x1388 (5000) → 1250 RPM +``` + +**2. 차량 속도** +``` +CAN ID: 0x280 +Byte: 4-5 +Type: uint16_le +Scale: 0.01 +Offset: 0 +공식: Speed = Raw × 0.01 +예: Raw=0x1388 (5000) → 50.00 km/h +``` + +**3. 냉각수 온도** +``` +CAN ID: 0x329 +Byte: 2 +Type: uint8 +Scale: 1 +Offset: -40 +공식: Temp = Raw - 40 +예: Raw=0x64 (100) → 60°C +``` + +**4. 연료량** +``` +CAN ID: 0x3B7 +Byte: 0 +Type: uint8 +Scale: 0.4 +Offset: 0 +공식: Fuel = Raw × 0.4 +예: Raw=0x64 (100) → 40 리터 +``` + +### 그래프 해석 + +**정상 패턴:** +- 부드러운 곡선 +- 예측 가능한 변화 +- 정의된 범위 내 + +**이상 패턴:** +- 급격한 스파이크 +- 값의 급변 +- 범위 이탈 +- 0 또는 최대값 고정 + +**트러블슈팅:** +- 값이 이상하면 Scale/Offset 재확인 +- 선이 표시되지 않으면 CAN ID 확인 +- 업데이트가 없으면 메시지 수신 여부 확인 + +--- + +## 데이터 다운로드 + +### 파일 목록 확인 + +1. 메인 페이지에서 **"View Files"** 버튼 클릭 +2. 팝업 창에 로그 파일 목록 표시 + +**표시 정보:** +``` +can_20250123_143052.bin (12.5 MB) +can_20250123_120015.bin (8.2 MB) +can_20250122_183045.bin (25.1 MB) +``` + +### 파일 다운로드 + +**방법 1: 웹 인터페이스** +1. 파일명 옆의 **"Download"** 버튼 클릭 +2. 브라우저의 다운로드 폴더에 저장 + +**방법 2: SD 카드 직접 읽기** +1. ESP32의 전원을 끕니다 +2. SD 카드를 분리합니다 +3. PC의 카드 리더기에 삽입 +4. 파일 탐색기에서 복사 + +💡 **권장:** 방법 2가 더 빠르고 안정적입니다 (대용량 파일) + +### 데이터 분석 도구 + +**Python 예제 코드:** + +```python +import struct + +def read_can_log(filename): + """CAN 로그 파일을 읽어 파싱""" + messages = [] + + with open(filename, 'rb') as f: + while True: + data = f.read(21) # 21바이트 읽기 + if len(data) < 21: + break + + # 구조체 언팩 + timestamp_us, can_id, dlc = struct.unpack('