Hobbyist & DIY Enthusiast Solution
Dual CAN.
One Clean Design.
Bring dual CAN power to your garage projects.
Designed with two fully independent CAN networks in a compact form factor, this board is ideal for building CAN gateways, data loggers, passthroughs, protocol analyzers, and isolated communication workflows.
Everything you need
Everything you need for reliable CAN communication
Automotive Ready
OBDII connector with ISO 11898-2 compliance. Supports 12V automotive sources up to 20V input.
Power Efficient
Integrated 3.3V step-down converter with 570kHz switching. Thermal and transient protection included.
Peace of mind
Passive read mode, thermal shutdown, EMI/ESD protection. Cross-wire protection for reliable communication.
Flexible Wiring
Use a OBDII connector or a standard 2.54mm 6-pin connector like JST or Dupont. Pick the connector that works for you.
ESP32C6 Powered
Designed specifically for Seeed Studio XIAO ESP32C6. This module is ideal for compact gateways, take advantage its Wi-Fi 6, BLE 5.0, Zigbee, and Thread.
Easy Integration
Arduino IDE support, Espressif IDF compatible. Works with FirmOTA.com. No external CAN libraries required for basic operations.
Easy Integration
Simple firmware development with minimal code for reliable CAN communication, powered by the ESP32C6’s built-in TWAI driver.
Clear. Simple. Code.
#include <stdio.h> #include "driver/twai.h" #define CAN0_TX_PIN GPIO_NUM_22 #define CAN0_RX_PIN GPIO_NUM_23 void app_main(void) { // 1. Configure CAN0   twai_handle_t can0_handle = NULL;   twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT_V2(0, CAN0_TX_PIN, CAN0_RX_PIN, TWAI_MODE_NORMAL);   twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();   twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL(); // 2. Install driver   if (twai_driver_install_v2(&g_config, &t_config, &f_config, &can0_handle) == ESP_OK)   {     twai_start();     printf("CAN0 started!\n");   } // 3. Simple loop to receive messages   twai_message_t rx_msg;   while (1)   {     if (twai_receive(&rx_msg, pdMS_TO_TICKS(100)) == ESP_OK)     {       printf("Received CAN message: ID=0x%X DLC=%d Data=", rx_msg.identifier, rx_msg.data_length_code);       for (int i = 0; i < rx_msg.data_length_code; i++)       {         printf("%02X ", rx_msg.data[i]);       }       printf("\n");     }   } }
Plus, One-Click No-Code Firmware Flashing
Visit FirmOTA.com platform for browser-based firmware flashing. No programming environment required. Get up and running in minutes with ready-to-use configurations for SavvyCAN, SLCAN, ESPNow, Panda, and more [Experimental].
Ready to Start
Documentation and API references available. Follow step-by-step guides for quick assemble and get started.
See the sample code to jump start your development.
Designed for ESP32C6
Meet the XIAO ESP32C6. A tiny, Matter-ready wireless MCU board that pairs naturally with this DuoCAN shield workflow for compact gateways.
Seeed Studio XIAO
ESP32C6 RISC-V
Integrated security and on-chip encryption support
Extended Range
Use the built-in antenna, or connect an UFL external antenna to extend the range even further
Wireless connectivity
2.4GHz Wi-Fi 6, Bluetooth LE, Zigbee, Thread in one board
Product showcase
Technical specifications
Key performance metrics and capabilities



Easy pin mapping
The pinout diagram is printed directly on the back of the shield for easy integration. Both the OBDII connector and the 6-pin 2.54 mm Dupont connector are clearly labeled.
OBDII Connector
- Pin 6: CAN_0 High
- Pin 14: CAN_0 Low
- Pin 16: Power (+)
- Pin 4: Power (-)
JST/Dupont 2.54mm 6-pin Socket
- Power (+)
- Power (-)
- CAN_1 Low
- CAN_1 High
- CAN_0 Low
- CAN_0 High













