- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 Swift 开发一个 iOS 应用程序来集成蓝牙打印机来打印信息。我使用了 CoreBluetooth 框架,但不知道我可以写入哪些服务、特性来打印出
//find CBService
func peripheral(peripheral: CBPeripheral!, didDiscoverServices error: NSError!) {
//println("CBPeripheralDelegate didDiscoverServices")
for service in peripheral.services {
println("Service: Discover service \(service)")
println("Service: UUID \(service.UUID) ")
peripheral.discoverCharacteristics(nil, forService: service as! CBService)
}
}
//find CBCharacteristics
func peripheral(peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!, error: NSError!) {
//if service.UUID == CBUUID(string: "18F0"){
for characteristic in service.characteristics {
let chara: CBCharacteristic? = characteristic as? CBCharacteristic
println("Char: service \(service.UUID) Discover char \(chara)")
println("Char: UUID \(chara!.UUID)")
peripheral.readValueForCharacteristic(chara)
/*
println("0")
switch chara!.UUID {
case CBUUID(string: "2AF1"):
println("1")
var rawArray:[UInt8] = [0x01];
let data = NSData(bytes: &rawArray, length: rawArray.count)
peripheral.writeValue(data, forCharacteristic: chara, type: CBCharacteristicWriteType.WithoutResponse)
default: println("")
}
*/
}
//}
}
系统显示结果如下:
服务:发现服务服务:UUID电池服务:发现服务服务:UUID 1803服务:发现服务服务:UUID 1802服务:发现服务服务:UUID 1811服务:发现服务服务:UUID 1804服务:发现服务服务:UUID 18F0服务:发现服务服务:UUID 设备信息服务:发现服务服务:UUID E7810A71-73AE-499D-8C15-FAA9AEF0C3F2
Char:发现char字符:UUID 电池电量字符:发现字符字符:UUID 2A06字符:发现字符字符:UUID 2A06字符:发现字符字符:UUID 2A47字符:发现字符字符:UUID 2A46字符:发现字符字符:UUID 2A48字符:发现字符字符:UUID 2A45字符:发现字符字符:UUID 2A44字符:发现字符字符:UUID 2A07字符:发现字符字符:UUID 2AF1字符:发现字符字符:UUID 2AF0字符:发现字符字符:UUID 系统 ID字符:发现字符Char: UUID 制造商名称字符串字符:发现字符字符:UUID BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F
哪位蓝牙高手可以指导一下,谢谢
最佳答案
精简版只需写入具有属性 Write
或 WriteWithoutResponse
的任何非标准服务。确保第一次写入少于 20 个字节以避免超过缓冲区限制。
长版:我在使用蓝牙热敏打印机 (QSPrinter 5801 Bluetooth LE) 时遇到了同样的问题,该打印机与这个问题中的设备具有完全相同的服务和特性。我发现:
具有特征 2AF1
的服务 18F0
具有属性 WriteWithoutResponse
服务 E7810A71-73AE-499D-8C15-FAA9AEF0C3F2
具有特征 BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F
具有属性 Read+Write+Notify+Indicate
(其中Write
表示Write with response
)。
这是特征的官方属性列表:
Broadcast = 0x01,
Read = 0x02,
WriteWithoutResponse = 0x04,
Write = 0x08,
Notify = 0x10,
Indicate = 0x20,
AuthenticatedSignedWrites = 0x40,
ExtendedProperties = 0x80
通过使用位域乘法,一个属性可以有多个值。例如属性 0x30 在二进制中是 00110000,表示 Notify+Indicate。您需要获取二进制数(8 位)并将二进制位从右到左放在从上到下的值列表中:
0 Broadcast
0 Read
0 WriteWithoutResponse
0 Write
1 Notify
1 Indicate
0 AuthenticatedSignedWrites
0 ExtendedProperties
最后我发现我可以通过使用以下方式成功写入任一特征:
let bytesToPrint: [UInt8] = [27, 64, 10, 10, 10, 99, 105, 97, 111, 10, 10, 10]
let data = Data(bytes: bytesToPrint)
//使用特性 2AF1 和属性 WriteWithoutResponse
peripheral.writeValue(data, for: characteristic, type: CBCharacteristicWriteType.withoutResponse)
//使用具有属性写入的特性 BEF8D6C9-9C21-4C9E-B632-BD58C1009F9F
peripheral.writeValue(data, for: characteristic, type: CBCharacteristicWriteType.withResponse)
问题是我同时发送了太多字节的数据。每个蓝牙低功耗设备都有不同的缓冲区大小。我听说有人发现设备的缓冲区限制为 20、40、100、400 字节。在我的例子中,限制是 100,所以只要我开始发送少于 100 个字节,蓝牙设备就会做出正确的 react 。我的建议是一开始尝试发送少于 20 个字节,一旦成功,您可以增加发送的字节数,直到它停止工作,您就会知道您已达到缓冲区限制。
关于iOS CoreBluetooth打印CBService和CBCharacteristic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353112/
我在我的一个应用程序中启用了 CoreBluetooth。有一个中央 iOS 设备,以及最多 2 个可以连接到中央的外围 iOS 设备。 我通过使用中央订阅的外围设备上的一个特性实现了上游通信,我通过
我目前正在开发扫描我公司信标的 BLE 应用程序,我需要更新 CBCharacteristic 的值。 我在写入函数后没有收到任何错误,但更改并未反射(reflect)在 BLE 设备上。 我已经扫描
我有可以与 BLE 设备配合使用的应用程序。我有特征值,但无法将其转换为字符串。例如, value = 如何转换成字符串? 最佳答案 let dd = getCharacteristic.value
首要任务:运行 OSX 10.10.4、iOS 4、Xcode 6.3.2、iPhone 6、Swift 短篇小说:我这里有一个特定的蓝牙 LE 设备,当特性值发生变化时,我想从中接收通知,例如通过用
在最新的 Apple 文档中,CBCharacteristic 的 UUID 属性有一条线穿过它,并且表示它仅在 5.0 到 7.1 中可用。但是,您通常希望看到的“已弃用”一词却不见踪影。 更重要的
我正在尝试使用 CoreBluetooth 写入特定的已知特征。我觉得这应该是可能的,因为我使用了 Texas Instruments BLE 实用程序,您可以在连接的外围设备上选择“写入值”操作,只
在 CoreBluetooth 应用程序中,我想从通知切换到指示,以便我可以确保另一端收到数据。 在Apple的示例代码中BTLE Central Peripheral Transfer ,我尝试用
我有一个已成功连接的 BLE 设备。在这种情况下,每当我向 BLE 设备发送字符串“GET DATA”时,设备都会通过向我发送特定响应来响应。我正在使用 didDiscoverCharacterist
我正在使用 CoreBluetooth 框架制作一个应用程序,我最近将它移植到 swift 2.0。在我的代码中,我有一个全局变量,它是一个 CBCharacteristic,在 swift 1.2
如何比较这个? uuid 和字符串不能比较 func charValues() { let charValue = String(data: getCharacteristic.valu
大家好,我正在尝试让这个蓝牙 LE 设备连接到应用程序并获取值。我正在使用 Core Bluetooth,它应该可以获取值。我让它工作,但突然间它在更新时停止通知值。 func peripheral(
我正在我的应用程序中开发 BLE 功能。我在我的项目中添加了CoreBluetooth框架。 我已经添加了, import CoreBluetooth 在 swift 文件的起始位置。 现在,当我尝试
我创建了一个充当 CBPeripheral 的应用程序。我试图在连接的 Central 上显示服务和特征的名称,但我无法找到执行此操作的方法。我已经阅读了 CBCharacteristic 的类引用,
我无法将类型为 NSData 的 CBCharacteristic 的值属性转换为 NSString。我尝试了通常的 initWithData:encoding: NSString 方法,如下所示。但
我想从蓝牙模块读取数据。有一个特征有4个值,存储在8个字节/4个字中。 这是存储在 characteristic.value 中的数据: 0x01 0x01 0x00 0x01 0x04 0x05 0
当我当时加载任何方法时,它会向我显示此警告,因为我正在使用从方法中检索的特性 var cbChar : CBCharacteristic func bleManagerPeripheral(_ p
我是一名优秀的程序员,十分优秀!