example

Example of the component espp/mcp266 v1.3.0
# MCP266 CANopen Example

This example demonstrates how to use the `espp::Mcp266` component to drive a
Basicmicro MCP266 (RoboClaw-family) motor controller over **CANopen**. It:

1. brings up an `espp::Twai` transport and an `espp::CanopenClient`, wiring the
   received frames into the client,
2. NMT-starts the node and clears any latched CiA 402 faults,
3. reads the main battery voltage and board temperature,
4. configures the M1 position loop (widening the position clamp and seeding a
   non-zero P gain — required once per boot), and
5. runs a small profile-position sequence on M1, reporting arrival at each
   target.

See the [component README](../README.md) for the device specifics (the
manufacturer command-object mirror, the position-PID field-order quirk, and the
velocity-control limitation).

## Requirements

- An ESP target with a TWAI (CAN) controller.
- A 3.3 V CAN transceiver (e.g. SN65HVD230) wired to the configured TX/RX
  GPIOs, on a properly terminated bus.
- A Basicmicro MCP266 configured for CANopen (CAN pins, bit rate, and node id
  set in Basicmicro Motion Studio), with an encoder and a tuned velocity PID.

## Hardware

Edit the `tx_gpio`, `rx_gpio`, `baudrate`, and `node_id` in
`main/mcp266_example.cpp` to match your board and MCP266 configuration.

## Build

Build the project and flash it to the board, then run monitor to view the
serial output:

```sh
idf.py -p PORT flash monitor
```

Replace PORT with the serial port of your board.

To create a project from this example, run:

idf.py create-project-from-example "espp/mcp266=1.3.0:example"

or download archive (~3.76 KB)