在 Raspberry Pi 上使用 Rust 语言编写现实世界程序

rust_gpizero 使用 Rust 编程语言在 Raspberry Pi 上进行物理计算。
301 位读者喜欢这篇文章。
A graduate degree could springboard you into an open source job

Opensource.com

如果您拥有 Raspberry Pi,您可能已经尝试过物理计算——编写代码与真实的物理世界互动,例如让一些 LED 闪烁或控制伺服电机。您可能也使用过 GPIO Zero,这是一个 Python 库,它通过友好的 Python API 为 Raspberry Pi 上的 GPIO 设备提供了一个简单的接口。GPIO Zero 由 Opensource.com 社区版主 Ben Nuttall 开发。

我正在开发 rust_gpiozero,它是优秀的 GPIO Zero 库的移植版本,使用了 Rust 编程语言。它仍在开发中,但已经包含了一些有用的组件。

Rust 是一种在 Mozilla 开发的系统编程语言。它专注于性能、可靠性和生产力。如果您想了解更多关于 Rust 的信息,Rust 网站上有丰富的资源

入门指南

在开始使用 rust_gpiozero 之前,最好对 Rust 编程语言有一个基本的了解。我建议至少通读 《Rust 编程语言》这本书的前三章。

我建议使用 rustup 在您的 Raspberry Pi 上安装 Rust。或者,您可以使用 cross(仅适用于 x86_64 Linux 主机)或本指南设置交叉编译环境。

安装 Rust 后,通过输入以下命令创建一个新的 Rust 项目

cargo new rust_gpiozero_demo

通过将以下内容添加到您的 Cargo.toml 文件中的 dependencies 部分,添加 rust_gpiozero 作为依赖项(当前版本为 v0.2.0)

rust_gpiozero = "0.2.0"

接下来,通过修改 main.rs 文件并添加以下内容,让 LED 闪烁——物理计算的“Hello World”

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

fn main() {
    // Create a new LED attached to Pin 17
    let led = LED::new(17);

    // Blink the LED 5 times
    for  _ in  0.. 5{
       led.on();
        thread::sleep(Duration::from_secs(1));
        led.off();
        thread::sleep(Duration::from_secs(1));
    }
}

rust_gpiozero 为 LED 闪烁提供了一个更简单的接口。您可以使用 blink 方法,提供它应该保持亮起和熄灭的秒数。这简化了代码,如下所示

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();
}

其他组件

rust_gpiozero 提供了几个类似于 GPIO Zero 的组件,用于控制输出和输入设备。这些组件包括 LEDBuzzerMotor、脉冲宽度调制 LED (PWMLED)、ServoButton

最终将添加对其他组件、传感器和设备的支持。您可以参考文档以获取更多使用信息。

更多资源

rust_gpiozero 仍在开发中。如果您需要更多关于在 Raspberry Pi 上开始使用 Rust 的资源,这里有一些有用的链接

Raspberry Pi 外围访问库 (RPPAL)

类似于基于 RPi.GPIO 库的 GPIO Zero,rust_gpiozero 构建于 Rene van der Meer 出色的 RPPAL 库之上。如果您想要更多地控制您使用 Rust 的项目,您绝对应该尝试 RPPAL。它支持 GPIO、集成电路间 (I2C)、硬件和软件脉冲宽度调制 (PWM) 和串行外围接口 (SPI)。通用异步收发器 (UART) 支持目前正在开发中。

Sense HAT 支持

Sensehat-rsJonathan Pallant (@therealjpster) 的库,它为 Raspberry Pi Sense HAT 附加板提供 Rust 支持。Jonathan 还有一个使用该库的入门工作坊,并且他在 The MagPi 杂志第 73 期中撰写了一篇关于在 Raspberry Pi 上使用 Rust 的初学者介绍文章“使用 Rust 读取 Sense HAT”。

总结

希望这能激发您使用 Rust 编程语言在 Raspberry Pi 上进行物理计算。rust_gpiozero 是一个库,它提供了有用的组件,如 LED、Buzzer、Motor、PWMLED、Servo 和 Button。更多功能正在计划中,您可以关注我的 Twitter 或查看我的博客以保持关注。

标签
Avatar
Linux Foundation 认证系统管理员 | 医学毕业生 | 终身学习者 | 开发者 | 创客 | 志愿者

6 条评论

为什么在第二个示例中 LED 对象需要是可变的?

嗨。在第二个示例中,闪烁过程在后台线程中运行,这样我们不会阻塞主线程。在该方法中使用了 LED 的可变引用

回复 ,作者:Josh Bladen (未验证)

谢谢,我一直在寻找一个小的 Rust 项目,而且似乎 Rust 是 Raspberry Pi 的理想语言,因为 pi 的 CPU 和内存有限,而且 pi 具有出色的安全性,非常适合 Rust。所以对于我的下一个 pi 项目,我肯定会尝试 Rust 而不是内存密集型的 Java 或内存密集型且缓慢的 Python。

嘿!谢谢.. 请分享您的项目,特别是如果您使用该库,请分享您的反馈!

回复 ,作者:elatllat (未验证)

谢谢,这真的很有帮助

不错

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.