32个版本

0.8.1 2023年8月10日
0.8.0 2023年5月14日
0.7.1 2021年6月15日
0.7.0-alpha.32021年2月3日
0.2.0 2018年7月27日

#13 in 嵌入式开发

Download history 8040/week @ 2024-04-23 7804/week @ 2024-04-30 6629/week @ 2024-05-07 5372/week @ 2024-05-14 7231/week @ 2024-05-21 7002/week @ 2024-05-28 5485/week @ 2024-06-04 6558/week @ 2024-06-11 5899/week @ 2024-06-18 6779/week @ 2024-06-25 6804/week @ 2024-07-02 7172/week @ 2024-07-09 7558/week @ 2024-07-16 7212/week @ 2024-07-23 6870/week @ 2024-07-30 7285/week @ 2024-08-06

每月 30,710 下载
用于 174 crates (164 直接)

MIT/Apache

2.5MB
22K SLoC

Embedded graphics logo

Build Status Crates.io Docs.rs embedded-graphics on Matrix

嵌入式图形

嵌入式-graphics是一个专注于内存受限嵌入式设备的2D图形库。

嵌入式-graphics的核心目标是在不使用任何缓冲区的情况下绘制图形;该crate兼容no_std,无需动态内存分配器,也不需要预分配大量内存。为了实现这一点,它采用了一种基于Iterator的方法,其中像素颜色和位置是实时计算的,最小化保存状态。这使得消费应用程序可以使用更少的RAM,而几乎不牺牲性能。

它包含内置项,使得绘制2D图形原语变得容易

外部crate提供的一些附加功能

嵌入式-graphics被设计为可以被应用程序或其他crate扩展。这包括添加对不同图像格式的支持或实现自定义字体。

请注意,这些crate中的一些可能不支持嵌入式图形的最新版本。

如果您知道列表中不存在的crate,请创建一个问题以添加它。

显示驱动程序

为了支持许多不同类型的显示,嵌入式图形不包括任何直接驱动程序,但在DrawTarget API中提供了embedded-graphics-core,该API可以通过外部crate实现。除了真实显示器的驱动程序外,模拟器还可以用于开发过程中的代码测试。

Photographs showing embedded-graphics running on physical display hardware.

这只是社区为嵌入式图形添加支持的一些显示器。此列表来自crates.io上的依赖crate列表,可能遗漏了一些未发布的条目。如果有显示驱动程序应该添加到此列表中,请创建一个问题

请注意,某些驱动程序可能不支持嵌入式图形的最新版本。

  • 嵌入式图形Web模拟器:通过Webassembly在浏览器中模拟显示
  • epd-waveshare:Waveshare各种电子纸显示器(EPD)的驱动程序
  • hub75:hub75 rgb矩阵显示的rust驱动程序
  • ili9341:与ILI9341(和ILI9340C)TFT LCD显示器接口的平台无关驱动程序
  • ls010b7dh01:LS010B7DH01存储LCD显示器的平台无关驱动程序
  • push2_display:Ableton Push2嵌入式图形显示驱动程序
  • sh1106:SH1106 OLED显示器的I2C驱动程序
  • smart-leds-matrix:基于智能LED(如ws2812)的LED矩阵的驱动程序
  • ssd1306:SSD1306 OLED显示器的I2C和SPI(4线)驱动程序
  • ssd1309:100% Rust编写的SSD1309 OLED显示器的I2C/SPI驱动程序
  • ssd1322:SSD1322 OLED显示芯片的纯Rust驱动程序
  • ssd1331:SSD1331 OLED显示器的SPI(4线)驱动程序
  • ssd1351:SSD1351驱动程序
  • ssd1675:Solomon Systech SSD1675电子纸显示器(EPD)控制器的Rust驱动程序
  • st7565:基于ST7565的显示器的SPI驱动程序
  • st7735-lcd:使用ST7735驱动程序的显示器的Rust库
  • st7789:ST7789显示器的Rust驱动程序库
  • st7920:Rust中的ST7920 LCD驱动程序
  • gc9a01-rs:Gc9a01显示驱动程序的SPI 4线驱动程序

模拟器

嵌入式图形包含一个模拟器!该模拟器可用于测试和调试嵌入式图形代码,或生成示例和交互式演示以展示嵌入式图形功能。

