`

swift -> 蓝牙

 
阅读更多

来源 : http://www.jianshu.com/p/38a4c6451d93

 

** 扫描 外设 或 连接 , 具体 DEMO 看 附件 。

 

//
//  ViewController.swift
//  蓝牙中心设备Swift
//
//  Created by 吴浩 on 2018/1/12.
//  Copyright © 2018年 wuhao. All rights reserved.
//

import UIKit
import CoreBluetooth

class ViewController: UIViewController {

    private let Service_UUID: String = "CDD1"
    private let Characteristic_UUID: String = "CDD2"
    
    @IBOutlet weak var textField: UITextField!
    private var centralManager: CBCentralManager?
    private var peripheral: CBPeripheral?
    private var characteristic: CBCharacteristic?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "蓝牙中心设备"
        centralManager = CBCentralManager.init(delegate: self, queue: .main)
    }


    @IBAction func didClickGet(_ sender: Any) {
        self.peripheral?.readValue(for: self.characteristic!)
    }
    
    @IBAction func didClickPost(_ sender: Any) {
        let data = (self.textField.text ?? "empty input")!.data(using: String.Encoding.utf8)
        self.peripheral?.writeValue(data!, for: self.characteristic!, type: CBCharacteristicWriteType.withResponse)
    }
    
}


extension ViewController: CBCentralManagerDelegate, CBPeripheralDelegate {
    
    // 判断手机蓝牙状态
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case .unknown:
            print("未知的")
        case .resetting:
            print("重置中")
        case .unsupported:
            print("不支持")
        case .unauthorized:
            print("未验证")
        case .poweredOff:
            print("未启动")
        case .poweredOn:
            print("可用")
            central.scanForPeripherals(withServices: nil, options: nil)
        }
    }
    
    func peripheralDidUpdateName(_ peripheral: CBPeripheral) {
        print("update--")
        print(peripheral)
    }
    
    /** 发现符合要求的外设 */
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        self.peripheral = peripheral
        print("scan return: ---- ")
        if(peripheral != nil){
            //print(peripheral.identifier.uuidString)
            print(peripheral.name)
            //print(advertisementData)
        }
        // 根据外设名称来过滤
//        if (peripheral.name?.hasPrefix("WH"))! {
//            central.connect(peripheral, options: nil)
//        }
        //central.connect(peripheral, options: nil)
    }
    
    /** 连接成功 */
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        self.centralManager?.stopScan()
        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
        self.textField.text = String.init(data: data!, encoding: String.Encoding.utf8)
    }
    
    /** 写入数据 */
    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
        print("写入数据")
    }
}






















 

 

 

 

分享到:
评论

相关推荐

    swift-iOS蓝牙工具封装库让你更容易的操作蓝牙

    Swift-iOS蓝牙工具封装库是iOS开发者用于便捷地操控蓝牙设备的一个强大框架。这个库将复杂的Core Bluetooth框架进行了封装,提供了简洁易用的接口,使得蓝牙功能的集成变得更为直观和高效。在本文中,我们将深入探讨...

    swift-BlueCap-iOS蓝牙LE框架

    **Swift-BlueCap-iOS蓝牙LE框架详解** Swift-BlueCap-iOS蓝牙低功耗(BLE)框架是一款专为iOS设备设计的库,用于轻松、高效地与支持Bluetooth Low Energy (BLE) 的外围设备交互。BlueCap使得在Swift中进行蓝牙开发...

    swift-Bluetooth4.0Demo蓝牙4.0简单使用demo

    在项目中引入CoreBluetooth框架,可以通过Xcode的Target Settings -> General -> Frameworks, Libraries, and Embedded Content来添加。 1. **创建CBCentralManager**: 这是CoreBluetooth的核心类,代表了iOS设备...

    swift-EasyBluetooth一款iOSBLE蓝牙调试工具

    **Swift-EasyBluetooth:iOS BLE蓝牙调试工具** Swift-EasyBluetooth是一款专为iOS开发者设计的BLE(Bluetooth Low Energy)蓝牙调试工具,它简化了iOS应用中的蓝牙开发流程,使得开发者可以更加高效地进行蓝牙功能...

    swift-蓝牙4.0BlueTooth4.0

    **Swift中的蓝牙4.0(Bluetooth 4.0)** 在Swift编程环境中,开发者可以利用Apple的Core Bluetooth框架来实现蓝牙4.0 (也称为Bluetooth Low Energy或BLE)的通信功能。蓝牙4.0是一种低功耗、高效能的无线通信技术,...

    swift-OABluetooth是基于苹果CoreBluetooth开发的轻量级蓝牙外设管理框架

    Swift-OABluetooth是一个专为苹果平台(iOS和OS X)设计的轻量级蓝牙外设管理框架,它基于苹果的CoreBluetooth框架构建。这个框架的主要目的是简化蓝牙外设的交互,提供更便捷、高效的设备连接和管理功能。下面将...

    swift-iOS引用蓝牙4.0的小demo

    在Swift中实现对蓝牙4.0(也称为BLE或Bluetooth Low Energy)的访问,是iOS设备与物联网设备交互的关键技术。这个"swift-iOS引用蓝牙4.0的小demo"提供了如何在Swift应用中使用Core Bluetooth框架的基础示例。Core ...

    swift-一个简洁高效的蓝牙库用于IOS和OSX

    当我们谈论“swift-一个简洁高效的蓝牙库用于iOS和OSX”时,我们指的是使用Swift编写的特定于蓝牙低功耗(BLE,也称为Bluetooth Smart)的技术,这允许设备之间进行无线通信,特别适合于传输少量数据和低功耗设备。...

    swift-Bleu是一个能够轻松处理CoreBluetooth的库

    Swift-Bleu是一个专为Swift开发者设计的库,旨在简化CoreBluetooth框架的使用,从而更加高效、便捷地处理蓝牙低功耗(BLE)设备的通信。CoreBluetooth是苹果iOS、macOS、watchOS和tvOS操作系统提供的原生框架,用于...

    swift-Vicinity-在后台复制检测和广播iBeacons

    在移动应用开发中,尤其是在iOS平台上,利用蓝牙低功耗(BLE)技术的iBeacons成为了位置服务的重要工具。Swift-Vicinity是一个专为iOS设计的开源库,它允许开发者在后台高效地进行iBeacon的检测和广播,极大地拓展了...

    swift-iOS系统原生蓝牙方法基础上的封装类

    在iOS平台上进行硬件交互,尤其是涉及...总的来说,这个封装类是为了简化Swift开发者在iOS平台上利用Core Bluetooth框架进行蓝牙通信的过程,通过提供更高级别的抽象和便利的API,让蓝牙功能的集成变得更加直观和高效。

    swift-GJLightBlueTooth轻量级iOS蓝牙开发库

    Swift-GJLightBlueTooth轻量级iOS蓝牙开发库是一个专为iOS平台设计的蓝牙开发框架,使用Swift语言编写,旨在简化蓝牙设备的交互过程,让开发者能够更便捷地实现蓝牙功能。在iOS设备上,蓝牙技术常用于物联网(IoT)...

    swift-基于BabyBluetooth的二次封装让你的蓝牙开发更加简单

    在这个场景下,`Swift-基于BabyBluetooth的二次封装`是一个针对Swift开发者优化蓝牙开发的解决方案。 `BabyBluetooth`是一个轻量级的蓝牙CoreBluetooth框架,由Objective-C编写,方便在Swift项目中使用。它为开发者...

    swift-TKeyboard通过蓝牙用Mac键盘输入内容到iPhone

    Swift-TKeyboard项目是一个创新的解决方案,它允许用户通过蓝牙连接将Mac键盘的输入直接传递到iPhone设备上,极大地提高了在iOS设备上进行文本输入的效率。这个项目是基于Swift编程语言实现的,属于Swift开发中的...

    swift-Coolog是iOS的可扩展和灵活的日志框架

    你可以创建自己的日志输出策略,比如将日志发送到服务器、保存到本地文件,甚至通过蓝牙设备发送。 2. **多级别支持**:Swift-CoolLog支持多种日志级别,如DEBUG、INFO、WARN、ERROR等,便于区分不同重要性的信息。...

    swift-RequestPermission-具有漂亮UI的Swift权限请求

    7. **蓝牙(Bluetooth)**:当应用需要与其他设备通过蓝牙连接时,需要请求蓝牙权限。 8. **健康数据(HealthKit)**:应用访问用户健康数据时,需要请求健康数据权限。 9. **通知(Notifications)**:应用希望向...

    swift-本项目是通过Swift语言来实现IOS中蓝牙4.0的开发

    在本项目中,我们聚焦于使用Swift来实现iOS设备对蓝牙4.0(也称为Bluetooth Low Energy,BLE)的开发,这是一项重要的技术,允许设备进行低功耗的数据传输,尤其适用于可穿戴设备、健康追踪器和其他物联网(IoT)设备...

    swift-应用跳转到系统的各级设置界面

    在Swift开发中,有时我们需要引导用户进入系统的特定设置界面,比如调整应用的权限、蓝牙连接、Wi-Fi设置等。这通常涉及到iOS系统提供的URL Scheme,它允许应用间进行深度链接,实现不同应用间的跳转。本教程将详细...

    swift-适用于iOS的基于接近的蓝牙LE共享

    标题 "swift-适用于iOS的基于接近的蓝牙LE共享" 指的是使用Swift编程语言实现的一个iOS应用功能,它利用了蓝牙低功耗(Bluetooth Low Energy, BLE)技术进行近距离数据共享。这种技术通常用于设备之间的无线通信,...

Global site tag (gtag.js) - Google Analytics