GUI tool for sending Cyphal command to Development board

I have managed to develop a Cyphal CAN node with a Raspberry Pi Pico, so I am wondering if there is any GUI tool for sending commands instead of using Yakut.
Can Yukon do this? Or there is another tool that could.
Thank you.

1 Like

glad you got the Cyphal CAN node on a Raspberry Pi Pico working.
Yes, Yukon can send commands to Cyphal nodes.

Thanks for the reply!
Can I know how a node by a Raspberry Pi Pico can be detected by Yukon?
I am new to Yukon, and I am trying to connect my Pico via MCP2515 → Zubax babel → Yukon
So which one should I select to connect to it

Or more specifically, what should I publish or respond to on the CAN node to make Yukon detect it?

I published Heartbeat once a second, which is copied from the example, neither Yukon nor Yakut can detect it.

MTU of 8 is right. Datarate should probably be 250000. That is to say, if you are using the unmodified examples of 107-Arduino-Cyphal.

And you’ll be needing some CAN ↔ USB dongle, @pavel.kirienko sells a decent one. Alternatives are PeakCAN USB, EMS Dr. Thomas Wuensche and myriad others. I leave finding the product as an exercise to the reader, as I type this from my mobile phone.

When I set the datarate to 250000 it has this error on Yukon.
However, I tried to set the datarate to this instead, but it still did not work

The Yukon error appeared because the MTU was set incorrectly; it has to be 8 bytes as indicated earlier.

It always makes sense to start debugging from the basics and then go up to the next layer only when the lower-layer functionality is shown to be working. In your case, I recommend first making sure that your node can publish CAN frames at all. For that, use a logic analyzer with CAN decoding functionality, such as DSLogic or Saleae, or at least the Babel you already have together with candump (part of can-utils). When you see the data you publish appear on the bus, move on to the higher-level tools.

I have tested using 2 mcp2515 and 2 pico connect a Cyphal network and successfully published and subscribed Cyphal frames, not only the Heartbeat but also with some other data types like uavcan::primitive::scalar::Real16_1_0 and such. I am then trying to implement the system by bringing PC in to be a setpoint publisher, and then the problems happen.

Okay. Please share a short dump of heartbeat messages published by your node.

I am currently using UART output redirected to another microcontroller(which is only for printing the debug message) and this is the serial output received by the subscription, the topology is: Pico(Heartbeat publish) → MCP2515 → MCP2515 → Pico( Heartbeat subscription)
This is the code on the Pico publish side’s code:

Thanks for the help!

This is great, but can you please share the data directly from the CAN bus without involving the tools of your own making? It is very important to isolate the problem. Either a logic analyzer or candump should suffice.

I installed the Yakut on Windows instead of Linux, is there another way I can test it?

Maybe you could use some general-purpose Windows app for SLCAN adapters, not sure. I strongly suggest to use GNU/Linux for development tasks of this kind because it offers a much wider selection of tooling.

Hi Pavel,
I set up a VM to run my pico now.
However, the candump didn’t shows any frames on slcan0 of the topology: Pico via MCP2515 → Zubax babel → PC

But if I change the pico to a Zubax Mxya, it work normally with the topology: Zubax Myxa → Zubax babel → PC

Okay. A possible reason is that the bit rate is not configured correctly. This is where having a logic analyzer would help.

If I just hardcoded a Node ID to Pico with 28, can this be theoretically detected? Or what is needed to let the network know there is a Node?

It’s fine but it doesn’t matter. Right now the problem is that there are no CAN frames, please focus on that. Once the CAN layer is working, we will move on to the next layer.

Just from looking at the screenshot of code - thats not an unchanged example. Seems you are using core #1 (loop1) and then continously loop within that function, defying normal expectations on how to use the Arduino API. This could have all kinds of undesirable side effects.

I am backing to use a pure copy of the blink example from 107-Arduino-Cyphal
And I noticed when setting the mcp2515 bitrate, there is a HZ followed by its bitrate number.
May I know what is this?