From b1ed03cf56c8aad20c18d5075251b41a7688ec6d Mon Sep 17 00:00:00 2001 From: byun Date: Sat, 24 Jan 2026 17:35:28 +0000 Subject: [PATCH] mcp2515 8mhz, websocket 500ms, --- ESP32_CAN_Logger-a.ino | 46 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/ESP32_CAN_Logger-a.ino b/ESP32_CAN_Logger-a.ino index f52336c..7fe9f81 100644 --- a/ESP32_CAN_Logger-a.ino +++ b/ESP32_CAN_Logger-a.ino @@ -230,14 +230,14 @@ SPIClass hspi(HSPI); // - 하드웨어에 16MHz 크리스탈 장착 시: MCP_16MHZ // - 하드웨어에 8MHz 크리스탈 장착 시: MCP_8MHZ // -#define MCP_CRYSTAL MCP_16MHZ // ⭐ 16MHz 크리스탈 (1 Mbps 권장) -// #define MCP_CRYSTAL MCP_8MHZ // 8MHz 크리스탈 (500 Kbps까지) +//#define MCP_CRYSTAL MCP_16MHZ // ⭐ 16MHz 크리스탈 (1 Mbps 권장) +#define MCP_CRYSTAL MCP_8MHZ // 8MHz 크리스탈 (500 Kbps까지) // SPI 속도: 20MHz (MCP2515 최대 속도와 균형) // 10MHz: 안정적이지만 느림 // 20MHz: 권장 (고속 + 안정성) // 25MHz: 불안정할 수 있음 -MCP2515 mcp2515(HSPI_CS, 20000000, &hspi); +MCP2515 mcp2515(HSPI_CS, 40000000, &hspi); HardwareSerial SerialComm(1); // UART1 HardwareSerial Serial2Comm(2); // ⭐ UART2 추가 WebServer server(80); @@ -391,15 +391,15 @@ void resetMCP2515() { delay(10); // 6. 필터/마스크 설정 (모든 메시지 수신) - Serial.println(" 4. 필터 설정 (모든 메시지 수신)..."); - mcp2515.setFilterMask(MCP2515::MASK0, false, 0x000); - mcp2515.setFilterMask(MCP2515::MASK1, false, 0x000); - mcp2515.setFilter(MCP2515::RXF0, false, 0x000); - mcp2515.setFilter(MCP2515::RXF1, false, 0x000); - mcp2515.setFilter(MCP2515::RXF2, false, 0x000); - mcp2515.setFilter(MCP2515::RXF3, false, 0x000); - mcp2515.setFilter(MCP2515::RXF4, false, 0x000); - mcp2515.setFilter(MCP2515::RXF5, false, 0x000); + Serial.println(" 4. 필터 설정 (Standard + Extended ID 모두 수신)..."); + mcp2515.setFilterMask(MCP2515::MASK0, true, 0x00000000); // ⭐ false → true (Extended ID 지원) + mcp2515.setFilterMask(MCP2515::MASK1, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF0, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF1, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF2, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF3, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF4, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF5, true, 0x00000000); // ⭐ false → true delay(10); // 7. 모드 설정 (마지막에!) @@ -2885,7 +2885,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) // Web Update Task // ======================================== void webUpdateTask(void *parameter) { - const TickType_t xDelay = pdMS_TO_TICKS(100); // ⭐ 200ms → 100ms (더 빠른 업데이트) + const TickType_t xDelay = pdMS_TO_TICKS(500); // ⭐ 100ms → 500ms (CPU 부하 감소) // 🆕 초기화 대기 단축 (부팅 직후 안정화) vTaskDelay(pdMS_TO_TICKS(500)); // ⭐ 2000ms → 500ms (빠른 연결) @@ -3238,15 +3238,15 @@ void setup() { delay(10); // 5. 필터/마스크 설정 (모든 메시지 수신) - Serial.println(" 4. 필터 설정 (모든 메시지 수신)..."); - mcp2515.setFilterMask(MCP2515::MASK0, false, 0x000); - mcp2515.setFilterMask(MCP2515::MASK1, false, 0x000); - mcp2515.setFilter(MCP2515::RXF0, false, 0x000); - mcp2515.setFilter(MCP2515::RXF1, false, 0x000); - mcp2515.setFilter(MCP2515::RXF2, false, 0x000); - mcp2515.setFilter(MCP2515::RXF3, false, 0x000); - mcp2515.setFilter(MCP2515::RXF4, false, 0x000); - mcp2515.setFilter(MCP2515::RXF5, false, 0x000); + Serial.println(" 4. 필터 설정 (Standard + Extended ID 모두 수신)..."); + mcp2515.setFilterMask(MCP2515::MASK0, true, 0x00000000); // ⭐ false → true (Extended ID 지원) + mcp2515.setFilterMask(MCP2515::MASK1, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF0, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF1, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF2, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF3, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF4, true, 0x00000000); // ⭐ false → true + mcp2515.setFilter(MCP2515::RXF5, true, 0x00000000); // ⭐ false → true delay(10); // 6. 수신 버퍼 비우기 (Configuration 모드에서) @@ -3695,7 +3695,7 @@ void setup() { // - SEQ: 시퀀스 재생 // - MONITOR: 상태 모니터링 xTaskCreatePinnedToCore(canRxTask, "CAN_RX", 12288, NULL, 20, &canRxTaskHandle, 1); // ⭐ 8KB → 12KB, Pri 24 (최고) - xTaskCreatePinnedToCore(webUpdateTask, "WEB_UPDATE", 12288, NULL, 16, &webTaskHandle, 1); // ⭐ Core 0 → 1, Pri 4 (SD와 분리) + xTaskCreatePinnedToCore(webUpdateTask, "WEB_UPDATE", 12288, NULL, 4, &webTaskHandle, 1); // ⭐ Core 0 → 1, Pri 4 (SD와 분리) xTaskCreatePinnedToCore(txTask, "TX", 4096, NULL, 3, NULL, 1); // Pri 3 xTaskCreatePinnedToCore(sequenceTask, "SEQ", 4096, NULL, 2, NULL, 1); // Pri 2 xTaskCreatePinnedToCore(sdMonitorTask, "SD_MONITOR", 4096, NULL, 1, NULL, 1); // Pri 1