在 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 库,为 Raspberry Pi 上的 GPIO 设备提供了一个简单的接口,并具有友好的 Python API。GPIO Zero 由 Opensource.com 社区版主 Ben Nuttall 开发。

我正在开发 rust_gpiozero,这是优秀的 GPIO Zero 库的端口,它使用了 Rust 编程语言。它仍然是一个正在进行中的项目,但它已经包含了一些有用的组件。

Rust 是一种在 Mozilla 开发的系统编程语言。它专注于性能、可靠性和生产力。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-rs 是由 Jonathan Pallant (@therealjpster) 开发的库,为 Raspberry Pi Sense HAT 附加板提供 Rust 支持。Jonathan 还有一个使用该库的 入门工作坊,并且他在 The MagPi 杂志第 73 期 中撰写了一篇关于在 Raspberry Pi 上使用 Rust 的初学者入门文章“Read Sense HAT with Rust”。

总结

希望这篇文章能够启发您在 Raspberry Pi 上使用 Rust 编程语言进行物理计算。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.