通过蓝牙将 IOS 应用程序连接到 Raspberry Pi 4

Ard*_*sar 3 bluetooth ios raspberry-pi bluetooth-lowenergy swift

我用 swiftUI 创建了一个新应用程序,并尝试使用 coreBluetooth 库连接 Raspberry Pi 4。我搜索了所有谷歌,但我坚持连接 Raspberry Pi 4。我可以找到所有设备(外围设备),但无法连接他们。

这是代码;

class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate {
    
    var myCentral: CBCentralManager!
    
    @Published var isSwitchedOn = false
    @Published var peripherals = [Peripheral]()
    
    override init() {
        super.init()

        myCentral = CBCentralManager(delegate: self, queue: nil)
        myCentral.delegate = self
    }
    
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            isSwitchedOn = true
        }
        else {
            isSwitchedOn = false
        }
    }
    
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        var peripheralName: String!
       
        if let name = advertisementData[CBAdvertisementDataLocalNameKey] as? String {
            peripheralName = name
        }
        else {
            peripheralName = "Unknown"
        }
       
        if peripheral.identifier.uuidString == "6D915395-3E79-0072-22A3-009DDC331F7C" {
            myCentral.stopScan()
            myCentral.connect(peripheral, options: nil)
            print("okokokokok")
        }
        
        let newPeripheral = Peripheral(id: peripherals.count, name: peripheralName, rssi: RSSI.intValue)
        print(newPeripheral)
        peripherals.append(newPeripheral)
    }
    
    func centralManager(central: CBCentralManager!,didConnectPeripheral peripheral: CBPeripheral!)
    {
        peripheral.discoverServices(nil)
        print("Connected")
        print(peripheral.name!)
        print(peripheral.services!)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

删除了 stackoverfow 的一些代码部分 bc

Koz*_*nik 5

您的连接问题不是持有对要连接的 CBPeripheral 对象的引用。所以你已经通过在课堂上引用它来解决了这个问题BLEManager

现在如何向 Raspberry 发送数据或从 Raspberry 获取数据?CBPeripheralDelegate那么你必须在你的班级中实施BLEManager

  1. 中央管理器完成发现可用服务后,它将调用 的didDiscoverServices方法CBPeripheralDelegate;您需要为发现的服务调用discoverCharacteristics 。
  2. discoverCharacteristics(_:for:)同样,当使用您在回调中调用的方法发现给定服务的特征时didDiscoverServices,如果您想了解特征更新,可以设置通知值。
  3. 发现特征后,您可以使用连接时引用的CBPeripheral实例的writeValue方法发送值。
  4. 当您从 Raspberry 发送特定特征的数据时,将调用didUpdateValueFor方法。CBPeripheralDelegate在这个回调中;您可以从CBCharacteristic获取接收到的数据。属性。请注意,该value属性是可选的,因此您需要小心处理它。