Werktags vor 14:00 Uhr bestellt = am selben Tag versendet 30 Tage Widerrufsrecht 1 Jahr Garantie
← Zurück zur Übersicht

Schaltplan und Codebeispiel

So schließt du den CAN-Bus-Modul MCP2515 SPI 5V an einen Arduino UNO oder ESP32 an, mit einem Beispiel-Sketch, den du direkt hochladen kannst.

CAN-Bus-Kommunikation mit MCP2515

Verbindet ein MCP2515-CAN-Bus-Modul über hardware SPI mit einem Arduino Uno. Der Sketch initialisiert den CAN-Controller auf 500 kbps, sendet alle 2 Sekunden eine Test-CAN-Nachricht und gibt alle empfangenen Frames im Serial Monitor aus.

Anschlussplan: CAN-Bus-Modul MCP2515 SPI 5V an einem Arduino UNO
Anschlussplan · Zum Vergrößern klicken
Anschlusstabelle: CAN-Bus-Modul MCP2515 SPI 5V an einem Arduino UNO
Anschlusstabelle · Zum Vergrößern klicken
CAN_Bus_Communication_with_MCP2515.ino · kompiliert und getestet
/*
 * ==================================================================
 *  Generated by Codey.online  —  https://www.codey.online
 * ==================================================================
 *  Project   : CAN Bus Communication with MCP2515
 *  Board     : Arduino UNO (arduino:avr:uno)
 *  Parts     : CAN-bus module MCP2515 SPI 5V
 *  Libraries : mcp_can 1.5.1
 *
 *  Codey Online is an AI-powered browser IDE for Arduino and ESP32.
 *  Describe your project and Codey writes the code, draws the wiring
 *  diagram and uploads it to your board, straight from the browser.
 *  This code is free to use, modify and share, without warranty.
 * ==================================================================
 */

#include <SPI.h>
#include <mcp_can.h>

const byte CAN_CS_PIN = 10;
const byte CAN_INT_PIN = 2;

MCP_CAN CAN(CAN_CS_PIN);

unsigned long lastSend = 0;

void setup() {
  Serial.begin(115200);
  pinMode(CAN_INT_PIN, INPUT);

  // Initialize MCP2515 with standard 8MHz crystal at 500 kbps
  if (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.println(F("MCP2515 initialized successfully!"));
  } else {
    Serial.println(F("MCP2515 initialization failed!"));
    while (1);
  }

  CAN.setMode(MCP_NORMAL);
  Serial.println(F("CAN controller ready in normal mode."));
}

void loop() {
  // Check for received CAN messages
  if (CAN.checkReceive() == CAN_MSGAVAIL) {
    unsigned long rxId;
    byte len = 0;
    byte rxBuf[8];

    CAN.readMsgBuf(&rxId, &len, rxBuf);

    Serial.print(F("RX -> ID: 0x"));
    Serial.print(rxId, HEX);
    Serial.print(F(" DLC: "));
    Serial.print(len);
    Serial.print(F(" Data: "));
    for (byte i = 0; i < len; i++) {
      if (rxBuf[i] < 0x10) Serial.print('0');
      Serial.print(rxBuf[i], HEX);
      Serial.print(' ');
    }
    Serial.println();
  }

  // Send a test packet every 2 seconds
  if (millis() - lastSend >= 2000) {
    lastSend = millis();
    byte txData[4] = {0xDE, 0xAD, 0xBE, 0xEF};
    byte sndStat = CAN.sendMsgBuf(0x100, 0, 4, txData);

    if (sndStat == CAN_OK) {
      Serial.println(F("TX -> Sent frame (ID: 0x100, Data: DE AD BE EF)"));
    } else {
      Serial.println(F("TX -> Error sending message"));
    }
  }
}

Benötigte Bibliotheken: mcp_can 1.5.1

Wiring diagram and example code generated by Codey.online — https://www.codey.online

ESP32 CAN-Bus-Kommunikation mit MCP2515

