| Crates.io | serial2 |
| lib.rs | serial2 |
| version | 0.2.33 |
| created_at | 2021-11-07 10:17:34.250747+00 |
| updated_at | 2025-09-22 07:23:20.606029+00 |
| description | Cross platform serial ports |
| homepage | |
| repository | https://github.com/de-vri-es/serial2-rs |
| max_upload_size | |
| id | 478014 |
| size | 151,819 |
Serial port communication for Rust.
The serial2 crate provides a cross-platform interface to serial ports.
It aims to provide a simpler interface than other alternatives.
Currently supported features:
SerialPort struct for all supported platforms."unix" or "windows").You can open and configure a serial port in one go with SerialPort::open().
The second argument to open() must be a type that implements IntoSettings.
In the simplest case, it is enough to pass a u32 for the baud rate.
Doing that will also configure a character size of 8 bits with 1 stop bit and disables parity checks and flow control.
For full control over the applied settings, pass a closure that receives the current Settings and return the desired settings.
If you do, you will almost always want to call Settings::set_raw() before changing any other settings.
The standard std::io::Read and std::io::Write traits are implemented for SerialPort and &SerialPort.
This allows you to use the serial port concurrently from multiple threads through a non-mutable reference.
There are also non-trait read() and write() functions,
so you can use the serial port without importing any traits.
These take &self, so they can also be used from multiple threads concurrently.
The SerialPort::available_ports() function can be used to get a list of available serial ports on supported platforms.
This example opens a serial port and echoes back everything that is read.
use serial2::SerialPort;
// On Windows, use something like "COM1" or "COM15".
let port = SerialPort::open("/dev/ttyUSB0", 115200)?;
let mut buffer = [0; 256];
loop {
let read = port.read(&mut buffer)?;
port.write_all(&buffer[..read])?;
}