CAN Simple

A really simple CAN network for about $10 a node.

Public Chat
Similar projects worth following
This is the hardware part of CAN Simple, a really simple CAN Bus setup for robotics or just desktop experimentation. For a description of a really simple software protocol for CAN Bus development, see: Each node consists of only three parts: an STM32 "Blue pill" processor board, a CAN transceiver module, and an SB300 half size proto board. I'm providing step by step instructions, but just to give you an idea, the proto board on the left shows the complete wiring diagram for a UART or I2C node. That's it. The rest is just headers. There are lots of possibilities here. At present I am running the following nodes:
Motor controllers (4)
RC radio
SiK type telemetry
EEPROM server
WAV player
Servo controller

CAN Simple nodes all look pretty much alike. Only the headers on the top change. There's a tremendous amount of connectivity available on that top row, including two UARTs, I2C, SPI, PWM ports for motor drivers or servos, a quadrature decoder, a bunch of ADCs, and a complete 8-bit parallel port.

Here is the layout for my motor controllers.  On left, GPIOs are pulled low with resistors to set the motor number. On the top, left to right, headers are provided for PWM, quadrature decoding, and current sense ADC.

Conversely, the next layout is for my Autopilot node, which has no external connectivity at all:

Below is the pin-out for the bottom row of all nodes.

Pins at B14 and B15 are 5V and GND.  These go straight through to the corresponding pins on the top and provide power to peripherals.

Pins at A9 and A10 are CanL and CanH.

Pins at 5V and G are 5V and GND, and provide power to the processor module.

On the backplane, the two 5V lines can be connected or can have separate power supplies.

Pins at A8, B8, and B9 have no connection, and are just there for stiffness. You can add additional stiffeners anywhere at B4 through B7.

The dual row headers on the bottom plug into a simple backplane. Dual row headers are used for stiffness.

When the nodes are plugged into the backplane the whole setup looks like this:

For even more rigidity, the nodes can be joined together in pairs, as in some cases above.


Test binary for your nodes. Receives any message on the CAN bus, and attempts to send it out as ASCII text on USART3 @ 115200.

hex - 35.07 kB - 09/03/2020 at 13:18



Test binary for your nodes. Receives any message on the CAN bus, toggles its LED, and replies with a CAN message, "I'm here".

hex - 25.00 kB - 09/03/2020 at 12:20



Test binary for your nodes. Periodically toggles its LED and sends a CAN message with the text "Hello".

hex - 25.30 kB - 09/03/2020 at 11:46



This is the Inkscape file. It has all the various layers, plus a couple of goodies like a logic level converter and an EEPROM.

svg+xml - 2.06 MB - 08/01/2020 at 15:53


  • 1 × Processor board STM32F103C8T6 processor board AKA "Blue Pill", available on Amazon and multiple other sources.
  • 1 × CAN Bus module SN65HVD230 CAN bus module. Available on Amazon and multiple other sources.
  • 1 × SB300 protoboard Available at Amazon, Mouser, and Solarbotics.

  • 1
    Preparing the CAN module
    1. Before you do anything else, remove the 120r resistor from between CanH and CanL.  
      We're going to mount the module face down on the back of the proto board and then it'll be too late.
    2. Have a look at the back of the module and see if the markings are opposite to what they should be.  If they are, just erase them with a felt tip pen;  maybe save yourself some head scratching later.

  • 2
    Preparing the proto board

    To transfer a circuit to a protoboard, I draw it in up in Inkscape and print it on a clear label and stick that on the component side of the board. If you want to try it, use the first image below. 

    I've also uploaded the Inkscape file.  Even if you're not familiar with Inkscape, you can play around with the different layers, and copy and paste pads and traces.

    In any case, you can use the second image as a guide.

    Also, if you're going to drill the four mounting holes, this is the time to do it.

    The horizontal lines are just for reference. They match the traces on the copper side.

  • 3
    Add the jumper wires​

    Solder in the six jumper wires and trim the tails.  You can just use resistor leads for these.

View all 7 instructions

Enjoy this project?



rajchips wrote 10/12/2020 at 23:07 point

Please share code source files.

Thanks in advance.

  Are you sure? yes | no

colinconstant wrote 10/13/2020 at 20:44 point

Hi. Have a look over at

I'm starting to flesh out the Details section, and I've uploaded a couple of files.

  Are you sure? yes | no

rajchips wrote 10/14/2020 at 02:50 point

Thanks for the files/information. 

  Are you sure? yes | no

colinconstant wrote 10/16/2020 at 16:47 point

No prob.  Anything else you need?

  Are you sure? yes | no

Jacob David C Cunningham wrote 08/25/2020 at 19:39 point

What is the round/black thing on the front? Almost looks like a speaker.

  Are you sure? yes | no

colinconstant wrote 08/26/2020 at 20:58 point

Hi thanks for your post. Yes it is a speaker! It's one of those little self-contained units with built-in battery and amplifier. It's driven by an Adafruit Audio FX WAV player. The FX accepts 8-char file names to play clips, so a good match for CAN.

  Are you sure? yes | no

Jacob David C Cunningham wrote 08/28/2020 at 05:11 point

Lol was that a joke? Motor 2 F---ed. That's neat I guess I didn't understand what CAN is. That's pretty cool, I like that, the feedback checking systems.

  Are you sure? yes | no

colinconstant wrote 08/28/2020 at 08:25 point

It was fun making the voices. I used Balabolka.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates