ESP32 CAN Bus (TWAI...)

Der ESP32 hat ein CAN Interface integriert, es ist aber nicht CAN-FD tauglich und wird deshalb TWAI genannt.

ESP32 CAN Bus test

Die Espressif Arduino ESP32 integration bietet direkt Zugriff darauf, hier zeig ich wie das geht:

Zuerst, es wird ein CAN Transceiver benötigt damit der ESP32 die Signalpegel auf dem CAN Bus versteht.

Ein Arduino Uno benötigt dagegen noch zusätzlich einen CAN Controller, zum Beispiel einen MCP2515.

Um das Jahr 2017 sind die ersten Librarys für CAN auf dem ESP32 erschienen. Jetzt 2022 funktioniert das mit wenigen Zeilen Code direkt ohne zusätzliche Library.

Beispiel

Hier ist ein Beispiel das den ESP32 CAN Bus Messages über Serial an den PC senden lässt: (Github Link)

  // Check if message is received
  if (alerts_triggered & TWAI_ALERT_RX_DATA) {
    // One or more messages received. Handle all.
    twai_message_t message;
    while (twai_receive(&message, 0) == ESP_OK) {
      handle_rx_message(message);
    }
  }

Und ein Beispiel zum senden von Nachrichten auf den CAN Bus: (Github Link)

  // Configure message to transmit
  twai_message_t message;
  message.identifier = 0x0F6;
  message.data_length_code = 4;
  for (int i = 0; i < 4; i++) {
    message.data[i] = 0;
  }

  // Queue message for transmission
  if (twai_transmit(&message, pdMS_TO_TICKS(1000)) == ESP_OK) {
    printf("Message queued for transmission\n");
  } else {
    printf("Failed to queue message for transmission\n");
  }
}

Hardware

Der ESP32 besitzt einen TWAI genannten CAN Controller der mit Standard Frame Format (11-bit ID) and Extended Frame Format (29-bit ID) nach ISO11898-1 umgehen kann.

Die Pins direkt am ESP32 sind 3,3V Logik und deshalb benötigt es einen CAN Transceiver der die 3,3V Pegel auf CAN Level übersetzt. So ein Baustein ist der SN65HVD230.

Trivia zu der Namensgebung TWAI bei ESP32: github.com/espressif Why rename CAN to TWAI?

Comments powered by CComment