# CANopenNode/CANopenNode

CANopen protocol stack

Repository: https://github.com/CANopenNode/CANopenNode
Canonical: https://ross.abutalabs.com/products/canopennode
Homepage: https://canopennode.github.io/CANopenNode/index.html
Language: C
License: Apache-2.0
License Family: permissive
Topics: canopen, canopennode, embedded, stack, iot
Last push: 2026-07-10T14:17:55+00:00

## Health v2 (maintenance only)
Score: 64/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 91, release rhythm 8, longevity 100
- inputs: {"age_days": 4052, "days_push": 54, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 1985, forks 803 (observed 2026-08-28T04:06:02.576056+00:00)

## What it is
CANopenNode is a free and open-source CANopen protocol stack written in ANSI C, implementing the standardized CiA301 (EN 50325-4) higher-layer protocol for embedded control systems on top of CAN. It provides an Object Dictionary plus NMT, Heartbeat, PDO, SDO, Emergency, Sync, Time-stamp, LSS, gateway, and CANopen Safety features, and runs on various microcontrollers either standalone or with an RTOS.

## Use cases
- implement a CANopen device on a microcontroller
- add CANopen protocol support to embedded C firmware
- build an NMT master or SDO client to control a CANopen network
- map process variables to PDOs for real-time CAN bus communication
- monitor CANopen nodes with heartbeat producer/consumer error control
- configure node-id and bitrate over the bus with LSS
- bridge CANopen to a PC via the CiA309-3 ASCII gateway

## When to choose
- you need a standards-compliant CANopen (CiA301) stack in portable ANSI C
- your target is a resource-constrained microcontroller, with or without an RTOS
- you want the full CANopen feature set: PDO, SDO, NMT, Heartbeat, Emergency, Sync, LSS, Safety
- you need a mature, actively maintained, permissively licensed (Apache-2.0) protocol implementation

## When to avoid
- you need CAN (the raw data-link layer) drivers rather than the CANopen higher-layer protocol
- your project is not CAN/CANopen based, e.g. EtherCAT, Modbus, or PROFINET
- you require a stack in a language other than C or with heavy vendor-specific integration out of the box
- you need a ready-made GUI configuration tool rather than an embeddable protocol library

## Facets
- artifact type: library
- maturity: stable
- function: embedded, networking, middleware, sdk
- domain: embedded-systems, iot, robotics, developer-tools
- platform: embedded, iot, c, cross-platform
- tags: canopen, can-bus, protocol-stack, cia301, object-dictionary, pdo, sdo, nmt, heartbeat, lss, ansi-c, microcontroller, fieldbus, industrial-automation, rtos, automation, linux

## Member repositories
- CANopenNode/CANopenNode (main) score 64

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:06:02.576056+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T03:03:15.180750+00:00, confidence not recorded.
  - readme: https://github.com/CANopenNode/CANopenNode (fetched 2026-08-28T04:06:02.576056+00:00, sha 9aa0bf878965)
  - homepage: https://canopennode.github.io/CANopenNode/index.html (fetched 2026-08-29T10:42:57.074987+00:00, sha 4bbe3e850902)
- Data as of 2026-08-30T08:39:29.467469+00:00.
