树莓派2 GPIO 和 SwiftyGPIO
和全球的开源项目开发者一起工作非常有趣并且可以从中获得很多经验。随着计算机设备和宽带成本逐渐降低,给全世界的人带来了新技术,来自不同文化、不同背景的开发者们走到一起努力合作,共同创造了不起的成就。 自从苹果去年开源 Swift 编程语言以来,热心人们已经创建了 Ubuntu 安装包,移植到 ARM 设备上如 Raspberry Pi 2,创建了网页开发框架,而现在Umberto Raimondi 发布了 SwiftyGPIO,一个 Swift 库,能够和 ARM 设备(如 Raspberry Pi 和 BeagleBone Black)上的 GPIO 接口进行交互。 SwiftyGPIO README 详细解释了如何使用模块。正如 Umberto 所说,Swift Package Manager 目前还不能在 ARM 上使用(我曾经尝试进行编译,不过有时候发生抢占),所以我们还是下载 Rock Chalk 加油去年,我参与过使用 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 俨然已进军制造业,很有可能成为单板计算机开发项目的不二选择。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |