#raspberry-pi #rgb-led #screen #framebuffer #8x8 #sensehat

sensorhat-screen

一个用于在Raspberry Pi Sense HAT设备上使用8x8-LED矩阵(RGB565着色)的库

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

MIT许可证

150KB
3K SLoC

用于Raspberry Pi Sense HAT LED屏幕的库

crates.io docs Build Status

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找到最新版本的文档。

它包含对库中包含的类型的总体描述,它是了解可用方法的良好起点。

示例

源代码示例

您可以在源代码中找到工作示例。

  • 闪烁RGB形状

    此示例手动构建低级FrameLine,在设定的时间间隔内将其写入Screen

  • ゆにち(Yunichi)给Toño的信

    此示例使用了内置的8x8 FontCollection。该集合用于净化用户提供的 &str,返回一个仅包含FontCollection提供的字符的 FontString(基本上,完整的 latin 集合,一些 greek,一些 hiragana,以及传统的 ascii boxascii block 集合)。

    每个字体都被赋予了50%的白色描边颜色,PixelColor::WHITE.dim(0.5),然后它被转换为一个 FrameLine,最后写入到 Screen

    有关更多详细信息,请参阅font8x8 库。

  • 旋转演示

    此示例使用 PixelFrame,这是一个用于表示8x8 LED矩阵中每个像素的直观包装器:[PixelColor; 64]

    letter 示例类似,它也使用了内置的 FontCollection,创建了两个手工制作的 PixelFrame,由黄色的 Ñ 和紫色的 ó 组成。

    然后,每个帧将进行逆时针旋转,每次旋转90°。

  • 偏移演示

    从一个空屏幕和两个字体符号开始。然后通过逐步设置 Offset,使每个符号从左侧滑动进入。

    符号完全显示后,它将向右滑动,再次通过增加偏移量,直到符号消失。

    使用上下偏移方向重复相同的过程。

  • 裁剪演示

    Clip 是由两个 PixelFrame 合并而成的 PixelFrame,它们用于手动构建一系列帧。通常,您更喜欢使用 ScrollFrameSequence 迭代器。

  • 滚动 - 从顶部到底部

    名称解释一切:它构建一个帧滚动,并从顶部到底部逐个显示裁剪帧。

    使用 FontStringScrollFrameSequence 来工作。

  • 滚动 - 从底部到顶部

    名称解释一切:它构建一个帧滚动,并从底部到顶部逐个显示裁剪帧。

    使用 FontStringScrollFrameSequence 来工作。

  • 滚动 - 从左到右

    名称解释一切:它构建一个帧滚动,并从左到右逐个显示裁剪帧。

    使用 FontStringScrollFrameSequence 来工作。

  • 滚动 - 从右到左

    名称解释一切:它构建一个帧滚动,并从右到左逐个显示裁剪帧。

    使用 FontStringScrollFrameSequence 来工作。

一个简单、低级示例

以下程序展示了如何

  • 打开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 特性

默认情况下,包含 basiclinux-framebuffer 特性。

basic 特性

一组不需要硬件的功能。这主要是如果您正在编写模拟器/仿真器等,可能会想使用的代码。它包括 fontsoffsetrotateclipscrollserde-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