测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年7月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Bas van Kuijck 维护。
Bluetonium 是一个 Swift 库,它使与蓝牙设备的通信变得简单。
Manager
将处理搜索设备和连接到设备。
import Bluetonium
let manager = Manager()
manager.delegate = self
manager.startScanForDevices()
如果找到设备,您将通过 func manager(_ manager: Manager, didFindDevice device: Device)
代理调用收到通知。您也可以在您管理器的 foundDevices
数组中获取所有找到的设备。
连接到设备很简单。
manager.connect(with: device)
device
来自 foundDevices
数组的设备。
ServiceModel
子类将代表一个服务,所有属性都表示特征。
此示例表示 电池服务
class BatteryServiceModel: ServiceModel {
enum Characteristic : String {
case batteryLevel = "2A19"
}
var batteryLevel: UInt8 = 0
override var serviceUUID:String {
return "180F"
}
override func mapping(_ map: Map) {
batteryLevel <- map[Characteristic.batteryLevel.rawValue]
}
}
注册 ServiceModel
子类。确保在实际连接设备之前做到这一点。
let batteryServiceModel = BatteryServiceModel()
func manager(_ manager: Manager, willConnectToDevice device: Device) {
device.register(serviceModel: batteryServiceModel)
}
ServiceModel
子类将代表一个服务,所有属性都表示特征。与外围设备交互仅在特征通过 func characteristicBecameAvailable(withUUID UUID: String)
函数成为可用后才能执行。
或者当 serviceReady
布尔值设置为 true
时。
建议创建一个包含UUID静态属性的struct,并与之配置ServiceModel
,这样您的应用程序就不需要在不同的地方硬编码UUID,并通过这种方式避免错误。(请参阅示例:项目中的HeartRateServiceModel)
batteryServiceModel.readValue(withUUID: "2A19")
// Or with completion
batteryServiceModel.readValue(withUUID: "2A19") { value in
print(value)
}
batteryServiceModel.batteryLevel = 10
batteryServiceModel.writeValue(withUUID: "2A19")
可能您的特征具有自定义的数据格式,或者具有尚未支持的数据格式。然后,您可以为此属性创建自己的自定义数据转换器。
自定义数据转换器需要符合具有两个函数的DataTransformer
协议。
class HeartRateDataTransformer: DataTransformer {
func transform(dataToValue data: Data?) -> MapValue {
// Used when reading from the characteristic.
// Transform Data to your property MapValue.
}
func transform(valueToData value: MapValue?) -> Data {
// Used when writing to the characteristic.
// Transform your property MapValue to Data.
}
}
要注册您自定义的数据转换器,您可以将其添加到映射函数中
func mapping(_ map: Map) {
heartRate <- (map["2A37"], HeartRateDataTransformer())
}
ServiceModel
有一个函数,可以让你为外部设备上的值变化注册。当你为你一个特征返回true
时,它将自动更新属性。
func registerNotifyForCharacteristic(withUUID UUID: String) -> Bool
我们欢迎反馈和pull requests。让我们让这个列表更长吧!
Bluetonium是在MIT许可下发布的。详细信息请参阅LICENSE。