Crates.io | sysfs_gpio |
lib.rs | sysfs_gpio |
version | 0.6.2 |
source | src |
created_at | 2015-03-16 04:05:22.405678 |
updated_at | 2024-05-13 17:51:26.744563 |
description | Provides access to GPIOs using the Linux sysfs interface. |
homepage | https://github.com/rust-embedded/rust-sysfs-gpio |
repository | https://github.com/rust-embedded/rust-sysfs-gpio |
max_upload_size | |
id | 1587 |
size | 79,461 |
The sysfs_gpio
crate provides access to the Linux sysfs GPIO interface
(https://www.kernel.org/doc/Documentation/gpio/sysfs.txt). It seeks to provide
an API that is safe, convenient, and efficient and supports exporting,
unexporting, reading, writing and waiting for interrupts on pins.
Many devices such as the Raspberry Pi or Beaglebone Black provide userspace access to a number of GPIO peripherals. The standard kernel API for providing access to these GPIOs is via sysfs.
You might want to also check out the gpio-utils Project for a convenient way to associate names with pins and export them as part of system boot. That project uses this library.
To use sysfs_gpio
, first add this to your Cargo.toml
:
[dependencies]
sysfs_gpio = "0.6"
Then, add this to your crate root:
use sysfs_gpio;
Blinking an LED:
use sysfs_gpio::{Direction, Pin};
use std::thread::sleep;
use std::time::Duration;
fn main() {
let my_led = Pin::new(127); // number depends on chip, etc.
my_led.with_exported(|| {
my_led.set_direction(Direction::Out).unwrap();
loop {
my_led.set_value(0).unwrap();
sleep(Duration::from_millis(200));
my_led.set_value(1).unwrap();
sleep(Duration::from_millis(200));
}
}).unwrap();
}
More Examples:
The following features are planned for the library:
mio
or tokio
(requires
enabling the mio-evented
or async-tokio
crate features, respectively)This crate is guaranteed to compile on stable Rust 1.65.0 and up. It might compile with older versions but that may change in any new patch release.
Most likely, the machine you are running on is not your development machine (although it could be). In those cases, you will need to cross-compile. The rust-cross guide provides excellent, detailed instructions for cross-compiling.
Cross-compiling can be done by specifying an appropriate target. You can then move that to your device by whatever means and run it.
$ cargo build --target=arm-unknown-linux-gnueabihf --example blinky
$ scp target/arm-unknown-linux-gnueabihf/debug/examples/blinky ...
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Contribution to this crate is organized under the terms of the Rust Code of Conduct, the maintainer of this crate, the Embedded Linux Team, promises to intervene to uphold that code of conduct.