一个基于 SSD1306 和 SSD1305 驱动的 OLED 显示屏 Swift 库。 它仅仅是一组用于处理上述驱动的函数。 它**不是**一个图形库。 对于图形库,我推荐 SwiftyGFX,我将在此处用作示例。 但是,您可以自由使用自己的图形库。
在本节中,您将创建您的第一个项目
sudo apt-get install i2c-tools && sudo i2cdetect -y 1
。 感到困惑? 请查看这里swift package init --type executable
在您的 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
。 你应该看到: 就是这样。 真的就这么简单! 完整的项目可以在/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 毫秒 |
欢迎任何建议和贡献,只要它们符合标准。