I'm actually confused how I can receive data using flutter_blue package, I can send data but I can not receive and this is the example I've been using:
startScan() { setState(() { connectionText = "Start Scanning"; }); scanSubScription = flutterBlue.scan().listen((scanResult) { if (scanResult.device.name == TARGET_DEVICE_NAME) { print('DEVICE found'); stopScan(); setState(() { connectionText = "Found Target Device"; }); targetDevice = scanResult.device; connectToDevice(); } }, onDone: () => stopScan()); } stopScan() { scanSubScription?.cancel(); scanSubScription = null; } connectToDevice() async { if (targetDevice == null) return; setState(() { connectionText = "Device Connecting"; }); await targetDevice.connect(); print('DEVICE CONNECTED'); setState(() { connectionText = "Device Connected"; }); discoverServices(); } disconnectFromDevice() { if (targetDevice == null) {} targetDevice.disconnect(); setState(() { connectionText = "Device Disconnected"; }); } discoverServices() async { if (targetDevice == null) return; List<BluetoothService> services = await targetDevice.discoverServices(); services.forEach((service) { // do something with service if (service.uuid.toString() == SERVICE_UUID) { service.characteristics.forEach((characteristic) { if (characteristic.uuid.toString() == CHARACTERISTIC_UUID) { targetCharacteristic = characteristic; // writeData("A 300 300 300"); setState(() { connectionText = "All Ready with ${targetDevice.name}"; }); } }); } }); } writeDataAndWaitForRespond() async { writeData("A 300 300 300"); List<BluetoothService> services = await targetDevice.discoverServices(); print("////////////////We're here, listening to Hive..."); // isDeviceTurnedOn = true; services.forEach((service) async { Future.delayed(const Duration(milliseconds: 500), () async { print("Entered the loop..."); var characteristics = service.characteristics; for (BluetoothCharacteristic c in characteristics) { List<int> value = await c.read(); String stringValue = new String.fromCharCodes(value); print("The recieved Characteristic Value is $stringValue and $value"); print("Entered the second loop..."); var descriptors = c.descriptors; print("The descriptors value is equal to: $descriptors"); for (BluetoothDescriptor d in descriptors) { List<int> value = await d.read(); print("Entered the third loop..."); String stringValue = new String.fromCharCodes(value); print("The recieved Value is $stringValue and $value"); } } }); }); } writeData(String data) { if (targetCharacteristic == null) return; List<int> bytes = utf8.encode(data); targetCharacteristic.write(bytes); } I'm totally confused, how can I use flutter_blue to receive data from my ESP32 device, the ESP32 is working properly and I've tested it using "BLE Scan", as far as I understood the writeDataAndWaitForRespond function should do the work but it doesn't and it won't even enter the following loop:
for (BluetoothDescriptor d in descriptors) { List<int> value = await d.read(); print("Entered the third loop..."); String stringValue = new String.fromCharCodes(value); print("The recieved Value is $stringValue and $value"); }
Please help, Thanks in advance.
writeyou're writing to a characteristic and expecting / reading a value from the descriptor? let me know if I don't understand it correctly.