|
|
|
@ -10,6 +10,7 @@ import CoreBluetooth
|
|
|
|
|
protocol BluetoothManagerDelegate: AnyObject {
|
|
|
|
|
func didUpdateConnectionStatus(isConnected: Bool)
|
|
|
|
|
func didReceiveData(fromCharacteristic uuid: String, data: String)
|
|
|
|
|
func didDiscoverPeripherals(peripherals: [CBPeripheral]) // delegado a notificar de dispositivos encontrados
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
|
|
|
|
@ -24,6 +25,7 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
|
|
|
|
|
private var centralManager: CBCentralManager!
|
|
|
|
|
private var esp32Peripheral: CBPeripheral?
|
|
|
|
|
private var characteristics: [CBUUID: CBCharacteristic] = [:] // variable para almacenar características encontradas
|
|
|
|
|
private var discoveredPeripherals: [CBPeripheral] = [] // almacenar dispositivos encontrados
|
|
|
|
|
|
|
|
|
|
weak var delegate: BluetoothManagerDelegate? // delegado para notificaciones
|
|
|
|
|
|
|
|
|
@ -59,7 +61,11 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
|
|
|
|
|
|
|
|
|
|
// CBCentralManagerDelegate - Detectar y conectar al ESP32
|
|
|
|
|
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String: Any], rssi RSSI: NSNumber) {
|
|
|
|
|
if peripheral.name == "ESP32_BLE_Serial" {
|
|
|
|
|
let deviceName = peripheral.name ?? "Sin nombre"
|
|
|
|
|
let uuid = peripheral.identifier.uuidString
|
|
|
|
|
print("Dispositivo detectado: \(deviceName) - UUID: \(uuid)")
|
|
|
|
|
|
|
|
|
|
if peripheral.name == "ESP_32_BLE_ITM" {
|
|
|
|
|
self.esp32Peripheral = peripheral
|
|
|
|
|
self.esp32Peripheral?.delegate = self
|
|
|
|
|
centralManager.stopScan()
|
|
|
|
@ -118,4 +124,19 @@ class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
|
|
|
|
|
esp32Peripheral?.writeValue(data, for: cmdCharacteristic, type: .withResponse)
|
|
|
|
|
print("Comando enviado: \(command)")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func searchForDevices() {
|
|
|
|
|
discoveredPeripherals.removeAll()
|
|
|
|
|
if centralManager.state == .poweredOn {
|
|
|
|
|
centralManager.scanForPeripherals(withServices: nil, options: nil)
|
|
|
|
|
print("Buscando dispositivos BLE...")
|
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
|
|
|
|
|
self.centralManager.stopScan()
|
|
|
|
|
print("Deteniendo escaneo")
|
|
|
|
|
self.delegate?.didDiscoverPeripherals(peripherals: self.discoveredPeripherals)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
print("Bluetooth no esta disponible")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|