19次发布
0.2.6 | 2021年1月26日 |
---|---|
0.2.5 | 2020年6月18日 |
0.2.3 | 2019年6月8日 |
0.2.2 | 2018年7月23日 |
0.1.8 | 2018年4月30日 |
#296 in 嵌入式开发
用于sensehat
150KB
3K SLoC
用于Raspberry Pi Sense HAT LED屏幕的库
Raspberry Pi Sense HAT拥有一个8×8 RGB LED矩阵,它为Linux framebuffer提供自己的驱动程序。
此库提供了一个线程安全、强类型的、高级API,用于LED矩阵,将其视为Linux机器上的任何其他屏幕。
需求
此crate支持Rust稳定版本v1.32.0及以上版本,并持续在nightly上测试。
更新日志
为了详细说明更改如何合并到代码中,我们维护了一个更新日志。
用法
要使用此crate的默认功能,将以下内容添加到您的Cargo.toml
[dependencies]
sensehat-screen = "0.2"
或者,手动指定功能:
[dependencies]
sensehat-screen = { version = "0.2", default-features = false, features = ["fonts"] }
然后您可以使用它与您的crate一起使用
extern crate sensehat_screen
use sensehat_screen::{FrameLine, PixelColor, Screen, FONT_COLLECTION};
文档
您可以在https://docs.rs/sensehat-screen找到最新版本的文档。
它包含对库中包含的类型的总体描述,它是了解可用方法的良好起点。
示例
源代码示例
您可以在源代码中找到工作示例。
-
此示例手动构建低级
FrameLine
,在设定的时间间隔内将其写入Screen
。 -
此示例使用了内置的8x8
FontCollection
。该集合用于净化用户提供的&str
,返回一个仅包含FontCollection提供的字符的FontString
(基本上,完整的latin
集合,一些greek
,一些hiragana
,以及传统的ascii box
和ascii block
集合)。每个字体都被赋予了50%的白色描边颜色,
PixelColor::WHITE.dim(0.5)
,然后它被转换为一个FrameLine
,最后写入到Screen
。有关更多详细信息,请参阅font8x8 库。
-
此示例使用
PixelFrame
,这是一个用于表示8x8 LED矩阵中每个像素的直观包装器:[PixelColor; 64]
。与
letter
示例类似,它也使用了内置的FontCollection
,创建了两个手工制作的PixelFrame
,由黄色的Ñ
和紫色的ó
组成。然后,每个帧将进行逆时针旋转,每次旋转90°。
-
从一个空屏幕和两个字体符号开始。然后通过逐步设置
Offset
,使每个符号从左侧滑动进入。符号完全显示后,它将向右滑动,再次通过增加偏移量,直到符号消失。
使用上下偏移方向重复相同的过程。
-
Clip
是由两个PixelFrame
合并而成的PixelFrame
,它们用于手动构建一系列帧。通常,您更喜欢使用Scroll
和FrameSequence
迭代器。 -
名称解释一切:它构建一个帧滚动,并从顶部到底部逐个显示裁剪帧。
使用
FontString
、Scroll
和FrameSequence
来工作。 -
名称解释一切:它构建一个帧滚动,并从底部到顶部逐个显示裁剪帧。
使用
FontString
、Scroll
和FrameSequence
来工作。 -
名称解释一切:它构建一个帧滚动,并从左到右逐个显示裁剪帧。
使用
FontString
、Scroll
和FrameSequence
来工作。 -
名称解释一切:它构建一个帧滚动,并从右到左逐个显示裁剪帧。
使用
FontString
、Scroll
和FrameSequence
来工作。
一个简单、低级示例
以下程序展示了如何
- 打开LED矩阵屏幕的帧缓冲文件描述符(
screen
) - 定义一个像素颜色(
red_pixel
) - 定义一个代表屏幕的像素颜色片段(
all_64_pixels
) - 将片段转换为有效的像素帧
- 在屏幕上显示帧
extern crate sensehat_screen;
use sensehat_screen::{PixelFrame, PixelColor, Screen};
fn main() {
let mut screen = Screen::new("/dev/fb1")
.expect("Could not open the framebuffer for the screen");
let red_pixel = PixelColor::new(255, 0, 0); // The pixel color's RGB components are each in the range of 0 <= c < 256.
let all_64_pixels = &[red_pixel; 64]; // A single vector of 8 x 8 = 64 pixel colors (rows are grouped by chunks of 8)
let all_red_screen = PixelFrame::from_pixels(&all_64_pixels); // a screen frame
screen.write_frame(&all_red_screen.frame_line()); // show the frame on the LED matrix
}
特性
default
特性
默认情况下,包含 basic
和 linux-framebuffer
特性。
basic
特性
一组不需要硬件的功能。这主要是如果您正在编写模拟器/仿真器等,可能会想使用的代码。它包括 fonts
、offset
、rotate
、clip
、scroll
和 serde-support
功能。
fonts
在 default
中。一组旧式 8x8 字体,可在 LED 矩阵上渲染。
offset
在 default
中。支持左右/上/下偏移 PixelFrame
。需要 clip
。
rotate
在 default
中。支持按 90 度步长旋转 PixelFrame
。
clip
在 default
中。支持将两个 PixelFrame
结合并裁剪到单个帧上。
scroll
在 default
中。支持将一组 PixelFrame
组合成单个 Scroll
。需要 clip
。
serde-support
在 default
中。启用与 serde
的序列化和反序列化支持。
linux-framebuffer
在 default
中。使用 Linux 框缓冲区将数据写入 LED 矩阵。
额外功能
big-endian
使用大端格式,适用于非 AMD64/x86-64 处理器。当编码/解码 16 位 RGB565 到/从 24 位 RGB 时使用。有关更多信息,请参阅 此处。
功能愿望清单
-
linux-framebuffer
- 在default
中。使用 Linux 框缓冲区将数据写入 LED 矩阵。 -
fonts
- 在default
中。一组旧式 8x8 字体,可在 LED 矩阵上渲染。 -
offset
- 在default
中。支持左右/上/下偏移PixelFrame
。 -
rotate
- 在default
中。支持按 90 度步长旋转PixelFrame
。 -
clip
- 在default
中。支持将两个PixelFrame
结合并裁剪到单个帧上。 -
scroll
- 在default
中。支持将一组PixelFrame
组合成单个Scroll
。需要clip
。 -
serde-support
- 在default
中。启用与serde
的序列化和反序列化支持。 -
big-endian
- 使用大端格式,适用于非 AMD64/x86-64 处理器。
贡献
请积极贡献!问题和拉取请求都受欢迎。
感谢您一点一滴地帮助改进软件!
依赖项
~6–485KB