SwiftyTM1637

Swift4 tuxOS

一个基于 SwiftyGPIO 的 TM1637 7 段数码管芯片驱动程序,用于 LK-Digi LinkerKit 模块。

该模块很大程度上受到了 LK-Digi Wiki 上显示的 Python 代码示例的启发。

示例

一个简单的数字时钟

import Foundation
import SwiftyGPIO
import SwiftyTM1637

let gpios   = SwiftyGPIO.GPIOs(for: .RaspberryPi3)

// E.g. a LK-Digi connected to the P4/P5 digital pins
let display = TM1637(clock: gpios[.P4]!, data: gpios[.P5]!)

display.turnOff()
display.brightness = .typical

while true {
  let cal = Calendar.current
  let now = cal.dateComponents([.hour, .minute, .second], from: Date())
  
  let hour   = now.hour   ?? 0
  let minute = now.minute ?? 0
  let second = now.second ?? 0
  
  let segment2 = SevenSegment(digit: hour % 10, dot: second % 2 != 0)
  
  display.show(s1: hour   / 10, s2: segment2,
               s3: minute / 10, s4: minute % 10)
  
  Thread.sleep(forTimeInterval: 0.5)
}

如何设置和运行

注意:这适用于 32 位系统,64 位系统似乎尚未正常工作。

Raspi Docker 设置

您不必这样做,但我建议在 HypriotOS Docker 容器中运行。

设置很简单。 获取 flash 工具,然后将空的 SD 卡插入 Mac 并执行

$ flash --hostname zpi3 \
  https://github.com/hypriot/image-builder-rpi/releases/download/v1.8.0/hypriotos-rpi-v1.8.0.img.zip

启动 Raspi,您应该可以通过 zpi3.local 访问它。

我还建议使用 docker-machine(例如,参见 这里),但这不是必须的。

运行 ARM Swift 容器

像这样启动容器

$ docker run --rm \
  --cap-add SYS_RAWIO \
  --privileged \
  --device /dev/mem \
  -it --name swiftfun \
  helje5/rpi-swift-dev:4.1.0 /bin/bash

您最终会进入一个预装了一些开发工具(如 emacs)的 Swift 4.1 环境。 用户 swift 的 Sudo 密码是 swift

创建一个小钟

在容器中

swift@fb630076e0ec:~/testit$ mkdir testit && cd testit && swift package init --type executable
Creating executable package: testit
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/testit/main.swift
Creating Tests/

然后编辑 Package.swift 文件,使其如下所示

// swift-tools-version:4.0

import PackageDescription

let package = Package(
    name: "testit",
    dependencies: [
        .package(url: "https://github.com/uraimo/SwiftyGPIO.git",
                 from: "1.0.0"),
        .package(url: "https://github.com/SwiftyLinkerKit/SwiftyTM1637.git",
                 from: "0.1.2"),
    ],
    targets: [
        .target(
            name: "testit",
            dependencies: [ "SwiftyTM1637", "SwiftyGPIO" ]),
    ]
)

编辑 Sources/testit/main.swift 并添加 上面的 Swift 代码。

构建所有内容

swift@fb630076e0ec:~/testit$ swift build
Fetching https://github.com/uraimo/SwiftyGPIO.git
Fetching https://github.com/AlwaysRightInstitute/SwiftyTM1637.git
Cloning https://github.com/uraimo/SwiftyGPIO.git
Resolving https://github.com/uraimo/SwiftyGPIO.git at 1.0.5
Cloning https://github.com/SwiftyLinkerKit/SwiftyTM1637.git
Resolving https://github.com/SwiftyLinkerKit/SwiftyTM1637.git at 0.1.0
Compile Swift Module 'SwiftyGPIO' (10 sources)
Compile Swift Module 'SwiftyTM1637' (4 sources)
Compile Swift Module 'testit' (1 sources)
Linking ./.build/armv7-unknown-linux-gnueabihf/debug/testit

您需要使用 sudo 运行它,密码是 swift

swift@fb630076e0ec:~/testit$ sudo .build/armv7-unknown-linux-gnueabihf/debug/testit

如果您的 LK-Digi 连接到端口 D4/D5,它现在应该会显示一个漂亮的数字时钟!

想看看它的实际效果吗? 使用 LinkerKit 组件的 SwiftyGPIO 驱动的输入/输出

作者

SwiftyTM1637AlwaysRightInstitute 带给您。 我们喜欢反馈、GitHub Star、酷炫的 合同工作,以及您能想到的任何形式的赞扬。

Swift-ARM Slack 上有一个频道。