Мы используем ядро Bluetooth framework
.CBCentralManager
и CBP Периферийные классы.BLE -UART Светодиодная подсветка вкл / выкл.ниже приведены шаги для делегата конфигурации.
1) создан CBCentralManager & CBPeripheral Objects и назначен делегат.
2) проверьте состояние центрального менеджера.
3) отсканированные периферийные устройстваи получил рекламные данные.и подключил устройство.
4) Затем службы получения устройств и их характеристики.
5) сохраняют характеристики записи в других объектах.
Когда мы отправляем команду данных для записи наСохранены характеристики, что команда данных не работает.При вызове одной и той же команды данных для сохраненных характеристик более одного раза она работает нормально и включает устройство BLE.мы отправили 19 байтов команды.Мы отправляем команду, используя нажатие кнопки.
Мы пробовали много других демонстраций и кода для решения, но ничего не работает.ниже приведены ссылки на демонстрации, которые я упоминал.
https://www.google.com/amp/s/amp.reddit.com/r/swift/comments/4g1gvn/problem_with_peripheralwritevalue_on_ble/
https://ericasadun.com/2017/03/21/bluetooth-lessons-ii-characteristics/
https://github.com/adafruit/Basic-Chat
шаг 1: -
override init() {
super.init()
cManager = CBCentralManager(delegate: self, queue: nil)
cPeripheral?.delegate = self
}
шаг 2: -
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
//Step 1
isblueToothOn = true
let options = [CBCentralManagerScanOptionAllowDuplicatesKey: false, CBConnectPeripheralOptionNotifyOnConnectionKey: true]
cManager?.scanForPeripherals(withServices:nil, options: options)
break
case .poweredOff:
isblueToothOn = false
appDelegate.hideIndicator()
delegate?.trunonBluetooth()
break
case .unauthorized :
print("unAuthorized")
break
default:
break
}
}
шаг 3: -
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
Получить Devie и подключиться.}
шаг 4: -
функциональное периферийное устройство (_ периферийное устройство: CBPeripheral, ошибка didDiscoverServices: ошибка?) {// Шаг 5: защитите let services = периферийные.сервисы else {return} для обслуживания вуслуги {
if service.uuid.uuidString.lowercased() == CharacteristicUUID.UUID_SERVICE {
appDelegate.cbServices = service
peripheral.discoverCharacteristics([CBUUID(string: CharacteristicUUID.UUID_RX),CBUUID(string: CharacteristicUUID.UUID_TX)], for: service)
}
}
}
шаг 5: -
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
if let characteristics = service.characteristics {
for characteristic in characteristics {
if characteristic.uuid == CBUUID(string: CharacteristicUUID.UUID_RX) {
rxCharacteristic = characteristic
//Once found, subscribe to the this particular characteristic...
peripheral.setNotifyValue(true, for: characteristic)
peripheral.readValue(for: characteristic)
let characteristicUuid = characteristic.uuid.uuidString.lowercased()
print("discovered characteristic: \(characteristicUuid) Read=\(characteristic.properties.contains(.read))")
// print("Rx Characteristic: \(characteristic.uuid)")
}
if characteristic.uuid == CBUUID(string: CharacteristicUUID.UUID_TX){
let characteristicUuid = characteristic.uuid.uuidString.lowercased()
print("discovered characteristic: \(characteristicUuid) write=\(characteristic.properties.contains(.write))")
appDelegate.txCharacteristic = characteristic
if characteristic.uuid.uuidString == "BB8A27E0-C37C-11E3-B953-0228AC012A70" {
}
}
cPeripheral.discoverDescriptors(for: characteristic)
}
}
}
шаг 6: -
func write () {
if appDelegate.txCharacteristic != nil && appDelegate.command.count > 0{
print("Arr Command : - \(appDelegate.command)")
if appDelegate.txCharacteristic!.uuid.uuidString == "BB8A27E0-C37C-11E3-B953-0228AC012A70" {
let arr:[UInt8] = appDelegate.command//[0x3A,0x11,0x05,0x40,0x40,0x03,0x00,0x00,0x00,0x00,0x1e,0x01,0x18,0x00,0x00,0x00,0x00,0x00,0x58]
let sendData:Data = Data(bytes: arr)
self.cPeripheral.writeValue(sendData , for: appDelegate.txCharacteristic!, type: .withoutResponse)
}
}
}
следуетвключить свет.