example

Example of the component espp/twai v1.2.0
# TWAI (CAN 2.0) Example

This example demonstrates the use of the `espp::Twai` class to communicate over
the ESP TWAI (CAN 2.0) peripheral using the modern `esp_driver_twai` node API.

It runs in `Mode::LOOPBACK` (internal loopback + self-test) so it works on a
bare devkit with **no CAN transceiver** and **no second node** on the bus: it
transmits a few frames, receives each of them back via the task-context
`on_receive` callback, logs both TX and RX, and asserts the round trip.

## Switching to a real bus (NORMAL mode)

To talk to a real CAN bus, change the mode to `espp::Twai::Mode::NORMAL` and wire
a 3.3V CAN transceiver (e.g. SN65HVD230, TJA1050, MCP2551) between the ESP TWAI
TX/RX GPIOs and the bus:

```
  ESP32 GPIO(tx) ---> CTX  \
                            SN65HVD230  ==> CANH / CANL (120R terminated bus)
  ESP32 GPIO(rx) <--- CRX  /
```

Terminate the bus with 120Ω resistors at both physical ends, and make sure at
least one other node is present to acknowledge frames (in NORMAL mode a frame is
only considered transmitted once acknowledged). Typical baud rates are 125 kbit/s,
250 kbit/s, 500 kbit/s, and 1 Mbit/s.

## How to use example

### Hardware Required

This example can run on any ESP chip that has a TWAI peripheral (e.g. ESP32 or
ESP32-S3). No external hardware is required in the default loopback mode.

### Build and Flash

```
idf.py set-target esp32
idf.py -p PORT flash monitor
```

(Replace `PORT` with the name of the serial port.)

## Example Output

The example logs each transmitted (`TX:`) and received (`RX:`) frame and then a
`SUCCESS:` line confirming all frames were received back in loopback mode.

To create a project from this example, run:

idf.py create-project-from-example "espp/twai=1.2.0:example"

or download archive (~3.22 KB)