[swift]CoreBluetooth(Client)

閱讀時間約 10 分鐘

CBCentralManager:藍芽管理中心,做外部設備搜尋、連接。

CBPeripheral:外部設備

CBCharacteristic:外部設備的特徵。

首先先宣告:

var centralManager: CBCentralManager = CBCentralManager.init(delegate: self, queue: .main)


判斷手機藍牙狀態:

// 判斷手機藍牙狀態
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .resetting:
print("resetting")
case .unsupported:
print("unsupported")
case .unauthorized:
print("unauthorized")
case .poweredOff:
print("poweredOff")
case .poweredOn:
print("poweredOn")
central.scanForPeripherals(withServices: [CBUUID.init(string: service_UUID)], options: nil)
default:
print("unknown")
}
}


發現符合要求的外設:

/** 發現符合要求的外設 */
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
self.peripheral = peripheral
// 根據外設名稱來過濾
// if (peripheral.name?.hasPrefix("WH"))! {
// central.connect(peripheral, options: nil)
// }
self.centralManager?.stopScan()
central.connect(peripheral, options: nil)
}


連接成功的回調:

/** 連接成功 */
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices([CBUUID.init(string: service_UUID)])
print("連接成功")
}


連接失敗的回調:

/** 連接失敗的回調 */
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print("連接失敗")
}


斷開連接的回調:

/** 斷開連接 */
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
print("斷開連接")
// 重新連接
central.connect(peripheral, options: nil) }
}


發現服務的回調:

/** 發現服務 */
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
for service: CBService in peripheral.services! {
print("外設中的服務有:\(service)")
}
//本例的外設中只有一個服務
let service = peripheral.services?.last
// 根據UUID尋找服務中的特徵
peripheral.discoverCharacteristics([CBUUID.init(string: characteristic_UUID)], for: service!)
}


發現特徵的回調:

/** 發現特徵 */
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
for characteristic: CBCharacteristic in service.characteristics! {
print("外設中的特徵有:\(characteristic)")
}
self.characteristic = service.characteristics?.last
// 讀取特徵裏的數據
peripheral.readValue(for: self.characteristic!)
// 訂閱
peripheral.setNotifyValue(true, for: self.characteristic!)
}


訂閱狀態的回調:

/** 訂閱狀態 */
func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("訂閱失敗: \(error)")
return
}
if characteristic.isNotifying {
print("訂閱成功")
} else {
print("取消訂閱")
}
}


接收到數據的回調:

/** 接收到數據 */
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
let data = characteristic.value
print(String.init(data: data!, encoding: String.Encoding.utf8)!)
}


主動傳送:

//主動傳送
func didClickPost(_ sender: Any) {
self.peripheral?.writeValue(Data(), for: self.characteristic!, type: CBCharacteristicWriteType.withResponse)
}


寫入數據:

/** 寫入數據 */
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
print("寫入數據")
}


主動接收:

