BluetoothSerial icon indicating copy to clipboard operation
BluetoothSerial copied to clipboard

"Unable to connect to device" with bluetoothSerial.connect()

Open JeremDlcn opened this issue 5 years ago • 3 comments

I made an ionic app with a connection between a Android phone and a HC-05 on an Arduino Uno. When i use the method .connect() with a .subscribe() in order to connect the device or catch error, the only error that i console.log is "Unable to connect to device".

Is there any way to know more about my error because a message with "unable to connect" don't help me to resolve my problem Thanks.

import { Component } from '@angular/core';
import { BluetoothSerial } from '@ionic-native/bluetooth-serial/ngx';
import { AlertController, ToastController } from '@ionic/angular';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {
  pairedList: pairedlist;
  listToggle: boolean = false;
  pairedDeviceID: number = 0;
  dataSend: string = "";

  constructor(private alertCtrl: AlertController, private bluetoothSerial: BluetoothSerial, private toastCtrl: ToastController) {
    this.checkBluetoothEnabled();
  }

  checkBluetoothEnabled() {
    this.bluetoothSerial.isEnabled().then(success => {
      this.listPairedDevices();
    }, error => {
      this.showError("Please Enable Bluetooth")
    });
  }

  listPairedDevices() {
    this.bluetoothSerial.list().then(success => {
      this.pairedList = success;
      this.listToggle = true;
    }, error => {
      this.showError("Please Enable Bluetooth")
      this.listToggle = false;
    });
  }

  selectDevice() {
    let connectedDevice = this.pairedList[this.pairedDeviceID];
    if (!connectedDevice.address) {
      this.showError('Select Paired Device to connect');
      return;
    }
    let address = connectedDevice.address;
    let name = connectedDevice.name;
    this.connection(address);
  }

  connection(address: string) {
    // Attempt to connect device with specified address, call app.deviceConnected if success
    this.bluetoothSerial.connect(address).subscribe(success => {
      this.deviceConnected();
      this.showToast("Successfully Connected");
    }, error => {
      console.log("Connection Error" +  error);
      this.showError("Error:Connecting to Device");
    });
  }

  deviceConnected() {
    // Subscribe to data receiving as soon as the delimiter is read
    this.bluetoothSerial.subscribe('\n').subscribe(success => {
      this.handleData(success);
      this.showToast("Connected Successfullly");
    }, error => {
      this.showError(error);
    });
  }

  deviceDisconnected() {
    // Unsubscribe from data receiving
    this.bluetoothSerial.disconnect();
    this.showToast("Device Disconnected");
  }

  handleData(data) {
    this.showToast(data);
  }

  sendData() {
    this.dataSend += '\n';
    this.showToast(this.dataSend);
    this.bluetoothSerial.write(this.dataSend).then(success => {
      this.showToast(success);
    }, error => {
      this.showError(error)
    });
  }

  async showError(error) {
    const alert = await this.alertCtrl.create({
      message: 'Error',
      subHeader: error,
      buttons: ['Dismiss']
    });
    await alert.present();
  }

  async showToast(msj: string) {
    const toast = await this.toastCtrl.create({
      message: msj,
      duration: 1000
    });
    toast.present();
  }
}
interface pairedlist {
  "class": number,
  "id": string,
  "address": string,
  "name": string
}```

JeremDlcn avatar Feb 04 '20 13:02 JeremDlcn

I am getting the same information can someone please guide ?

thanks for little help.

rajneshbiz avatar May 18 '20 06:05 rajneshbiz

In order to connect a client, you have to start a server socket on the other device.

The code that manage the sever part is disabled in this library. So, you can only build a client.

I succeed to make it working from Android to Android by uncomenting a part code and by changing UUID.

To sum up: this library is not complete, it has been build for a specific use case (connection with Arduino) and seems to not be maintained anymore. It's a shame that ionic proposes it as a bluetooth serial solution in their documentation!

joran-github avatar Oct 22 '21 10:10 joran-github

I had similar issue and battled for hours but it turns out all I had to do was connect and pair my phone and bluetooth printer manually from my phone bluetooth settings and then came back to the app to proceed and worked fine

ashefor avatar Mar 08 '22 18:03 ashefor