Nunchuck.swift

一个用于 Wii Nunchuck 控制器的 Swift 库

Linux-only Swift 4 compatible License: MIT

Nunchuck connector

概要

该库从通过 I2C 连接到您的 RaspberryPi 或类似板的 Wii Nunchuck 控制器读取加速计、操纵杆和按钮值。

硬件细节

市场上有一些这种控制器的廉价克隆品,它们与原始控制器的区别在于启用控制器所需的初始化顺序。提供的几个默认值应涵盖大多数可用的型号。

控制器需要 3.3V 才能工作,但应该可以承受 5V 电压,您可能需要一个专有连接器的适配器,以便更容易地访问各个引脚。 我使用的是 Olimex 板的 ICSP 适配器,但只要您可以将东西连接到它(例如,杜邦母头连接器或直接将其连接到 RaspberryPi 排针),任何适配器都可以。

如果您想通过终端使用控制器,它的 I2C 地址是 0x52(不是十进制,就像许多指南报告的那样)。

用法

要初始化此库的 Nunchuck 类,您需要一个来自 SwiftyGPIOI2CInterface 实例,并且如果控制器不是原装的,则需要指定控制器类型(尝试所有枚举,直到找到一个有效的)。 可选地,也可以为非标准控制器指定 I2C 地址。

import SwiftyGPIO
import Nunchuck
import Foundation

let i2cs = SwiftyGPIO.hardwareI2Cs(for:.RaspberryPi2)!
let i2c = i2cs[1]

let mp = Nunchuck(i2c, type: .Knockoff1)

可以作为单个属性读取从控制器读取的值(加速度计值、模拟操纵杆位置和按钮状态)

public var AccelX: Int
public var AccelY: Int
public var AccelZ: Int
public var AnalogX: Int
public var AnalogY: Int
public var Buttons: Int

或者一次性读取所有值,调用 getAll() 方法

let (ax,ay,az,jx,jy,b) = mp.getAll()
print("Accelerometer - x:\(ax),y:\(ay),z:\(az)")
print("Analog Joystick - x:\(jx),y:\(jy)")
switch b {
   case 0:
       print("Buttons: Both pressed")
   case 1:
        print("Buttons: C pressed")
   case 2:
        print("Buttons: Z pressed")
   default:
        print("Buttons: None pressed")
}

支持的板

所有由 SwiftyGPIO 支持的板:RaspberryPis、BeagleBones、C.H.I.P. 等...

要使用此库,您需要一个运行 Swift 3.x/4.x 的 Linux ARM 板。

下面的示例将使用 RaspberryPi 2 板,但您可以轻松修改示例以使用其他支持的板之一,RaspberryPi2 的完整工作演示项目可在 Examples 目录中找到。

安装

请参考 SwiftyGPIO 的 readme 文件获取 Swift 安装说明。

一旦您的板运行 Swift,如果您的版本支持 Swift Package Manager,您可以简单地将此库添加为项目的依赖项并使用 swift build 进行编译

  let package = Package(
      name: "MyProject",
      dependencies: [
        .Package(url: "https://github.com/uraimo/Nunchuck.swift.git", majorVersion: 2),
      ]
  ) 

目录 Examples 包含使用 SPM 的示例项目,编译它并使用 ./.build/debug/TestNunchuck 运行示例。

如果不支持 SPM,您需要手动下载该库及其依赖项

wget https://raw.githubusercontent.com/uraimo/Nunchuck.swift/master/Sources/Nunchuck.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SwiftyGPIO.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/Presets.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/I2C.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SunXi.swift  

下载所有文件后,创建一个额外的文件,其中包含您的应用程序的代码(例如,main.swift)。 当您的代码准备就绪时,使用以下命令编译它

swiftc *.swift

编译器将创建一个 main 可执行文件。