//主動接收
func didClickGet(_ sender: Any) {
self.peripheral?.readValue(for: self.characteristic!)
}
avatar-img
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
小黑與程式的邂逅 的其他內容
儲存檔案: let savePanel = NSSavePanel() savePanel.canCreateDirectories = true savePanel.showsTagField = false savePanel.nameFieldStringValue = "localFile
用來操作 Core Data 的常數 private let coreDataContext = (NSApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 取的資料數量: func get
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { NSApplication.shared.terminate(self) return
字串交換: let str = "被誰喜歡,又喜歡誰呢?" // 交換 print(str.replacingOccurrences(of: ",又", with: "?")) //被誰喜歡?喜歡誰呢? 字串去首尾: let str = "被誰喜歡,又喜歡誰呢?" // 去首尾 print
int to data: //int to data var num = -12300 let data = Data.init(bytes: &num, count: MemoryLayout.size(ofValue: num)) // bytes : 8 elements //
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 向右位移: let shiftRightBin1Result = bin1>>1 print(String(shiftRightBin1R
儲存檔案: let savePanel = NSSavePanel() savePanel.canCreateDirectories = true savePanel.showsTagField = false savePanel.nameFieldStringValue = "localFile
用來操作 Core Data 的常數 private let coreDataContext = (NSApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 取的資料數量: func get
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { NSApplication.shared.terminate(self) return
字串交換: let str = "被誰喜歡,又喜歡誰呢?" // 交換 print(str.replacingOccurrences(of: ",又", with: "?")) //被誰喜歡?喜歡誰呢? 字串去首尾: let str = "被誰喜歡,又喜歡誰呢?" // 去首尾 print
int to data: //int to data var num = -12300 let data = Data.init(bytes: &num, count: MemoryLayout.size(ofValue: num)) // bytes : 8 elements //
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 向右位移: let shiftRightBin1Result = bin1>>1 print(String(shiftRightBin1R
你可能也想看
Google News 追蹤
Thumbnail
隨著科技的進步,無線通訊工具從 BB.Call 演進到智慧型手機,改變了我們的生活模式,也帶來莫大的方便。相對人際關係起了變化,過度依賴和使用手機是現代人的通病,造成人與人之間零互動。本文探討如何擺脫手機的控制,善用而不沉迷,以及現代人使用手機應有的禮儀。
Thumbnail
▪︎咒語描述: 在小型簡約塑膠白色波斯貓頭形藍牙音箱的項圈上添加藍牙符號,具有3D瓷質感,自然光滑無毛塑膠感,黃金比例五官。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
蘋果最近針對巧控鍵盤推出了韌體更新,主要是修復重要的藍牙連線漏洞。 攻擊者利用該漏洞,一旦獲得巧控鍵盤的實體存取權限,就能取得其藍牙配對金鑰,進而掌控所有與鍵盤連結的裝置。 蘋果公告,這次韌體更新版本號為2.0.6,適用於多款2021年之後推出的巧控鍵盤, 包括一般版、數位鍵盤版、Touch
Thumbnail
鯉魚是耳機使用愛好者,過去常常使用手機聽有聲書或音樂,原本都是用蘋果原廠的有線耳機(確實是好用),有一次朋友就送我它牌的無線藍芽耳機,我只能說:用過無線就回不去了~哈哈哈
Thumbnail
智慧照明系統是什麼?Zigbee、 Wi-Fi、藍芽應用一次告訴你! 在互聯網、互聯設備和智慧照明科技的時代,智慧照明系統也迎來了新一波的創新變革,其中包括以Zigbee、Wi-Fi和Bluetooth藍牙作為連接協定在內,RGB、RGBW、RGBCW、tunable white lights
Thumbnail
我透過這本書《9個實驗,印證祕密的力量 》...
過客每天的工作白天都是面對著電腦,昨天來上班一如往常第一個動作就是打開電腦連線,無奈怎麼樣都連不上網路° 第一個念頭就是打給電腦工程師,工程師請我把WiFi分享先關機,結果還是一樣都連不上,只好打電話跟中華電信求救,原來是中華電信那邊出了問題° 昨天就在跟家長聊這件事情,因為這位
今日到機關辦理事務,輪到我時,我的櫃檯服務人員A被隔壁人員的cue去協助處理她客戶C的手機內資訊,然後一陣子回來繼續服務我。 幾分鐘後,聽見……(稍稍省字 C小姐:我要找妳們主管,剛才那個誰怎麼可以說,手機不會用叫我回去問小孩? B櫃台:安撫C小姐 A櫃台:立刻站起去道歉,說:對不起,我錯了
Thumbnail
隨著科技的進步,藍芽喇叭已成為許多人日常生活中不可或缺的音響裝置。這裡為大家介紹三款超平價2000元有找的高品質藍芽喇叭,無論是戶外活動、家庭聚會還是辦公室放鬆,都能帶給你出色的音樂體驗。三款分別為,小米戶外藍芽喇叭、Sony SRS-XB13、JAM Hang Around
Thumbnail
隨著科技的進步,無線通訊工具從 BB.Call 演進到智慧型手機,改變了我們的生活模式,也帶來莫大的方便。相對人際關係起了變化,過度依賴和使用手機是現代人的通病,造成人與人之間零互動。本文探討如何擺脫手機的控制,善用而不沉迷,以及現代人使用手機應有的禮儀。
Thumbnail
▪︎咒語描述: 在小型簡約塑膠白色波斯貓頭形藍牙音箱的項圈上添加藍牙符號,具有3D瓷質感,自然光滑無毛塑膠感,黃金比例五官。
Thumbnail
iPhone 最新作業系統 iOS 18 控制中心大更新,預設有常用功能、音樂播放器、連線控制三個頁面,並允許使用者自訂頁面,可以直接在控制中心管理所需的功能、調整位置和選擇尺寸。
Thumbnail
蘋果最近針對巧控鍵盤推出了韌體更新,主要是修復重要的藍牙連線漏洞。 攻擊者利用該漏洞,一旦獲得巧控鍵盤的實體存取權限,就能取得其藍牙配對金鑰,進而掌控所有與鍵盤連結的裝置。 蘋果公告,這次韌體更新版本號為2.0.6,適用於多款2021年之後推出的巧控鍵盤, 包括一般版、數位鍵盤版、Touch
Thumbnail
鯉魚是耳機使用愛好者,過去常常使用手機聽有聲書或音樂,原本都是用蘋果原廠的有線耳機(確實是好用),有一次朋友就送我它牌的無線藍芽耳機,我只能說:用過無線就回不去了~哈哈哈
Thumbnail
智慧照明系統是什麼?Zigbee、 Wi-Fi、藍芽應用一次告訴你! 在互聯網、互聯設備和智慧照明科技的時代,智慧照明系統也迎來了新一波的創新變革,其中包括以Zigbee、Wi-Fi和Bluetooth藍牙作為連接協定在內,RGB、RGBW、RGBCW、tunable white lights
Thumbnail
我透過這本書《9個實驗,印證祕密的力量 》...
過客每天的工作白天都是面對著電腦,昨天來上班一如往常第一個動作就是打開電腦連線,無奈怎麼樣都連不上網路° 第一個念頭就是打給電腦工程師,工程師請我把WiFi分享先關機,結果還是一樣都連不上,只好打電話跟中華電信求救,原來是中華電信那邊出了問題° 昨天就在跟家長聊這件事情,因為這位
今日到機關辦理事務,輪到我時,我的櫃檯服務人員A被隔壁人員的cue去協助處理她客戶C的手機內資訊,然後一陣子回來繼續服務我。 幾分鐘後,聽見……(稍稍省字 C小姐:我要找妳們主管,剛才那個誰怎麼可以說,手機不會用叫我回去問小孩? B櫃台:安撫C小姐 A櫃台:立刻站起去道歉,說:對不起,我錯了
Thumbnail
隨著科技的進步,藍芽喇叭已成為許多人日常生活中不可或缺的音響裝置。這裡為大家介紹三款超平價2000元有找的高品質藍芽喇叭,無論是戶外活動、家庭聚會還是辦公室放鬆,都能帶給你出色的音樂體驗。三款分別為,小米戶外藍芽喇叭、Sony SRS-XB13、JAM Hang Around