周辺にあるデバイスの発見ができない
アプリ作成初心者なので至らないところがあると思いますがよろしくお願いします。
Xcode 12.3
Swift 5
iOS 14.2
を用いています。
ArduinoからデータをBluetoothで送信して、iPhoneでデータを受け取るアプリを作成しています。
bluetoothモジュールを用いて、接続を行おうとしているのですがうまくいっていないため質問させていただきました。以下のソースで行っています。
ソースコード
ViewController(swift)
1 2import UIKit 3import CoreBluetooth 4 5class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate { 6 7 private var isScanning = false 8 private var centralManager: CBCentralManager! 9 private var peripheral: CBPeripheral! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // セントラルマネージャ初期化 15 centralManager = CBCentralManager(delegate: self, queue: nil) 16 } 17 18 override func didReceiveMemoryWarning() { 19 super.didReceiveMemoryWarning() 20 } 21 22 // ========================================================================= 23 // MARK: CBCentralManagerDelegate 24 25 // セントラルマネージャの状態が変化すると呼ばれる 26 func centralManagerDidUpdateState(_ central: CBCentralManager) { 27 if central.state == CBManagerState.poweredOn{ 28 print("state: (central.state)") 29 } 30 } 31 32 // 周辺にあるデバイスを発見すると呼ばれる 33 private func centralManager(central: CBCentralManager, 34 didDiscoverPeripheral peripheral: CBPeripheral, 35 advertisementData: [String : AnyObject], 36 RSSI: NSNumber) 37 { 38 print("発見したBLEデバイス: (peripheral)") 39 40 if let name = peripheral.name, name.hasPrefix("DSD TECH") { 41 self.peripheral = peripheral 42 centralManager.connect(peripheral, options: nil) 43 } 44 } 45 46 // ペリフェラルへの接続が成功すると呼ばれる 47 func centralManager(central: CBCentralManager, 48 didConnectPeripheral peripheral: CBPeripheral) 49 { 50 print("接続成功!") 51 52 // サービス探索結果を受け取るためにデリゲートをセット 53 peripheral.delegate = self 54 55 // サービス探索開始 56 peripheral.discoverServices(nil) 57 } 58 59 // ペリフェラルへの接続が失敗すると呼ばれる 60 private func centralManager(central: CBCentralManager, 61 didFailToConnectPeripheral peripheral: CBPeripheral, 62 error: NSError?) 63 { 64 print("接続失敗・・・") 65 } 66 67 // ========================================================================= 68 // MARK:CBPeripheralDelegate 69 70 // サービス発見時に呼ばれる 71 private func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) { 72 73 if let error = error { 74 print("エラー: (error)") 75 return 76 } 77 78 guard let services = peripheral.services, services.count > 0 else { 79 print("no services") 80 return 81 } 82 print("(services.count) 個のサービスを発見! (services)") 83 84 for service in services { 85 // キャラクタリスティック探索開始 86 peripheral.discoverCharacteristics(nil, for: service) 87 } 88 } 89 90 // キャラクタリスティック発見時に呼ばれる 91 private func peripheral(peripheral: CBPeripheral, 92 didDiscoverCharacteristicsForService service: CBService, 93 error: NSError?) 94 { 95 if let error = error { 96 print("エラー: (error)") 97 return 98 } 99 100 guard let characteristics = service.characteristics, characteristics.count > 0 else { 101 print("no characteristics") 102 return 103 } 104 print("(characteristics.count) 個のキャラクタリスティックを発見! (characteristics)") 105 106 for characteristic in characteristics { 107 // Readプロパティを持つのキャラクタリスティックの値を読み出す 108 if characteristic.properties.contains(.read) { 109 peripheral.readValue(for: characteristic) 110 } 111 } 112 } 113 114 // データ読み出しが完了すると呼ばれる 115 private func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) 116 { 117 if let error = error { 118 print("読み出し失敗...error: (error), characteristic uuid: (characteristic.uuid)") 119 return 120 } 121 122 print("読み出し成功!service uuid: (characteristic.service.uuid), characteristic uuid: (characteristic.uuid), value: (String(describing: characteristic.value))") 123 124 // バッテリーレベルのキャラクタリスティックかどうかを判定 125 if characteristic.uuid.isEqual(CBUUID(string: "2A19")) 126 { 127 var _: CUnsignedChar = 0 128 129 // 1バイト取り出す 130// characteristic.value?.getBytes( byte, length: 1) 131 132 func getbytes(_ byte:UnsafeMutablePointer<UInt8>){ 133 print("Battery Level: (byte)") 134 } 135 } 136 } 137 138 // ========================================================================= 139 // MARK: Actions 140 141 @IBAction func scanBtnTapped(sender: UIButton) { 142 if !isScanning { 143 isScanning = true 144 centralManager.scanForPeripherals(withServices: nil, options: nil) 145 146 sender.setTitle("STOP SCAN", for: UIControl.State.normal) 147 } else { 148 centralManager.stopScan() 149 sender.setTitle("START SCAN", for: UIControl.State.normal) 150 isScanning = false 151 } 152 } 153} 154
発生している問題・エラーメッセージ
表示されているのは以下のメッセージのみです。 state: CBManagerState 周辺のデバイスを発見するところからできていないです。 これ以降、どのようにしたら表示されるか教えていただきたいです。
試したこと
Bluetoothモジュールは3種類ほど試しましたが同じ状態で止まっています。
iPhoneアプリ「LightBlue」でbluetoothモジュールは表示され、接続することはできています。
回答1件
あなたの回答
tips
プレビュー