Код BLE Swift сканирует, но не находит устройства BLE - PullRequest
0 голосов
/ 24 августа 2018

В Swift и Xcode 9 я пытаюсь сканировать все устройства BLE и подключаться к ним. Этот код должен выводить «no name» для всех найденных устройств BLE. Сканирование работает, но мои устройства BLE не обнаружены. Рядом со мной есть телефон Android с BLE, который я не могу найти. Симулятор устройства: iPhone 6s, блютуз включен -ON

import UIKit
import CoreBluetooth

//let  svcLight = CBUUID.itit(string: "24958294582945")

class BLEViewController: UIViewController , CBCentralManagerDelegate, CBPeripheralDelegate{
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        //scan for peripherals if "on" state change
        if central.state == CBManagerState.poweredOn{
            //not concerned with any services for now, and we are not passing in any options
            central.scanForPeripherals(withServices: nil, options: nil)
            print("scanning...")
            //check for other states, add if else statements
        }
    }

    //handle the callback for when something is found
    //diddiscover was the autocomplete word for a peripheral
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

        if peripheral.name?.contains("POR 1007BT") == true {
        //even if the peripheral doesn't have a name, we will get some info for it
            print (peripheral.name ?? "no name")
            centralManager.stopScan()
            print(advertisementData)
            //connect to the peripheral now
            central.connect(peripheral, options: nil)
            //store a local copy of the peripheral in the property
            myPeripheral = peripheral
    }
}
    //so our central can begin scanning again
    //if peripheral disconnects for whatever reason, it will immidiately start scanning
    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
        central.scanForPeripherals(withServices: nil, options: nil)
    }

    //callback for connecting to a central, didconnect was the autocomplete word
    //discovr services
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print("connected \(peripheral.name)")
        peripheral.discoverServices(nil)
        peripheral.delegate = self

    }

    //callback for diddiscover services: auto complete: diddiscover
    //for each of the services in my peripheral, print out the UUID
    //may not need this funciton, need to check

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        //optionally binding it
        if let services  = peripheral.services {
            for svc in services {
                print(svc.uuid.uuidString)
            }
        }
    }


    //! is used to unwrap it so anywhere in the code, it doesn't need to be unwrapped as an optional
    var centralManager : CBCentralManager!
    //keep a reference/store our peripheral
    var myPeripheral : CBPeripheral?

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
   //create instance of CBManager
        //pass in self as the delegate to handle any callbacks
        centralManager = CBCentralManager.init(delegate: self, queue: nil)


    }
...