This is a platform agnostic Rust driver for the PCF8574, PCF8574A and PCF8575 I2C I/O expanders,
based on the embedded-hal
traits.
This driver allows you to:
- Set all the outputs to
0
or1
at once. Seeset()
. - Read selected inputs. See
get()
. - Set all the outputs repeatedly looping through an array. See
write_array()
. - Read selected inputs repeatedly filling up an array. See
read_array()
. - Split the device into individual input/output pins. See
split()
.
The devices consist of 8 or 16 quasi-bidirectional ports, I²C-bus interface, three hardware address inputs and interrupt output. The quasi-bidirectional port can be independently assigned as an input to monitor interrupt status or keypads, or as an output to activate indicator devices such as LEDs.
The active LOW open-drain interrupt output (INT) can be connected to the interrupt logic of the microcontroller and is activated when any input state differs from its corresponding input port register state.
Datasheets:
Please find additional examples using hardware in this repository: driver-examples
use linux_embedded_hal::I2cdev;
use pcf857x::{Pcf8574, PinFlag, SlaveAddr};
fn main() {
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let address = SlaveAddr::default();
let mut expander = Pcf8574::new(dev, address);
let output_pin_status = 0b1010_1010;
expander.set(output_pin_status).unwrap();
let pins_to_be_read = PinFlag::P0 | PinFlag::P7;
let status = expander.get(pins_to_be_read).unwrap();
println!("Input pin status: {}", status);
}
For questions, issues, feature requests, and other changes, please file an issue in the github project.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.