У меня есть ключ OBD2, и мне нужно узнать скорость автомобиля через него (используя BLE и устройство iOS). В документации, поставляемой с ключом, не упоминались службы и характеристики, но после некоторой отладки я обнаружил несколько. Назовем их услугами 1, 2, 3.
- Сервис 1 имеет одну характеристику со свойством Read и свойством WriteWithoutResponse.
- Сервис 2 имеет одну характеристику со свойством Read и свойством Notify.
- Сервис 3 имеет две характеристики: характеристику A со свойством Read и свойством Notify и характеристику B со свойством Write и свойством WriteWithoutResponse.
Как узнать, какие характеристики мне нужны для отправки AT-команд и получения соответствующих данных, а затем как инициировать эту связь. В частности, мне нужно иметь возможность набирать скорость. Заранее спасибо.
Я пробовал следующее, но ничего не вышло:
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
for characteristic in service.characteristics! {
if characteristic.properties.contains(.notify) {
peripheral.setNotifyValue(true, for: characteristic)
}
if characteristic.properties.contains(.write) {
let commandString = "010D\r"
if let commandData = commandString.data(using: .utf8) {
peripheral.writeValue(commandData, for: characteristic, type: .withoutResponse)
peripheral.writeValue(commandData, for: characteristic, type: .withResponse)
}
}
}
}
А потом чего-то ожидать в:
func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) {
if let value = characteristic.value {
let text = String(data: value, encoding: String.Encoding.utf8)
self.onNotifyReceived(text)
}
}
"010D\r"
, преобразованный вData
с использованием кодировки UTF8, должен быть допустимым сообщением? Кто тебе это сказал? - person Larme   schedule 06.12.2018