MCP2515 CAN Controller Driver for Arduino

Overview

MCP2515 CAN Controller Library for Arduino

Compatibility with the ACAN library

This library is fully compatible with the Teensy 3.x ACAN library https://github.com/pierremolinaro/acan, it uses a very similar API and the same CANMessage class for handling messages.

ACAN2515 library description

ACAN2515 is a driver for the MCP2515 CAN Controller. It runs on any Arduino compatible board.

You can choose any frequency for your MCP2515, the actual frequency is a parameter of the library.

The driver supports many bit rates: for a 16 MHz quartz, the CAN bit timing calculator finds settings for standard 62.5 kbit/s, 125 kbit/s, 250 kbit/s, 500 kbit/s, 1 Mbit/s, but also for an exotic bit rate as 727 kbit/s. If the desired bit rate cannot be achieved, the begin method does not configure the hardware and returns an error code.

Driver API is fully described by the PDF file in the extras directory.

Demo Sketch

The demo sketch is in the examples/LoopBackDemo directory.

Configuration is a four-step operation.

  1. Instanciation of the settings object : the constructor has one parameter: the wished CAN bit rate. The settings is fully initialized.
  2. You can override default settings. Here, we set the mRequestedMode property to true, enabling to run demo code without any additional hardware (no CAN transceiver needed). We can also for example change the receive buffer size by setting the mReceiveBufferSize property.
  3. Calling the begin method configures the driver and starts CAN bus participation. Any message can be sent, any frame on the bus is received. No default filter to provide.
  4. You check the errorCode value to detect configuration error(s).
static const byte MCP2515_CS  = 20 ; // CS input of MCP2515, adapt to your design
static const byte MCP2515_INT = 37 ; // INT output of MCP2515, adapt to your design

ACAN2515 can (MCP2515_CS, SPI, MCP2515_INT) ; // You can use SPI2, SPI3, if provided by your microcontroller

const uint32_t QUARTZ_FREQUENCY = 16 * 1000 * 1000 ; // 16 MHz

void setup () {
  Serial.begin (9600) ;
  while (!Serial) {}
  Serial.println ("Hello") ;
  ACAN2515Settings settings (QUARTZ_FREQUENCY, 125 * 1000) ; // 125 kbit/s
  settings.mRequestedMode = ACAN2515Settings::LoopBackMode ; // Select loopback mode
  const uint16_t errorCode = can.begin (settings, [] { can.isr () ; }) ;
  if (0 == errorCode) {
    Serial.println ("Can ok") ;
  }else{
    Serial.print ("Error Can: 0x") ;
    Serial.println (errorCode, HEX) ;
  }
}

Now, an example of the loop function. As we have selected loop back mode, every sent frame is received.

static uint32_t gSendDate = 0 ;
static uint32_t gSentCount = 0 ;
static uint32_t gReceivedCount = 0 ;

void loop () {
  CANMessage message ;
  if (gSendDate < millis ()) {
    message.id = 0x542 ;
    const bool ok = can.tryToSend (message) ;
    if (ok) {
      gSendDate += 2000 ;
      gSentCount += 1 ;
      Serial.print ("Sent: ") ;
      Serial.println (gSentCount) ;
    }
  }
  if (can.receive (message)) {
    gReceivedCount += 1 ;
    Serial.print ("Received: ") ;
    Serial.println (gReceivedCount) ;
  }
}

CANMessage is the class that defines a CAN message. The message object is fully initialized by the default constructor. Here, we set the id to 0x542 for sending a standard data frame, without data, with this identifier.

The can.tryToSend tries to send the message. It returns true if the message has been sucessfully added to the driver transmit buffer.

The gSendDate variable handles sending a CAN message every 2000 ms.

can.receive returns true if a message has been received, and assigned to the messageargument.

Use of Optional Reception Filtering

The MCP2515 CAN Controller implements two acceptance masks and six acceptance filters. The driver API enables you to fully manage these registers.

