2017-02-21 3 views
0

J'ai un périphérique (nommé plus tard "scanner") et d'autres périphériques (nommé plus tard "pierre"). Le scanner peut scanner les pierres et afficher leurs informations sur l'affichage intégré. Scanner peut envoyer des informations sur les pierres via Bluetooth et je veux lire ces données et l'utiliser dans mon application. J'ai commencé l'implémentation de la connexion de code mais j'ai découvert un problème. Voici mon code:Pourquoi je ne reçois pas d'instance de périphérique jumelé via CoreBluetooth?

import UIKit 
import CoreBluetooth 

class BluetoothViewController: UIViewController { 

    var manager:CBCentralManager! 
    var peripheral:CBPeripheral! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     manager = CBCentralManager(delegate: self, queue: nil) 
    } 
} 

extension BluetoothViewController: CBCentralManagerDelegate { 

    func centralManagerDidUpdateState(_ central: CBCentralManager) { 
     if central.state == .poweredOn { 
      central.scanForPeripherals(withServices: nil, options: nil) 
     } 
     else { 
      print("Bluetooth not available.") 
     } 
    } 

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 
     print("peripheral \(peripheral)") 
     print("rssi \(RSSI)") 
     print("advertisementData: \(advertisementData)") 
     print("--------") 
    } 

    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { 
     print(peripheral) 
    } 

    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) { 
     print(peripheral) 
    } 

    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 
     print(peripheral) 
    } 
} 

extension BluetoothViewController: CBPeripheralDelegate { 

} 

Le problème est scanner ne figure pas dans

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

et

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

jamais appeler.

Notez que mon iPhone est connecté avec un scanner et un scanner, dites-moi que la connexion fonctionne.

Qu'est-ce que je veux réaliser?

Je veux créer viewcontroller qui vérifie si le scanner est connecté.

if connected then 
    get scan information 
else 
    find device and connect 
get scan information 

Aidez-moi s'il vous plaît. :)

Modifier

Dans LightBlue Explorer app mon appareil de scanner ne semble pas. Mais avec ce app fonctionne parfaitement. Peut-être que l'utilisation de CoreBluetooth est un mauvais moyen de le faire. Qu'est-ce qui est mieux. Si les créateurs de l'application ci-dessus peuvent vous communiquer est une possibilité de le faire.

+1

Votre appareil de numérisation fait-il la publicité d'un service BLE? Essayez l'application LightBlue depuis l'App Store. – Paulw11

+0

@ Paulw11 Et si non? –

+0

Vous devez vous connecter explicitement au périphérique dans 'didDiscoverPeripheral' pour que la méthode' didConnect' soit appelée. Vous ne savez pas pourquoi votre appareil n'est pas découvert. Quelles sont exactement ces "pierres"? – Mark

Répondre

0

Merci @ commentaire Paulw11 j'ai réalisé que mon "scanner" utilise iPod Accessory Protocol. Pour m'assurer d'importer le framework ExternalAccessory et de vérifier les périphériques. Après l'appel cette fonction j'ai vu la liste des périphériques et mon scanner était là.