#embedded-hal #hal #embedded-hal-impl #troyka-hat #amperka

no-std gpio-expander

适用于与GPIO端口扩展器(Troyka模块)、Troyka HAT和插槽扩展器扩展板产品交互的平台无关驱动程序

1个不稳定版本

0.1.0 2022年6月7日

#1029嵌入式开发

MIT/Apache

29KB
451

gpio-expander

这是一个crate,为在GPIO Port Expander (Troyka Module)Troyka HATSlot 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-busBusMutex。这意味着只要您提供了适当的互斥锁类型,您也可以在任务/线程边界之间共享引脚。

// Initializing GpioExpander with default I²C address, and alternative Mutex
let mut expander: GpioExpander<std::sync::Mutex<_>> = GpioExpander::new(i2c, None);

默认配置允许以单线程模式使用引脚,对于多线程模式,请使用上面的示例(互斥锁实现取决于您使用的平台)。

许可

以下任一许可下授权:

任选。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,应双重授权如上所述,不附加任何额外条款或条件。

依赖项

~120KB