Probleme mit Bluetooth (BluetoothSocket.close())

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Probleme mit Bluetooth (BluetoothSocket.close()) im Android App Entwicklung im Bereich Betriebssysteme & Apps.
N

NerkJ

Neues Mitglied
Hallo Forum,
ich erstelle gerade eine App, mit der ich Daten an einen Arduino per Bluetooth senden kann.
Das funktioniert soweit ganz gut. Ich habe ein Array mit Daten erzeugt, die gesendet und vom Arduino empfangen werden.
Beim Testen habe ich folgendes Problem:
Rufe ich die close() Methode der BluetoothSocket Variable auf, werden weitere Daten gesendet. Es sind immer die gleichen 19 Zahlen, die mir im Arduino Serial Monitor angezeigt werden. Mit dem Debugger kann ich sehen, das die Übertragung nach dem Aufruf der close() Methode stattfindet.

Ich hoffe, jemand hat eine Idee, was da passiert.
Für alle Hinweise, vielen Dank im vorraus!

Hier ein Teil des Codes:

Code:
findViewById<Button>(R.id.sendBtn).setOnClickListener {
            // Beispiel Befehl an Arduino

            val daten: ByteArray = byteArrayOf(2,5,0,1)                //Test Daten

            if (bAdapter.isEnabled) {

                val hc05: BluetoothDevice = bAdapter.getRemoteDevice("98:D3:31:F5:AC:EB")

                var btSocket: BluetoothSocket? = null

                var counter = 0

                do {
                    try {
                        btSocket = hc05.createRfcommSocketToServiceRecord(mUUID)
                        System.out.println(btSocket)
                        btSocket.connect()
                        System.out.println(btSocket.isConnected())
                    } catch (e: IOException) {
                        e.printStackTrace()
                        Toast.makeText(this, "Verbindung fehlgeschlagen", Toast.LENGTH_LONG).show()
                    }
                    counter++
                } while (!btSocket!!.isConnected && counter < 3)
                if (btSocket.isConnected) {
                    try {
                        val outputStream: OutputStream = btSocket.outputStream
                            outputStream.write(daten)                    //Daten werden gesendet
                    } catch (e: IOException) {
                        e.printStackTrace()
                    }
                    try {
                            btSocket.close()                            //Nach Aufruf Problem
                            System.out.println(btSocket.isConnected())
                    } catch (e: IOException) {
                        e.printStackTrace()
                    }
                }
            } else {
                Toast.makeText(this, "Bluetooth einschalten", Toast.LENGTH_LONG).show()
            }
        }
 
J

jogimuc

Stammgast
Hallo
bei dem Close wird die Verbindung wieder abgebaut. Normal
 
N

NerkJ

Neues Mitglied
Danke für die schnelle Antwort.
Das die Verbindung abgebaut wird ist mir schon klar. Nur scheinbar werden noch weitere Daten gesendet.
Mir ist aber nicht klar, woher.
Wenn das close() ausgeführt wird, werden weitere Bytes gesendet. Es sind immer die Selben.
Wenn mit Sicherheit ausgeschlossen ist, dass die Daten aus der App kommen, dann muss es ja vom Bluetooth Modul am Arduino kommen. Dann weiß ich wenigstens schonmal, wo ich nicht weiter suchen muss.
Kennt sich vieleicht jemand mit dem HC-05 Bluetooth Modul aus?
Ich bin für jeden weitern Hinweis dankbar.
 
J

jogimuc

Stammgast
Wie gesagt bin ich der Meinung das es die Mitteilung von dem Modul an deinen adruino ist das die Verbindung unterbrochen beendet oder was auch immer ist. Schaue mal nach Meldungen die das Modul senden kann.
Beitrag automatisch zusammengefügt:

Poste doch mal die 19 Zahlen Bytes
Beitrag automatisch zusammengefügt:

https://www.google.com/url?sa=t&sou...8QFnoECAMQAQ&usg=AOvVaw3xnasY5rhyywSJX4nY1Dn8

Das Modul wird ja mit at befehlen gesteuert.
 
Zuletzt bearbeitet:
N

NerkJ

Neues Mitglied
Die AT-Kommandos brauche ich nur zum konfigurieren, z.B. Passwort setzen, Namen ändern etc. Das funktioniert auch problemlos.
Wenn ich den Code mit dem Debugger durchgehe, funktioniert auch alles wie vorgesehen. Die write() Methode sendet die Bytes aus meinem Array (also 2,5,0,1). Sobald ich dann die close() Methode ausführe, werden mir im Arduino Serial Monitor dann folgende Zahlen angezeigt: 43, 68, 73, 83, 67, 58, 83, 85, 67, 67, 69, 83, 83, 13, 10, 79, 75, 13, 10.
Es hat den Anschein, die Werte werden von der App gesendet.
Ich habe schon vermutet, dass das Bluetooth Modul diese Werte nach dem Abbau der Verbindung sendet. Dafür habe ich aber noch keine Hinweise gefunden.
 
J

jogimuc

Stammgast
Was ist das ascii hex oder dezimal
 
J

jogimuc

Stammgast
Wenn du die dezimal zahlen on ascii übersetzt bekommst du

+DISC:SUCCESS jetzt CR und LF
OK wider CR und LF
Sind 19 Zeichen


So und nun schaue was die Meldung / Response bedeutet.

Also dein Modul gibt dir dem adruino den Abbau der Verbindung bekannt.

Denn mit dem close in Java beendet du die aufgebaute Verbindung.
 
Zuletzt bearbeitet:
N

NerkJ

Neues Mitglied
Hallo jogimuc,
aus persönlichen Gründen musste mein Projekt eine Weile ruhen, also antworte ich erst jetzt.
Deine Antwort ist der entscheidende Hinweis.
Da ich jetzt weiß, woher die "zusätzlichen" Bytes kommen, kann ich meinen Code entsprechend anpassen.
Vielen Dank und sorry für die doch sehr späte Antwort.
 
Ähnliche Themen - Probleme mit Bluetooth (BluetoothSocket.close()) Antworten Datum
1