Модуль HC-05 с флаттером выдает PlatformException (connect_error, чтение не выполнено, сокет может быть закрыт или истекло время ожидания, чтение ret: -1)

Я использую Flutter для своего мобильного приложения. Я хочу подключить свое мобильное приложение к Arduino с помощью модуля HC-05.

Мой флаттер-код (небольшой фрагмент кода из большого кода):

class HomeLayout extends StatefulWidget {
  const HomeLayout({super.key});
  @override
  State<HomeLayout> createState() => _HomeLayout();
}

class _HomeLayout extends State<HomeLayout> {
void _scanDevices() async {
    List<BluetoothDevice> devices = <BluetoothDevice>[];
    print('scan started');
    try {
      devices = await FlutterBluetoothSerial.instance.getBondedDevices();
    } catch (ex) {
      print("Error: $ex");
    }
    print('scan ended');
    print(devices);
    for (BluetoothDevice device in devices) {
      print(device.address); // This will print the MAC address of each bonded device
    }
  }


  Future<bool> _connectToBluetooth() async {
    //_scanDevices();
    print('\n\nConnecting to the device');
    String address='my hc05 mac address';
    try {
        connection = await BluetoothConnection.toAddress(address);
      } catch(ex){
        print("Error : $ex");
        return false;
      }
    print('Connected to the device');
    return true;
    //receiveData();
  }

  void receiveData() async{
    bool check = await _connectToBluetooth();
    print("\n\nReceiving Data");
    if (check) {
      List<int> _dataBuffer = <int>[];
      connection!.input!.listen((Uint8List data) {
        setState(() {
          _dataBuffer.addAll(data);
          print("Data : " + data.toString());
        });
      });
    }
    print("Received Data");
  }

Widget build(BuildContext context) {
    receiveData();
... 
}
}

Мой код ардуино:

SoftwareSerial mySerial(10, 11);

void setup(){
mySerial.begin(38400);
}

void loop(){
  int sound_sensor = analogRead(A1);
  light_sensor = analogRead(A0);
  mySerial.write("light sensor : ");
  mySerial.write(light_sensor);
  mySerial.write("sound sensor : ");
  mySerial.write(sound_sensor);
}

Когда я запускаю свой флаттер-код, он запрашивает местоположение (для сканирования доступных устройств Bluetooth).

Мой модуль HC-05 мигает, как обычно, когда я включаю Arduino и HC-05 (красным и синим цветом). Затем через 2/3 секунды синий свет исчезает. затем через некоторое время обе лампочки горят (не мигают).

И мой код флаттера возвращает ошибку:

 PlatformException(connect_error, read failed, socket might closed or timeout, read ret: -1, java.io.IOException: read failed, socket might closed or timeout, read ret: -1
I/flutter (25783):  at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:845)
I/flutter (25783):  at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:859)
I/flutter (25783):  at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:436)
I/flutter (25783):  at io.github.edufolly.flutterbluetoothserial.BluetoothConnection.connect(BluetoothConnection.java:57)
I/flutter (25783):  at io.github.edufolly.flutterbluetoothserial.BluetoothConnection.connect(BluetoothConnection.java:64)
I/flutter (25783):  at io.github.edufolly.flutterbluetoothserial.FlutterBluetoothSerialPlugin$FlutterBluetoothSerialMethodCallHandler.lambda$onMethodCall$4$io-github-edufolly-flutterbluetoothserial-FlutterBluetoothSerialPlugin$FlutterBluetoothSerialMethodCallHandler(FlutterBluetoothSerialPlugin.java:1007)
I/flutter (25783):  at io.github.edufolly.flutterbluetoothserial.FlutterBluetoothSerialPlugin$FlutterBluetoothSerialMethodCallHandler$$ExternalSyntheticL

Помогите, пожалуйста, разобраться, почему возникает эта ошибка и как от нее избавиться.

Вы проверили свое соединение с Arduino с помощью приложения последовательного монитора?

Michael Kotzjan 16.04.2024 13:26

Можете ли вы добавить свой pubspec.yaml, о котором идет речь?

Maveňツ 19.04.2024 09:47
3
2
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это

class HomeLayout extends StatefulWidget {
const HomeLayout({Key? key}) : super(key: key);

@override
_HomeLayoutState createState() => _HomeLayoutState();
}

class _HomeLayoutState extends State<HomeLayout> {
late BluetoothConnection _connection;
List<int> _dataBuffer = [];

@override
void initState() {
super.initState();
_initBluetooth();
}

void _initBluetooth() async {
// Initialize Bluetooth
await FlutterBluetoothSerial.instance.requestEnable();
}

Future<void> _connectToBluetooth() async {
String address = 'your_hc05_mac_address';
try {
  _connection = await BluetoothConnection.toAddress(address);
  print('Connected to the device');
  _connection.input!.listen((Uint8List data) {
    setState(() {
      _dataBuffer.addAll(data);
      print('Received data: ${String.fromCharCodes(data)}');
    });
  });
} catch (ex) {
  print('Error connecting to Bluetooth: $ex');
}
}

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text('Bluetooth Communication'),
  ),
  body: Center(
    child: ElevatedButton(
      onPressed: _connectToBluetooth,
      child: Text('Connect to Bluetooth'),
    ),
  ),
);
}

@override
void dispose() {
_connection.close();
super.dispose();
}
}
Ответ принят как подходящий

Я думаю, вам нужно попробовать несколько вещей.

  1. Проверьте, подключен ли VCC HC-05 к 5 В, а не к 3,3 В (у меня это сработало)
  2. Проверьте, включен ли Bluetooth на вашем устройстве. Попробуйте использовать физическое устройство.

Другие вопросы по теме