1个不稳定版本
0.1.0 | 2022年6月7日 |
---|
#1029 在 嵌入式开发
29KB
451 行
gpio-expander
这是一个crate,为在GPIO Port Expander (Troyka Module)
、Troyka HAT
和Slot Expander Expansion Board
产品中使用的I²C端口扩展器提供了一般抽象。这种抽象并不一定是最高效的,但允许以与直接GPIO相同的方式使用引脚。因为引脚类型也实现了embedded-hal
数字I/O特性,因此也可以将它们传递给后续驱动程序(例如,作为复位或芯片选择引脚)。
示例
use std::error::Error;
use std::thread;
use std::time::Duration;
use gpio_expander::{prelude::*, GpioExpander};
use rppal::i2c::I2c;
fn main() -> Result<(), Box<dyn Error>> {
// Initializing an I²C Peripheral from HAL
let i2c = I2c::with_bus(1)?;
// Initializing GpioExpander with default I²C address
let mut expander = GpioExpander::new(i2c, None);
let expander_pins = expander.pins();
// Pin 0 into output mode
let mut led = expander_pins.p00.into_output()?;
loop {
led.set_high()?;
thread::sleep(Duration::from_secs(1));
led.set_low()?;
thread::sleep(Duration::from_secs(1));
}
}
更多示例在examples
文件夹中。
文档
文档可以在docs.rs找到。
多线程使用
gpio-expander
底层使用来自shared-bus
的BusMutex
。这意味着只要您提供了适当的互斥锁类型,您也可以在任务/线程边界之间共享引脚。
// Initializing GpioExpander with default I²C address, and alternative Mutex
let mut expander: GpioExpander<std::sync::Mutex<_>> = GpioExpander::new(i2c, None);
默认配置允许以单线程模式使用引脚,对于多线程模式,请使用上面的示例(互斥锁实现取决于您使用的平台)。
许可
以下任一许可下授权:
- Apache License,版本2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,应双重授权如上所述,不附加任何额外条款或条件。
依赖项
~120KB