Diese Schaltung verbindet einen ESP32 über SPI mit einem MCP2515 CAN-Bus-Modul und verwendet einen bidirektionalen 4-Kanal-Pegelwandler, um die 3.3V-Logik des ESP32 vor dem 5V-Modul zu schützen. Der Sketch initialisiert den CAN-Controller mit 500 kbps, sendet alle zwei Sekunden einen Test-CAN-Datenrahmen und gibt alle empfangenen CAN-Bus-Nachrichten im Serial Monitor aus.

Anschlussplan: CAN-Bus-Modul MCP2515 SPI 5V an einem ESP32 DevKit V1
Anschlussplan · Zum Vergrößern klicken
Anschlusstabelle: CAN-Bus-Modul MCP2515 SPI 5V an einem ESP32 DevKit V1
Anschlusstabelle · Zum Vergrößern klicken
ESP32_CAN_Bus_Communication_with_MCP2515.ino · kompiliert und getestet
/*
 * ==================================================================
 *  Generated by Codey.online  —  https://www.codey.online
 * ==================================================================
 *  Project   : ESP32 CAN Bus Communication with MCP2515
 *  Board     : ESP32 DEVKIT V1 (esp32:esp32:esp32doit-devkit-v1)
 *  Parts     : CAN-bus module MCP2515 SPI 5V
 *  Libraries : mcp_can 1.5.1
 *
 *  Codey Online is an AI-powered browser IDE for Arduino and ESP32.
 *  Describe your project and Codey writes the code, draws the wiring
 *  diagram and uploads it to your board, straight from the browser.
 *  This code is free to use, modify and share, without warranty.
 * ==================================================================
 */

#include <SPI.h>
#include <mcp_can.h>

const int CAN_CS_PIN = 5;
MCP_CAN CAN0(CAN_CS_PIN);

void setup() {
  Serial.begin(115200);
  while (!Serial);

  // Initialize MCP2515 running at 8MHz clock and 500kbps CAN baud rate
  if (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK) {
    Serial.println("MCP2515 Initialized Successfully!");
  } else {
    Serial.println("Error Initializing MCP2515...");
  }

  CAN0.setMode(MCP_NORMAL);
}

void loop() {
  // Prepare sample data payload (8 bytes)
  byte data[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
  
  // Send CAN message with standard ID 0x100
  byte sndStat = CAN0.sendMsgBuf(0x100, 0, 8, data);
  if (sndStat == CAN_OK) {
    Serial.println("CAN Message Sent Successfully!");
  } else {
    Serial.println("Error Sending CAN Message...");
  }

  // Check for incoming CAN messages
  if (CAN0.checkReceive() == CAN_MSGAVAIL) {
    long unsigned int rxId;
    unsigned char len = 0;
    unsigned char rxBuf[8];
    
    CAN0.readMsgBuf(&rxId, &len, rxBuf);
    
    Serial.print("Received ID: 0x");
    Serial.print(rxId, HEX);
    Serial.print(" Data: ");
    for (byte i = 0; i < len; i++) {
      Serial.print("0x");
      if (rxBuf[i] < 0x10) Serial.print("0");
      Serial.print(rxBuf[i], HEX);
      Serial.print(" ");
    }
    Serial.println();
  }

  delay(2000);
}

Benötigte Bibliotheken: mcp_can 1.5.1

Wiring diagram and example code generated by Codey.online — https://www.codey.online

Zuletzt angesehen

Flexible Silikon-Lötmatte 30x20cm blau

Flexible Silikon-Lötmatte 30x20cm blau

€ 4,70
Ansehen
Blauer Draht mit massiver Ader 22AWG für Breadboards pro Meter

Blauer Draht mit massiver Ader 22AWG für Breadboards pro Meter

€ 1,50
Micro JST PH 5-poliges Pigtail-Connector-Set male female

Micro JST PH 5-poliges Pigtail-Connector-Set male female

€ 1,70
Kleiner Vibrationsmotor 1,5 - 3 V

Kleiner Vibrationsmotor 1,5 - 3 V

€ 1,05