#relay #i2c #qwiic #i2c-bus #linux #controlling #raspberry-pi

qwiic-relay-rs

本库旨在通过Linux使用I2C控制Qwiic继电器

3个版本

使用旧的Rust 2015

0.1.11 2022年6月25日
0.1.1 2021年10月13日
0.1.0 2021年10月13日

#2013硬件支持

Download history 14/week @ 2024-06-30 52/week @ 2024-07-28

每月52次 下载

MIT/Apache

16KB
221 代码行

用于Rust的Qwiic继电器I2C库(WIP)

描述

本库旨在通过Linux使用I2C控制Qwiic继电器。其主要目标是ARM设备,如RaspberryPi或FriendlyARM的NanoPi Neo。它应该可以在其他具有I2C总线访问的Linux发行版上运行。

目前,我只有测试目的的Quad固态继电器。如果您在使用其他Qwiic继电器时遇到问题,请提交问题或pull请求。

路线图

  • 将继电器命令和地址映射到结构体(完成)
  • 能够切换所有继电器开/关(完成)
  • 能够切换单个继电器开/关(完成)
  • 能够读取继电器状态(完成)
  • 能够检查固件版本(完成)
  • 能够更改继电器硬件地址(WIP)

如何使用库

将以下行添加到您的 cargo.toml 中

qwiic-relay-rs = "0.1.11"

或者,对于master分支上最新的提交,使用

qwiic-relay-rs = { git = "https://github.com/PixelCoda/QwiicRelay-Rust.git", version = "*" }

示例



extern crate qwiic_relay_rs;

use qwiic_relay_rs::*;
use std::thread;
use std::time::Duration;

fn main() {
    let config = QwiicRelayConfig::default();
    let mut qwiic_relay = QwiicRelay::new(config, "/dev/i2c-1", 0x08).expect("Could not init device");
    let version = qwiic_relay.get_version();
    match version {
        Ok(v) => {
            println!("Firmware Version: {}", v);


            println!("all off");
            qwiic_relay.set_all_relays_off().unwrap();
            thread::sleep(Duration::from_secs(2));
        
            println!("all on");
            qwiic_relay.set_all_relays_on().unwrap();
            thread::sleep(Duration::from_secs(2));
        
            println!("all off");
            qwiic_relay.set_all_relays_off().unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_on: 1");
            qwiic_relay.set_relay_on(Some(1)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("get_relay_state: 1");
            let relay_one_state = qwiic_relay.get_relay_state(Some(1)).unwrap();
            if relay_one_state {
                println!("relay 1 is on!");
            }
            thread::sleep(Duration::from_secs(2));
            

            println!("set_relay_off: 1");
            qwiic_relay.set_relay_off(Some(1)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_on: 2");
            qwiic_relay.set_relay_on(Some(2)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("get_relay_state: 2");
            let relay_one_state = qwiic_relay.get_relay_state(Some(2)).unwrap();
            if relay_one_state {
                println!("relay 2 is on!");
            }
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_off: 2");
            qwiic_relay.set_relay_off(Some(2)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_on: 3");
            qwiic_relay.set_relay_on(Some(3)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("get_relay_state: 3");
            let relay_one_state = qwiic_relay.get_relay_state(Some(3)).unwrap();
            if relay_one_state {
                println!("relay 3 is on!");
            }
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_off: 3");
            qwiic_relay.set_relay_off(Some(3)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("set_relay_on: 4");
            qwiic_relay.set_relay_on(Some(4)).unwrap();
            thread::sleep(Duration::from_secs(2));

            println!("get_relay_state: 4");
            let relay_one_state = qwiic_relay.get_relay_state(Some(4)).unwrap();
            if relay_one_state {
                println!("relay 4 is on!");
            }
            thread::sleep(Duration::from_secs(2));
    
            println!("set_relay_off: 4");
            qwiic_relay.set_relay_off(Some(4)).unwrap();
            thread::sleep(Duration::from_secs(2));
        },
        Err(e) => println!("{:?}", e)
    }
}

参考

许可证

Apache 2.0许可证下发布。

通过以下方式支持并关注我的工作:

购买我的NFT

查看我的Github

关注我的Facebook页面

订阅我的Patreon

或者捐款加密货币

  • ADA: addr1qyp299a45tgvveh83tcxlf7ds3yaeh969yt3v882lvxfkkv4e0f46qvr4wzj8ty5c05jyffzq8a9pfwz9dl6m0raac7s4rac48
  • ALGO: VQ5EK4GA3IUTGSPNGV64UANBUVFAIVBXVL5UUCNZSDH544XIMF7BAHEDM4
  • ATOM: cosmos1wm7lummcealk0fxn3x9tm8hg7xsyuz06ul5fw9
  • BTC: bc1qh5p3rff4vxnv23vg0hw8pf3gmz3qgc029cekxz
  • ETH: 0x7A66beaebF7D0d17598d37525e63f524CfD23452
  • ERC20: 0x7A66beaebF7D0d17598d37525e63f524CfD23452
  • XLM: GCJAUMCO2L7PTYMXELQ6GHBTF25MCQKEBNSND2C4QMUPTSVCPEN3LCOG
  • XTZ: tz1SgJppPn56whprsDDGcqR4fxqCr2PXvg1R

依赖关系

~2MB
~42K SLoC