I2C CAN-BUS Module - Example code compile errors

Hi, I’m trying to use the I2C CAN-BUS Module to connect to a vehicle. To get started, I’m using the provided “getRPM” sketch. (the same problems happen with the other examples as well).
Upon compile, I get the following errors:

In file included from <some path> \libraries\Seeed I2C_CAN_Arduino-main\Longan_I2C_CAN_Arduino.h:5:0,
                 from <some path> \libraries\Seeed I2C_CAN_Arduino-main\Longan_I2C_CAN_Arduino.cpp:1:
C:\Users\ <user name> \AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src/Wire.h: In member function 'bool I2C_CAN::IIC_CAN_GetReg(unsigned char, int, unsigned char*)':
C:\Users\ <user name> \AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src/Wire.h:68:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)
     uint8_t requestFrom(int, int);
C:\Users\ <user name> \AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire\src/Wire.h:65:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)
     uint8_t requestFrom(uint8_t, uint8_t);

Any idea what the problem is?
Here is the code for the example sketch:

    Loovee, Longan Labs 2022

    send id: 0x7df
      dta: 0x02, 0x01, PID_CODE, 0, 0, 0, 0, 0

    From id: 0x7E9 or 0x7EA or 0x7EB
      dta: len, 0x41, PID_CODE, byte0, byte1(option), byte2(option), byte3(option), byte4(option)


#include <Wire.h>
#include "Longan_I2C_CAN_Arduino.h"

I2C_CAN CAN(0x25);                                    // Set I2C Address

#define PID_ENGIN_PRM       0x0C
#define PID_VEHICLE_SPEED   0x0D
#define PID_COOLANT_TEMP    0x05

#define CAN_ID_PID          0x7DF

void set_mask_filt()
    // set mask, set both the mask to 0x3ff

    CAN.init_Mask(0, 0, 0x7FC);
    CAN.init_Mask(1, 0, 0x7FC);

    // set filter, we can receive id from 0x04 ~ 0x09

    CAN.init_Filt(0, 0, 0x7E8);                 
    CAN.init_Filt(1, 0, 0x7E8);

    CAN.init_Filt(2, 0, 0x7E8);
    CAN.init_Filt(3, 0, 0x7E8);
    CAN.init_Filt(4, 0, 0x7E8); 
    CAN.init_Filt(5, 0, 0x7E8);

void sendPid(unsigned char __pid) {
    unsigned char tmp[8] = {0x02, 0x01, __pid, 0, 0, 0, 0, 0};
    CAN.sendMsgBuf(CAN_ID_PID, 0, 8, tmp);

bool getRPM(int *r)
    unsigned long __timeout = millis();

    while(millis()-__timeout < 1000)      // 1s time out
        unsigned char len = 0;
        unsigned char buf[8];

        if (CAN_MSGAVAIL == CAN.checkReceive()) {                // check if get data
            CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

            if(buf[1] == 0x41)
                *r = (256*buf[3]+buf[4])/4;
                return 1;

    return 0;

void setup() 
    while (CAN_OK != CAN.begin(CAN_500KBPS)) {             // init can bus : baudrate = 500k
        Serial.println("CAN init fail, retry...");
    Serial.println("CAN init ok!");

void loop() {

    int __rpm = 0;

    int ret = getRPM(&__rpm);

        Serial.print("Engin Speed: ");
        Serial.println(" rpm");
    }else Serial.println("get Engin Speed Fail...");



Hello, which board are you mentioned? This one for Raspberry Pi: 2 Channel CAN BUS FD Shield for Raspberry Pi | Seeed Studio Wiki or this one for arduino: CAN-BUS Shield V1.2 | Seeed Studio Wiki? I can not get it from your code

Sorry for the slow reply, I’m away on vacation.
It is the I2c Can module, SKU# 113020111.


For the device of 113020111 we recommand you to use the library we provided here: GitHub - Seeed-Studio/Seeed_Arduino_CAN: Seeed Arduino CAN-BUS library - MCP2518FD&MCP2515&MCP2551, wiki is here: CAN-BUS Shield V1.2 | Seeed Studio Wiki, now we cannot ensure feasibility for this third-party library