A screenshot of embedded-graphics running in its simulator.

查看示例存储库,了解嵌入式图形能做什么,以及它在显示屏上可能看起来是什么样子。您可以按以下方式运行示例

git clone https://github.com/embedded-graphics/examples.git
cd examples/eg-0.7

cargo run --example hello-world

功能特性

可以通过将以下功能添加到您的Cargo.toml中启用附加功能。

  • nalgebra_support - 使用具有no_std支持的Nalgebra crate,以启用从nalgebra::Vector2PointSize的转换。

  • fixed_point - 使用定点算术代替所有三角计算中的浮点数。

  • defmt - 在可能的情况下为所有类型提供defmt::Format的实现。defmt是一个日志库,尽可能将工作转移到单独的日志机器上,使其特别适合低资源MCU。请注意,defmt可能不适用于嵌入式图形支持的较旧版本的rustc。

从旧版本迁移

实现显示驱动程序的embedded_graphics支持

要为显示驱动程序添加嵌入式图形支持,必须实现DrawTarget(来自embedded-graphics-core)。这允许所有嵌入式图形项由显示渲染。请参阅DrawTarget文档以了解实现细节。

示例

绘图示例

A grid of screenshots showing primitives, text and other items that can be drawn using embedded-graphics.

有关使用嵌入式图形绘制原语、文本和图像的示例可以在此处找到。

形状和文本

以下示例将一些形状和文本绘制到用于目标硬件的MockDisplay中。该模拟器也可以用于调试、开发或硬件不可用的情况下。

use embedded_graphics::{
    mono_font::{ascii::FONT_6X10, MonoTextStyle},
    pixelcolor::BinaryColor,
    prelude::*,
    primitives::{
        Circle, PrimitiveStyle, PrimitiveStyleBuilder, Rectangle, StrokeAlignment, Triangle,
    },
    text::{Alignment, Text},
    mock_display::MockDisplay,
};

fn main() -> Result<(), std::convert::Infallible> {
    // Create a new mock display
    let mut display: MockDisplay<BinaryColor> = MockDisplay::new();

    // Create styles used by the drawing operations.
    let thin_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 1);
    let thick_stroke = PrimitiveStyle::with_stroke(BinaryColor::On, 3);
    let border_stroke = PrimitiveStyleBuilder::new()
        .stroke_color(BinaryColor::On)
        .stroke_width(3)
        .stroke_alignment(StrokeAlignment::Inside)
        .build();
    let fill = PrimitiveStyle::with_fill(BinaryColor::On);
    let character_style = MonoTextStyle::new(&FONT_6X10, BinaryColor::On);

    let yoffset = 10;

    // Draw a 3px wide outline around the display.
    display
        .bounding_box()
        .into_styled(border_stroke)
        .draw(&mut display)?;

    // Draw a triangle.
    Triangle::new(
        Point::new(16, 16 + yoffset),
        Point::new(16 + 16, 16 + yoffset),
        Point::new(16 + 8, yoffset),
    )
    .into_styled(thin_stroke)
    .draw(&mut display)?;

    // Draw a filled square
    Rectangle::new(Point::new(52, yoffset), Size::new(16, 16))
        .into_styled(fill)
        .draw(&mut display)?;

    // Draw a circle with a 3px wide stroke.
    Circle::new(Point::new(88, yoffset), 17)
        .into_styled(thick_stroke)
        .draw(&mut display)?;

    // Draw centered text.
    let text = "embedded-graphics";
    Text::with_alignment(
        text,
        display.bounding_box().center() + Point::new(0, 15),
        character_style,
        Alignment::Center,
    )
    .draw(&mut display)?;

    Ok(())
}

此示例也包含在示例存储库中,可以使用cargo run --example hello-world运行。它产生以下输出

Embedded Graphics Simulator example screenshot

更多示例可以在示例存储库中找到。

最低支持的Rust版本

嵌入式图形的最低支持Rust版本为1.71.1或更高版本。请确保您安装了正确的Rust版本,最好是https://rustup.rs

开发设置

请参阅开发设置指南

许可

许可协议为以下之一

任您选择。

贡献

除非您明确表示,否则您有意提交以供包含在作品中的任何贡献,如Apache-2.0许可证中定义的,应如上所述双重许可,不附加任何额外条款或条件。

依赖项