swift corebluetooth 如何手动输入mac server地址和远程设备id?

我需要改一个open source的代码。目前的问题是当我要连接多个toio cube(远程设备)的时候,需要一个一个地打开蓝牙设备然后建立连接。过程可以说是非常的重复和麻烦。所以解决的方法是手动输入mac server地址和每个设备的id并且匹配连接。这样的话就方便许多。所以想请教一下大家我需要改以下这个代码的哪些部分?

//
//  BluetoothService.swift
//  toio100
//
//  Created by Saqoosha on 2020/08/11.
//  Copyright © 2020 Whatever Inc. All rights reserved.
//
import CoreBluetooth

final class BluetoothService: NSObject, CBCentralManagerDelegate {
    private var centralManager: CBCentralManager!
    private var peripherals: [CBPeripheral]!
    private var connected: [CBPeripheral]!
    private var cubes: [toioCoreCube]!

    func startBluetoothScan() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
        peripherals = []
        connected = []
        cubes = []
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
            case .poweredOff:
                print("Bluetooth PoweredOff")
                break
            case .poweredOn:
                print("Bluetooth poweredOn")
                centralManager.scanForPeripherals(withServices: [CBUUID(string: "10B20100-5B3B-4571-9508-CF3EFCD7BBAE")], options: nil)
                break
            case .resetting:
                print("Bluetooth resetting")
                break
            case .unauthorized:
                print("Bluetooth unauthorized")
                break
            case .unknown:
                print("Bluetooth unknown")
                break
            case .unsupported:
                print("Bluetooth unsupported")
                break
        }
    }

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String: Any], rssi RSSI: NSNumber) {
        if peripheral.name == "toio Core Cube" && !peripherals.contains(peripheral) {
            print(peripheral)
            print(advertisementData)
//            centralManager.connect(peripheral, options: nil)
//            peripherals.append(peripheral)
        }
    }

    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print("didConnect")
        if connected.contains(peripheral) { return }
        connected.append(peripheral)
        cubes.append(toioCoreCube(peripheral))
    }
}

class toioCoreCube: NSObject, CBPeripheralDelegate {
    var peripheral: CBPeripheral!

    init(_ peripheral: CBPeripheral) {
        super.init()
        self.peripheral = peripheral
        self.peripheral.delegate = self
        self.peripheral.discoverServices([CBUUID(string: "10B20100-5B3B-4571-9508-CF3EFCD7BBAE")])
    }

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        print("didDiscoverService")
//        print(peripheral.services)
        peripheral.discoverCharacteristics([CBUUID(string: "10B20103-5B3B-4571-9508-CF3EFCD7BBAE")], for: (peripheral.services?.first)!)
    }

    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        print("didDiscoverCharacteristicsFor")
//        print(service.characteristics)
        var data = Data()
        //        data.append(contentsOf: [0x03, 0x64, 0x01, 0x01, 0xFF, 0x00, 0x00]) // Turn on and off the lamp
        data.append(contentsOf: [0x04, 0x00, 0x03,
                                 0x04, 0x01, 0x01, 0xff, 0x00, 0x00,
                                 0x04, 0x01, 0x01, 0x00, 0xff, 0x00,
                                 0x04, 0x01, 0x01, 0x00, 0x00, 0xff])
        peripheral.writeValue(data, for: (service.characteristics?.first)!, type: .withoutResponse)
    }
}

一个非常有用的参考在这里:https://github.com/mitmediala...。这个是要达到的最终目标只不过是用python写的。大家可以看到里面有mac地址和蓝牙设备id。

阅读 959
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题