# rust_gpiozero [![Build Status](https://travis-ci.org/rahul-thakoor/rust_gpiozero.svg?branch=master)](https://travis-ci.org/rahul-thakoor/rust_gpiozero) A simple interface to GPIO devices with Raspberry Pi. This library is based on [GPIOZero](https://gpiozero.readthedocs.io/en/stable/index.html) library. The idea is to get started with physical computing using Rust with little coding by hiding the underlying complexity. The library uses [BCM Pin numbering](https://pinout.xyz/) ### Example : Blinking an LED ```rust use rust_gpiozero::*; fn main() { // Create a new LED attached to Pin 17 let mut led = LED::new(17); // on_time = 2 secs, off_time=3 secs led.blink(2.0,3.0); // prevent program from exiting immediately led.wait(); } ``` ### Example : Wait for a Button Press ```rust use rust_gpiozero::*; fn main() { // Create a button which is attached to Pin 17 let mut button = Button::new(17); button.wait_for_press(None); println!("button pressed"); } ``` Compare this to using the crate `sysfs_gpio` to blink an LED on the Raspberry Pi : ```rust extern crate sysfs_gpio; 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(|| { loop { my_led.set_value(0).unwrap(); sleep(Duration::from_millis(200)); my_led.set_value(1).unwrap(); sleep(Duration::from_millis(200)); } }).unwrap(); } ``` ## Install/Use To use `rust_gpiozero`, first add this to your Cargo.toml: ```toml [dependencies] rust_gpiozero = "0.2.0" ``` Compiling your project on a Raspberry Pi directly can take significant time depending on the model. Ideally, you would cross compile your project then run it on the Raspberry Pi. [More information](https://github.com/japaric/rust-cross) ## Features The following features are planned : - [ ] Support for `embedded-hal` - [ ] Support for common devices such as Accelerometer, Temperature sensors, etc ## Changelog [CHANGELOG.md](https://github.com/rahul-thakoor/rust_gpiozero/blob/master/CHANGELOG.md) ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ## Contributing 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. Thanks for your interest in `rust_gpiozero`. I am a newbie rustacean and just started using the language! I am using this project to learn more about Rust. Feel free to give feedback or send PRs. Your experiences and feedback will also benefit others who use this library. ## Credits This library would not be possible without the great work of the maintainers of [GPIOZero](https://gpiozero.readthedocs.io/en/stable/index.html) and [rppal](https://github.com/golemparts/rppal)