For example (loopbackUsingFilters sketch):

  ACAN2515Settings settings (QUARTZ_FREQUENCY, 125 * 1000) ;
  settings.mRequestedMode = ACAN2515Settings::LoopBackMode ; // Select loopback mode
  const ACAN2515Mask rxm0 = extended2515Mask (0x1FFFFFFF) ; // For filter #0 and #1
  const ACAN2515Mask rxm1 = standard2515Mask (0x7F0, 0xFF, 0) ; // For filter #2 to #5
  const ACAN2515AcceptanceFilter filters [] = {
    {extended2515Filter (0x12345678), receive0},
    {extended2515Filter (0x18765432), receive1},
    {standard2515Filter (0x560, 0x55, 0), receive2}
  } ;
  const uint16_t errorCode = can.begin (settings, [] { can.isr () ; }, rxm0, rxm1, filters, 3) ;

These settings enable the acceptance of extended frames whose identifier is 0x12345678 or 0x18765432, and data frames whose identifier is 0x560 and first data byte, if any, is 0x55.

The receive0, receive1, receive2 functions are call back functions, handled by the can.dispatchReceivedMessage function:

void loop () {
  can.dispatchReceivedMessage () ; // Do not use can.receive any more
  ...
}
Comments
  • CAN extended  send,but not receiv

    CAN extended send,but not receiv

    ` CANMessage Message ; Message.ext=true;

    if (gBlinkLedDate < millis ()) { gBlinkLedDate += 1000 ; digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN)) ; Message.id = 0x542; const bool ok = can.tryToSend (Message) ; if (ok) { gSentFrameCount += 1 ; Serial.print ("Sent: ") ; Serial.println (gSentFrameCount) ; }else{ Serial.println ("Send failure") ; } } // if (can.available ()) { Message.ext=true; if (can.receive (Message)){ gReceivedFrameCount ++ ; Serial.println ("Received: ") ; Serial.print ("id: ");Serial.println (Message.id,HEX); Serial.print ("ext: ");Serial.println (Message.ext); Serial.print ("rtr: ");Serial.println (Message.rtr); Serial.print ("len: ");Serial.println (Message.len); Serial.print ("data: "); for(int x=0;x<Message.len;x++) { Serial.print(Message.data[x],HEX);Serial.print(":"); } Serial.println (""); Serial.println (gReceivedFrameCount) ; } }`

    standart frame work good (sending and receving) 29bit frame work sending but not receving can.available method return false and can.receive method return false

    opened by yuranikspb 24
  • kTooFarFromDesiredBitRate-issue with Arduino MKR Wifi 1010

    kTooFarFromDesiredBitRate-issue with Arduino MKR Wifi 1010

    Hello,

    I am using this MKR CAN Shield for an Arduino MKR Wifi 1010. When I try your example "LoopBackDemo.ino" I get the following error:

    Configuration error 0x1

    This has to with a kTooFarFromDesiredBitRate-issue. But I haven't changed anything on the code and the bitrate is set to:

    ACAN2515Settings settings (QUARTZ_FREQUENCY, 125UL * 1000UL) ;

    Can this be a problem with the CAN shield itself? I would expect that the LoopBackDemo-code should not give this error.

    Thanks in advance, Bart

    opened by mertensbart20 15
  • Test sketch block after 17 send messages

    Test sketch block after 17 send messages

    What did I do wrong within this sketch on arduino UNO? it will send only 17 meassages , then I have "failure" in the serial interface .

    < /* * */ #include <ACAN2515.h>

    static const byte MCP2515_CS = 10 ; // CS input of MCP2515 (adapt to your design) static const byte MCP2515_INT = 3 ; // INT output of MCP2515 (adapt to your design)

    ACAN2515 can (MCP2515_CS, SPI, MCP2515_INT) ;

    static const uint32_t QUARTZ_FREQUENCY = 8UL * 1000UL * 1000UL ; // 8 MHz

    void setup() {

    Serial.begin (38400) ;

    while (!Serial) { delay (50) ; digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN)) ; } SPI.begin () ;

    ACAN2515Settings settings (QUARTZ_FREQUENCY, 500UL * 1000UL) ; // CAN bit rate 500 kb/s const uint16_t errorCode = can.begin (settings, [] { can.isr () ; }) ; if (errorCode == 0) { Serial.print ("Bit Rate prescaler: ") ; Serial.println (settings.mBitRatePrescaler) ; Serial.print ("Propagation Segment: ") ; Serial.println (settings.mPropagationSegment) ; Serial.print ("Phase segment 1: ") ; Serial.println (settings.mPhaseSegment1) ; Serial.print ("Phase segment 2: ") ; Serial.println (settings.mPhaseSegment2) ; Serial.print ("SJW: ") ; Serial.println (settings.mSJW) ; Serial.print ("Triple Sampling: ") ; Serial.println (settings.mTripleSampling ? "yes" : "no") ; Serial.print ("Actual bit rate: ") ; Serial.print (settings.actualBitRate ()) ; Serial.println (" bit/s") ; Serial.print ("Exact bit rate ? ") ; Serial.println (settings.exactBitRate () ? "yes" : "no") ; Serial.print ("Sample point: ") ; Serial.print (settings.samplePointFromBitStart ()) ; Serial.println ("%") ; }else{ Serial.print ("Configuration error 0x") ; Serial.println (errorCode, HEX) ; } } static uint32_t gBlinkLedDate = 0 ; static uint32_t gReceivedFrameCount = 0 ; static uint32_t gSentFrameCount = 0 ; byte msg[8] = {0, 0, 0, 0, 0, 0, 0, 0};

    void loop() {

    byte msg[8] = { 12, 23, 33, 44, 55, 66, 77, 28};

    CANMessage frame ; frame.id = 31 ; frame.ext = true ; frame.rtr = false ; frame.idx = 0 ; frame.len = 8 ; for (int i=0 ; i<8 ; i++) { frame.data [i] = {msg[i]} ; }
    /* frame.data [0] = {egt[1]} ; frame.data [1] = {egt[2]} ; frame.data [2] = 33 ; frame.data [3] = 44 ; frame.data [4] = 55 ; frame.data [5] = 66 ; frame.data [6] = 77 ; frame.data [7] = 88 ;
    */
    if (gBlinkLedDate < millis ()) { gBlinkLedDate += 50 ; digitalWrite (LED_BUILTIN, !digitalRead (LED_BUILTIN)) ; const bool ok = can.tryToSend (frame) ; if (ok) { gSentFrameCount += 1 ; Serial.print ("Sent: ") ; Serial.println (gSentFrameCount) ; }else{ Serial.println ("Send failure") ; } } }

    opened by Mplex72 14
  • Info: ACAN2515 works fine on Raspberry Pi Pico

    Info: ACAN2515 works fine on Raspberry Pi Pico

    Pierre,

    Just to let you know that your library works fine on the Raspberry Pi Pico with the 'unofficial' core: https://github.com/earlephilhower/arduino-pico

    The Pico SPI peripherals can use any pins, and there are no defaults, so you need to explicitly set these before initialising the library. The Pico has two SPI peripherals, SPI and SPI1, so you could use either (or both).

    #include <SPI.h>
    
    static const byte PICO_INT = 1;
    static const byte PICO_SCK = 2;
    static const byte PICO_MOSI = 3;
    static const byte PICO_MISO = 4;
    static const byte PICO_CS = 5;
    
    // configure SPI pins
    SPI.setSCK(PICO_SCK);   // SCK
    SPI.setTX(PICO_MOSI);   // MOSI
    SPI.setRX(PICO_MISO);   // MISO
    SPI.setCS(PICO_CS);     // CS
    

    There was a minor bug in the core (NOT_AN_INTERRUPT was not #defined) but this has been fixed now.

    Let me know if you want to support this board explicitly and I'd be happy to test any changes.

    Work is in progress by the Arduino project on an 'official' core for the Pico.

    opened by obdevel 6
  • Filter RTR frames

    Filter RTR frames

    Hi, Pierre

    I got a question on RTR frames. I want to tell apart whether a received message is a RTR frame by the value of RTR bit. But when I sent a RTR frame with RTR bit == 1, and tried to use a filter to receive it, in the end the RTR bit of this received message becomes 0.

    Then I notice that in the ACAN2515 document, section 9.2 on page 20, it says :

    Filter remote and data frames. The MCP2515 filters do not handle the RTR bit: for example, you cannot specify you want to accept data frames and discard remote frames. This should be done by your code.

    Does that mean a filter will set the RTR bit to 0 automatically, even I set it to 1 before sending? If that is true, to tell apart a RTR frame, do I have to manually dispatch the received messages as decribed in section 8 on page 18?

    opened by Oulalaa 4
  • ACAN25215 avec le CAN-BUS shield seeedsstudio et Arduino Mega

    ACAN25215 avec le CAN-BUS shield seeedsstudio et Arduino Mega

    Bonjour Pierre,

    Je teste votre bibliothèque avec un shield seeeds et un Arduino UNO sans aucun problème. Mais je n'arrive pas avec un MEGA.

    Voici mes réglages

    `//—————————————————————————————————————————————————————————————————————————————— // ACAN2515 Demo in loopback mode //——————————————————————————————————————————————————————————————————————————————

    #include <ACAN2515.h> //—————————————————————————————————————————————————————————————————————————————— // MCP2515 connections: // - standard SPI pins for SCK, MOSI and MISO // - a digital output for CS // - interrupt input pin for INT //—————————————————————————————————————————————————————————————————————————————— // If you use CAN-BUS shield (http://wiki.seeedstudio.com/CAN-BUS_Shield_V2.0/) with Arduino Uno, // use B connections for MISO, MOSI, SCK, #9 or #10 for CS (as you want), // #2 or #3 for INT (as you want). //——————————————————————————————————————————————————————————————————————————————

    #ifdef ARDUINO_AVR_MEGA2560

    static const byte MCP2515_SCK = 52 ; // SCK input of MCP2515 static const byte MCP2515_SI = 51 ; // SI output of MCP2515 static const byte MCP2515_SO = 50 ; // S0 output of MCP2515

    static const byte MCP2515_CS = 53 ; // CS input of MCP2515 static const byte MCP2515_INT = 2 ; // INT output of MCP2515

    #endif

    #ifdef ARDUINO_AVR_UNO

    static const byte MCP2515_SCK = 13 ; // SCK input of MCP2515 static const byte MCP2515_SI = 11 ; // SI output of MCP2515 static const byte MCP2515_SO = 12 ; // S0 output of MCP2515

    static const byte MCP2515_CS = 10 ; // CS input of MCP2515 static const byte MCP2515_INT = 2 ; // INT output of MCP2515

    #endif`

    Merci pour votre aide.

    Christophe

    opened by BOBILLEChristophe 4
  • Default SPI on Pi Pico (RP2040)

    Default SPI on Pi Pico (RP2040)

    Wanting to use your library on a Pi Pico, sitting on a prebuilt circuit board that has an SPI device (MCP2515) on the 'default' SPI pins of the Pi Pico module (GPIO 16 - 19)

    Unfortunately, the 'standard' Arduino SPI library uses GPIO2 - GPIO5 - I've proved this by running an SPI 'loopback' test And I see your library uses this library <SPI.H> The default <SPI.H> doesn't appear to allow you to redefine the pins used

    Any idea how I can resolve this? (I'd rather not cut pcb tracks to re-work the physical pins)

    I did get the SPI test working on the 'default' pins using <mbed.h> instead of <SPI.H>, as <mbed.h> allows you to redefine the pins used, but the syntax of the SPI functions seems to be slightly different, and of course your library uses <SPI.H>, so I don't see how that helps

    If it's any use, here's the build info for the working test I mentioned using <SPI.H>

    ` PLATFORMPLATFORM: Raspberry Pi RP2040 (1.5.0) > Raspberry Pi Pico HARDWARE: RP2040 133MHz, 264KB RAM, 2MB Flash DEBUG: Current (cmsis-dap) External (cmsis-dap, jlink, raspberrypi-swd)
    PACKAGES:

    • framework-arduino-mbed 2.6.1
    • tool-rp2040tools 1.0.2
    • toolchain-gccarmnoneeabi 1.90201.191206 (9.2.1) `
    opened by david284 3
  • Request: expose error flag register

    Request: expose error flag register

    It would be very useful to be able to read the chip's error flag register (0x2D ?) This enables one to check for error states such as warning level, error passive, bus off, etc. A value of zero means 'no error' and the definitions of the individual bit values can be found in the datasheet.

    It is present in the MCP_CAN library as the getError() method.

    opened by obdevel 3
  • Can not receive EXT CAN

    Can not receive EXT CAN

    Can you check why This code can print standard can id but not ext can id. If I receive 11 bit ID then it can receive ok but if i receive 29 bit id then the loop function never print anything. Note that in my BUS have 11 bit ID and 29Bit ID too ` #include <ACAN2515.h> CANMessage canMsg_rx; static const byte MCP2515_CS1 = 10 ; // CS input of MCP2515 CAN1 static const byte MCP2515_INT1 = 2 ; // INT output of MCP2515 CAN1 ACAN2515 CAN1(MCP2515_CS1, SPI, MCP2515_INT1); static const uint32_t QUARTZ_FREQUENCY = 16UL * 1000UL * 1000UL; // 16 MHz void setup() { Serial.begin (115200) ; while (!Serial) { delay (50) ; } SPI.begin(); ACAN2515Settings settings (QUARTZ_FREQUENCY, 500 * 1000UL); settings.mTransmitBuffer0Size = 5 ; settings.mTransmitBuffer1Size = 0 ; settings.mTransmitBuffer2Size = 0 ; settings.mReceiveBufferSize = 5 ; settings.mRequestedMode = ACAN2515Settings::NormalMode; const uint16_t errorCode1 = CAN.begin(settings, [] {CAN.isr();}); if (errorCode1 != 0) { Serial.print ("Configuration CAN error 0x") ; Serial.println (errorCode1, HEX) ; } else { Serial.println ("Configuration CAN OK!") ; } }

    void loop() { if (CAN.receive(canMsg_rx)) { Serial.println(canMsg_rx.id, HEX); } }

    `

    opened by ngochoangimsat 3
  • RX0OVR bit gets stuck

    RX0OVR bit gets stuck

    Sometimes, under heavy receive load, the RX0OVR bit in the error flag register get 'stuck' on. The errorFlagRegister() method returns 64. It's difficult to reproduce reliably.

    RX0OVR: Receive Buffer 0 Overflow Flag bit Sets when a valid message is received for RXB0 and RX0IF (CANINTF[0]) = 1 - Must be reset by MCU

    It does coincide with a 'lost' message at the application level (I track a message sequence number in my code). Only a power cycle or grounding the reset pin will resolve it.

    I am not using interrupts and am polling frequently for new messages. Receive buffers = 8 but the high watermark is never above 2.

    Any thoughts ? Thanks.

    MCU is an AVR (1284P).

    opened by obdevel 2
  • Error and Wake-up interrupt handling

    Error and Wake-up interrupt handling

    Using this with MKR Zero and MKR Can Shield. My program freezes randomly without crashing. I've tested on SRAM overflow, memory corruption etc and everything should work fine.

    I'm currently suspecting it has todo with the ACAN2515::isr_core routine MCP2515 Datasheet says that one have to set every intflag to zero with BIT_MODIFY command. But in the isr_core routine if an Error Interrupt or Wake-Up Interrupt flag is set. It will never bet unset so the while loop will never exit.

    I've probably missed something on why you do that. But can you explain me on how the while loop in ACAN2515::isr_core will exit when Error or Wakeup Intflag is set?

    opened by framet 2
  • INT pin not working in LoopBackDemo example

    INT pin not working in LoopBackDemo example

    Hi Pierre

    I am trying to use your library for an MCP2515 connected to a Raspberry Pi Pico. Using your LoopBackDemo sketch (among others), it seems that the configuration of the MCP2515 runs fine.

    However, when it comes to transmitting and receiving frames, it only prints "Sent: 1" up to "Sent: 17". As you explain in the sketch's comments, this indicates to be a problem with the interrupt. I have checked the INT pin on the MCP2515 with an oscilloscope while running the sketch, and it doesn't generate an interrupt on that pin. Could there perhaps be something that is not configured correctly when the MCP2515 is initialised?

    I see that in the function internalBeginOperation() you write the value 0x1F to register CANINTE, which enables the TX and RX interrupts, so I would expect the interrupt to work when the frames are sent. However, this doesn't happen.

    My test is performed using a 12 MHz crystal and the Raspberry Pi Pico. The same test performed with an Arduino Due has the same result.

    What could be the cause of this?

    Thank you in advance.

    opened by wavejaco 6
  • can.tryToSend crashes when using rpi pico, with offical mbed rp2040 core

    can.tryToSend crashes when using rpi pico, with offical mbed rp2040 core

    I have a raspberry pi pico, using Arduino official mbed rp2040 core framework-arduino-mbed 2.6.1 tool-rp2040tools 1.0.2 When I test the 'generic' LoopBackDemo sketch, my pico crashes on the can.tryToSend call and the LED blinks 4 short and 4 long and repeat. (the "LoopBackDemoRaspberryPiPico" doesn't compile with the offical mbed core, it seems to use other 'SPI' commands)

    The "Configure ACAN2515" section runs fine and prints out the expected results (attached below)

    So, I'm assuming the SPI is talking to the MCP2515 just fine?

    If I comment out the can.tryToSend (with a true return) the loop runs fine

    I saw a similar previous issue here but that crashed at can.begin(), which isn't my issue (my code runs past this command), so although I tried their work around, not surprisingly it didn't help ` Any idea what I could try or what to look at to resolve this?

    Bit Rate prescaler: 4 Propagation Segment: 5 Phase segment 1: 5 Phase segment 2: 5 SJW: 4 Triple Sampling: yes Actual bit rate: 125000 bit/s Exact bit rate ? yes Sample point: 62% `

    opened by david284 2
  • ESP32 Some MCP2515 not response to ESP32

    ESP32 Some MCP2515 not response to ESP32

    I'm connecting 3 MCP2515 to esp32 each of which Initializing is done After that, some MCP2515 stops are available to esp32. I measure single CS and INT during not a response to esp32, CS always HIGH and INT always LOW.

    My setup // Init CAN SPI.begin();

    ACAN2515Settings settings1(QUARTZ_FREQUENCY, 500UL * 1000UL); // 500 kpbs
    ACAN2515Settings settings2(QUARTZ_FREQUENCY, 500UL * 1000UL); // 500 kpbs
    ACAN2515Settings settings3(QUARTZ_FREQUENCY, 500UL * 1000UL); // 500 kpbs
    
    settings1.mRequestedMode = ACAN2515Settings::NormalMode;
    settings1.mReceiveBufferSize = 100;
    uint16_t errorCode1 = can1.begin(settings1, []
                                     { can1.isr(); });
    
    delay(50);
    
    settings2.mRequestedMode = ACAN2515Settings::NormalMode;
    settings2.mReceiveBufferSize = 100;
    uint16_t errorCode2 = can2.begin(settings2, []
                                     { can2.isr(); });
    
    delay(50);
    
    settings3.mRequestedMode = ACAN2515Settings::NormalMode;
    settings3.mReceiveBufferSize = 100;
    uint16_t errorCode3 = can3.begin(settings3, []
                                     { can3.isr(); });
    
    delay(50);
    
    opened by UnknownPP 3
  • Sleep mode example

    Sleep mode example

    Firstly thank you for this library it is very very useful.

    I'm trying to understand the sleep function, would it be possible to add to your examples, that would be great.

    At the moment I put the transiever in standby then change the mode to sleep. I have also enabled the interrupt pins wake on CAN function.

    When there is traffic on the CAN the interrupt works, I then take the transiever out of standby and change the mode to normal. The return value from the changeModeOnTheFly function is 0, so appears good.

    I then use CAN tryandsend (which returns true) but nothing appears on the CAN bus where as it did before I put the unit into sleep.

    If I don't put the can transiever into stanby and only use sleep the same happens.

    When I come out of sleep mode the can recieve message appears to be constanlty fired as if the read register bit is not being cleared anymore....

    I could well be doing something wrong and thanks for any help.

    opened by joeholdsworth 0
  • can.begin crashes when using rpi pico, with offical mbed rp2040 board

    can.begin crashes when using rpi pico, with offical mbed rp2040 board

    Hi I have a raspberry pi pico, using Arduino offical mbed rp2040 board. When I test the LoopBackDemoRaspberryPiPICO sketch, my pico crashes and the LED blinks 4 short and 4 long and repeat. With some digging in(insert Serial.println into src/ACAN2515.cpp), I found that it crashes at the mSPI.beginTransaction (mSPISettings) ; line in fuction ACAN2515::beginWithoutFilterCheck, then I checked this line: mSPISettings (10UL * 1000UL * 1000UL, MSBFIRST, SPI_MODE0),, after reading the comment, I think maybe the "UL suffix" is incompatible with offical mbed rp2040 board, so I simply changed the frequency to 10000000, and uploaded the sketch, my pico never crashes! I don't know how to edit the cpp to adapt both AVR arduino and rpi pico, so I just report this bug. Thanks for your hardwork. qwec01

    opened by qwec01 1
Releases(2.1.1)
Owner
Pierre Molinaro
Pierre Molinaro
Arduino CAN driver for MCP2517FD CAN Controller (in CAN 2.0B mode)

MCP2517FD CAN Controller Library for Arduino (in CAN 2.0B mode) Compatibility with the other ACAN libraries This library is fully compatible with the

Pierre Molinaro 13 Dec 22, 2022
Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames.

107-Arduino-MCP2515 Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames. This library is prepared to interface easily

107-Systems 51 Nov 16, 2022
Distribution of Arduino driver for MCP2517FD CAN controller (CANFD mode)

MCP2517FD and MCP2518FD CAN Controller Library for Arduino (in CAN FD mode) Compatibility with the other ACAN libraries This library is fully compatib

Pierre Molinaro 31 Dec 21, 2022
Unified interface for selecting different implementations for communicating with a TM1637 LED controller chip on Arduino platforms

AceTMI Unified interface for communicating with a TM1637 LED controller chip on Arduino platforms. The code was initially part of the AceSegment libra

Brian Park 0 Feb 2, 2022
CAN Driver for Teensy 3.1 / 3.2, 3.5 and 3.6

CAN Library for Teensy 3.1 / 3.2, 3.5, 3.6 Compatibility with the ACANxxxx libraries This library is fully compatible with the MCP2515 CAN Controller

Pierre Molinaro 10 Dec 9, 2022
An implementation of a ANT driver for Arduino, Mbed and ESP-IDF

ant-arduino Arduino library for communicating with ANT radios, with support for nRF51 devices. This library Includes support for the majority of packe

Curtis Malainey 79 Dec 4, 2022
CAN / CANFD Arduino Library for Teensy 4.0

CAN Library for Teensy 4.0 / 4.1 It handles Controller Area Network (CAN) for CAN1, CAN2 and CAN3, and Controller Area Network with Flexible Data (CAN

Pierre Molinaro 12 Dec 9, 2022
Arduino Arduino library for the CloudStorage server project. The library provides easy access to server-stored values and operations.

Arduino-CloudStorage Arduino/ESP8266 library that allows you to easly store and retreive data from a remote (cloud) storage in a key/value fashion. Cl

Gil Maimon 7 Jan 30, 2022
Arduino library for making an IHC in or output module using an Arduino

Introduction This is an Arduino library for making an IHC in or output module using an Arduino. (IHC controller is a home automation controller made b

Jens Østergaard Nielsen 2 Mar 26, 2020
ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT Cloud

ArduinoIoTCloud What? The ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT

Arduino Libraries 64 Dec 16, 2022
Leonardo Modifier Keys Controller

Leonardo Modifier Keys Controller An Arduino Leonardo powered box that allows you to press the modifier keys of the computer. Description An USB devic

Generic Institute 1 May 23, 2022
ESP8266 MQTT Sharp-fu-y30 air purifier controller

ESP8266 MQTT Sharp-fu-y30 air purifier controller Disclaimer Note: if you decide to do those changes to your air purifier, you take all the responsibi

xis 2 Dec 6, 2022
Driver for Texas Instrument's ADS1115 analog to digital converter IC.

Driver for Texas Instrument's ADS1115 analog to digital converter IC. It's somewhat compatible with the ADS1113 and ADS1114 variants. More details in the official datasheet

Tamás Ruszka 0 Sep 27, 2021
An ESP32 CAN 2.0B library

CAN Library for ESP32 ACAN_ESP32 library description ACAN_ESP32 is a driver for the CAN module built into the ESP32 microcontroller. The driver suppor

Pierre Molinaro 11 Dec 9, 2022
Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages.

107-Arduino-NMEA-Parser Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages. This library

107-Systems 15 Jan 1, 2023
Arduino library for providing a convenient C++ interface for accessing UAVCAN.

107-Arduino-UAVCAN Arduino library for providing a convenient C++ interface for accessing UAVCAN (v1.0-beta) utilizing libcanard. This library works f

107-Systems 54 Jan 2, 2023
A RESTful environment for Arduino

aREST Overview A simple library that implements a REST API for Arduino & the ESP8266 WiFi chip. It is designed to be universal and currently supports

null 1.2k Dec 29, 2022
Arduino web server library.

aWOT Arduino web server library. Documentation 1. Getting started Hello World Basic routing Application generator Serving static files 2. Guide Routin

Lasse Lukkari 246 Jan 4, 2023
Arduino, esp32 and esp8266 library for ABB (ex PowerOne) Aurora Inverter, implement a full methods to retrieve data from the Inverter via RS-485

ABB Aurora protocol You can refer the complete documentation on my site ABB Aurora PV inverter library for Arduino, esp8266 and esp32 I create this li

Renzo Mischianti 22 Nov 22, 2022