如果您拥有 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 的组件,用于控制输出和输入设备。这些组件包括 LED、Buzzer、Motor、脉冲宽度调制 LED (PWMLED)、Servo 和 Button。
最终将添加对其他组件、传感器和设备的支持。您可以参考文档以获取更多使用信息。
更多资源
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 的初学者介绍文章“使用 Rust 读取 Sense HAT”。
总结
希望这能激发您使用 Rust 编程语言在 Raspberry Pi 上进行物理计算。rust_gpiozero 是一个库,它提供了有用的组件,如 LED、Buzzer、Motor、PWMLED、Servo 和 Button。更多功能正在计划中,您可以关注我的 Twitter 或查看我的博客以保持关注。
6 条评论