Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VESC communication for Rust

A no-std/no-alloc Rust implementation of the VESC®1 firmware communication protocol, making it ideal for embedded systems, robotics, and any application that needs to communicate with VESC motor controllers.

Supported commands

Note

If you find a missing command, feel free to contribute! Adding a new command should be relatively easy. Just follow the well-established pattern (see commits b0287c7 and 1049f10 for reference).

Command ID Command Name Status
0 FwVersion
4 GetValues
5 SetDuty
6 SetCurrent
7 SetCurrentBrake
8 SetRpm
9 SetPos
10 SetHandbrake
29 Reboot
30 Alive
34 ForwardCan
50 GetValuesSelective
110 SetOdometer
128 GetStats
129 ResetStats
156 Shutdown
157 FwInfo
159 MotorEstop

Supported command replies

Note

Many commands have no replies, so this list need not mirror the supported commands.

Command ID Command Name Status
0 FwVersion
4 GetValues
50 GetValuesSelective
128 GetStats
129 ResetStats
157 FwInfo

Installation

Add this to your Cargo.toml:

[dependencies]
vesc = "0.4"

Usage

let mut buf = [0u8; 16];
let size = vesc::encode(Command::SetRpm(5000), &mut buf).unwrap();
tx.write_all(&buf[..size]).unwrap();
let mut decoder = Decoder::default();
let mut buf = [0u8; 512];

loop {
    let size = rx.read(&mut buf).unwrap()
    decoder.feed(&buf[..size]).unwrap();

    for reply in self.decoder.by_ref() {
        // process `reply`
    }
}

License

This project is licensed under the MIT license.

Footnotes

  1. https://vesc-project.com/

About

A no-std/no-alloc implementation of the VESC® firmware communication protocol.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages