作者:Joe, 原文链接 ,原文日期:2016-02-08
译者: Crystal Sun ;校对: numbbbbb ;定稿:littledogboy
和全球的开源项目开发者一起工作非常有趣并且可以从中获得很多经验。随着计算机设备和宽带成本逐渐降低,给全世界的人带来了新技术,来自不同文化、不同背景的开发者们走到一起努力合作,共同创造了不起的成就。
自从苹果去年开源 Swift 编程语言以来,热心人们已经 创建了 Ubuntu 安装包 , 移植到 ARM 设备上如 Raspberry Pi 2 ,创建了 网页开发框架 ,而现在 Umberto Raimondi 发布了 SwiftyGPIO ,一个 Swift 库,能够和 ARM 设备(如 Raspberry Pi 和 BeagleBone Black)上的 GPIO 接口进行交互。
SwiftyGPIO README 详细解释了如何使用模块。正如 Umberto 所说,Swift Package Manager 目前还不能在 ARM 上使用(我曾经尝试进行编译,不过有时候发生抢占),所以我们还是下载 SwiftyGPIO.swift
文件,通过 wget 和 swiftc 来进行编译,将所有的东西连起来。
去年,我参与过 使用 Xcode 开发 Arduino 项目 ,写过一些关于 LED 灯闪烁的代码。这次我们在 Raspberry Pi 2 上用 Swift 语言再实现一次。
如果你打算尝试一下,我们需要:
我们会用到 GPIO4 针脚 和 GPIO27针脚,因为这两个在 Pi 2 GPIO 数据头中靠的很近。
下面是 mian.swift 文件,能够让两个 LED 灯来回闪烁。
import Glibc
let gpios = SwiftyGPIO.getGPIOsForBoard(.RaspberryPiPlus2Zero)
// GPIO4 and GPIO27
let leds = [gpios[.P4]!, gpios[.P27]!]
// Initialize our GPIOs
for led in leds {
led.direction = .OUT
led.value = 0
}
// Blink
while true {
for led in leds {
led.value = 1
sleep(1)
led.value = 0
}
}
直到 SwiftPM for ARM 被修复之前,为了能够完成编译成功运行这段代码,我们需要这样做:
# wget https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SwiftyGPIO.swift
# swiftc main.swift SwiftyGPIO.swift
# ./main
正确连接 LED 灯后,这两个灯会来回闪烁!
#选择颜色
我有一个闲置的 Linrose Tricolor LED 灯,我打算物尽其用。在这段示例代码中,我们已经写了一条命令行程序,允许你设置 LED 灯的颜色(或者关灯)。我在代码中用 //1, //2 标注出来了。
import Glibc
// 1
let gpiodefs = SwiftyGPIO.getGPIOsForBoard(.RaspberryPiPlus2Zero)
// 2
enum GPIOState:Int {
case Off = 0
case On
}
// 3
struct LedColor {
static let Off = (GPIOState.Off, GPIOState.Off)
static let Green = (GPIOState.On, GPIOState.Off)
static let Orange = (GPIOState.On, GPIOState.On)
static let Red = (GPIOState.Off, GPIOState.On)
}
// 4
let gpios = [gpiodefs[.P4]!, gpiodefs[.P27]!]
for gpio in gpios {
gpio.direction = .OUT
gpio.value = GPIOState.Off.rawValue
}
// 5
func setLedColor(color:(GPIOState,GPIOState), gpios:[GPIO]) {
gpios[0].value = color.0.rawValue
gpios[1].value = color.1.rawValue
}
// 6
guard Process.arguments.count == 2 else {
print("Usage: ./main off|green|orange|red")
exit(0)
}
let color = Process.arguments[1]
// 7
switch color {
case "off":
setLedColor(LedColor.Off, gpios:gpios)
case "green":
setLedColor(LedColor.Green, gpios:gpios)
case "orange":
setLedColor(LedColor.Orange, gpios:gpios)
case "red":
setLedColor(LedColor.Red, gpios:gpios)
default:
print("Invalid color")
}
#结束语
SwiftyGPIO 这个 API 能让你在 ARM 板子上用 Swift 使用 GPIO 。随着 Swift 语言的日新月异、与时俱进,Swift 俨然已进军制造业,很有可能成为单板计算机开发项目的不二选择。
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问http://swift.gg。