SwiftyOLED

一个基于 SSD1306 和 SSD1305 驱动的 OLED 显示屏 Swift 库。 它仅仅是一组用于处理上述驱动的函数。 它**不是**一个图形库。 对于图形库,我推荐 SwiftyGFX,我将在此处用作示例。 但是,您可以自由使用自己的图形库。

开始使用 💡

在本节中,您将创建您的第一个项目

准备工作

依赖项

在您的 Package.swift 文件中

.package(url: "https://github.com/3Qax/SwiftyOLED.git", from: "1.0.0"),
.package(url: "https://github.com/3Qax/SwiftyGFX.git", from: "1.0.0"),
.package(url: "https://github.com/uraimo/SwiftyGPIO.git", from: "1.0.0"),
.target(
    name: "NameOfYourProject",
    dependencies: ["SwiftyOLED", "SwiftyGFX", "SwiftyGPIO"]),

代码

将以下代码粘贴到您的源文件中,该文件很可能位于Sources/NameOfYourProject/main.swift中。 如果需要,更改 I2C 接口和 I2C 地址。 根据您购买的型号的规格设置显示屏的宽度和高度。

import SwiftyOLED
import SwiftyGFX
import SwiftyGPIO

let i2cs = SwiftyGPIO.hardwareI2Cs(for: .RaspberryPiPlusZero)!
// Make sure you entered a correct parameters below
let myOLED = OLED(connectedTo: i2cs[1], at: 0x3C, width: 128, height: 32)

let myText = Text("Hello world!")

myOLED.draw(points: myText.generatePointsForDrawing())
myOLED.display()

运行

只需执行 swift build,然后执行 swift run。 你应该看到: 连接到 PiOLED 的 Raspberry Pi 的图像,其上可见“Hello world!” 就是这样。 真的就这么简单! 完整的项目可以在/Examples/hello world/文件夹中找到。

用法 🛠

初始化

要创建 OLED 的实例,请使用以下初始化器

    public init(connectedTo interface: I2CInterface, at address: Int, width: Int, height: Int)

传递显示屏连接到的 I2C 接口,并指定设备侦听的地址。 根据您拥有的显示屏的规格输入宽度和高度(以像素为单位)。 可能是 128x32 或 128x64。 如果显示屏无法访问,或者给定的高度或宽度没有意义(超出驱动程序支持的范围),则初始化将在运行时失败。

绘制

如果您今天不想编写自己的图形库,请查看我易于使用的图形库 SwiftyGFX。 它提供了一堆基本图形,如圆形和矩形,但也能够进行文本渲染。 有关详细信息,请参阅其 README.md。

一旦获得了对显示屏的引用,就可以开始绘制了! 这可以通过调用以下方法之一来完成

    public func draw(point: (Int, Int))
    public func draw(points: [(Int, Int)])

这样做会将给定坐标处的点或点的颜色更改为本地缓冲区中的白色。 这意味着在调用 display() 之前,绘制的点将不可见

显示屏的工作方式类似于 iOS 的坐标系。 所以

点由(分别)x 和 y 坐标组成

如果您想清除(使其变黑)本地缓冲区,请这样做

    public func clear()

或者,如果您是光明势力的一员,则此方法可能会派上用场

    public func fill()

反转

为了在白色显示屏上用黑色绘制内容,请使用上述方法并将显示屏设置为反向解释所有内容。 从逻辑上讲,clear() 会使整个本地缓冲区变为白色,而绘制会使给定的点变为黑色。 这就像调用

    public func set(inversion: Bool)

默认情况下它是关闭的。 您可以通过访问名为 isInverted只读属性来检查显示是否已反转。

显示绘制的内容

一旦您绘制了想要的所有内容并希望使其可见,请调用

    public func display()

这将使显示屏反映本地缓冲区的实际状态。 之后,本地缓冲区将被清除。 API 的设计方式就是这样,因为通过 I2C 传输数据是非常缓慢的操作。 仅在绘制完所有内容后才调用此方法。

亮度

甚至可以选择通过调用

    public func set(brightness: Brightness)

来更改亮度。 有两个推荐的设置:.dimmed.bright,但是如果您愿意,您可以设置自定义级别,例如 .custom(value: 0x8F)

开启和关闭

如果您的项目需要低功耗或仅不时在显示屏上显示数据,请查看

    public func turn(_ state: State)

它允许您将其打开 .on 或关闭 .off。 显示屏配置为在恢复(关闭后打开)时显示其收到的最新数据。 初始化后,显示屏会自动打开。 显示屏的状态存储在名为 isOn只读属性中。

性能 💨

性能已在运行 Raspbian Stretch Lite 的 geniune RaspberryPi ZERO v1.3 上使用 SwiftyGPIO 1.1.7 进行测试。

显示屏尺寸 (px) display() 的平均时间
96x16 7 毫秒
128x32 16 毫秒
128x64 32 毫秒

贡献 🤝

欢迎任何建议和贡献,只要它们符合标准。

致谢 📣

数据表 📚