Android Studio - Verbindung mit dem Arduino via Bluetooth

  • Antworten:39
  • Bentwortet
MadMax2506
  • Forum-Beiträge: 3

13.01.2019, 18:45:28 via Website

Hallo zusammen,
Ich möchte mein Telefon über Bluetooth mit einem Arduino verbinden, um den Arduino zu steuern. Also habe ich den folgenden Code geschrieben, um die MAC-Adresse vom Bluetooth-Adapter zu erhalten, wenn ich in der ListView auf ein Gerät klicke:

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Set;

public class home extends AppCompatActivity {

    /*Variablen deklarieren*/
    //Btn
    private Button btnPaired;
    //Anzeige-Listen
    private ListView devicelist;
    //Bluetooth
    public BluetoothAdapter myBluetooth = null;
    private Set<BluetoothDevice> pairedDevices;
    private String device_name, device_address;
    public static String EXTRA_ADDRESS = "device_address", EXTRA_NAME = "device_name";

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        //Btn
        btnPaired = findViewById(R.id.btn_paired_device);
        //Anzeige-Listen
        devicelist = findViewById(R.id.list_paired_device);
        //Bluetooth
        myBluetooth = BluetoothAdapter.getDefaultAdapter();

        //Überprüfen, ob das Gerät Bluetooth hat
        if(myBluetooth == null)
        {
            Toast.makeText(getApplicationContext(), "Bluetooth Device Not Available", Toast.LENGTH_LONG).show(); //Show message
            finish(); //App beenden
        }
        else if(!myBluetooth.isEnabled())
        {
            //fragt den User, ob er Bluetooth einschalten will
            Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnBTon,1);
        }

        btnPaired.setOnClickListener(new View.OnClickListener() {
            @Override
            //Wenn der Btn "btnPaired" angeklickt wird
            public void onClick(View v)
            {
                pairedDevicesList(); //Funktionen aufrufen
            }
        });

    }

    private void pairedDevicesList()
    {
        //Variablen initalisieren
        pairedDevices = myBluetooth.getBondedDevices();
        ArrayList list = new ArrayList();

        //Überprüft, ob "pairedDevices.size()" größer als "0" ist
        if (pairedDevices.size() > 0)
        {
            //Wiederholt, so oft, wie es Device-Geräte gibt
            for(BluetoothDevice bt : pairedDevices)
                list.add(bt.getName() + "\n" + bt.getAddress()); //fügt verfügbare Geräte zum Array hinzu
        }
        else
            Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show(); //Show message

        final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
        devicelist.setAdapter(adapter);
        devicelist.setOnItemClickListener(myListClickListener); //OnClick-Funktion

    }

    private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener()
    {
        public void onItemClick (AdapterView<?> av, View v, int arg2, long arg3)
        {
            // Get the device MAC address, the last 17 chars in the View
            String info = ((TextView) v).getText().toString();
            device_name = info.substring(0, info.length() - 17);
            device_address = info.substring(info.length() - 17);

            Intent intent = new Intent(home.this, message.class);
            intent.putExtra(EXTRA_ADDRESS, device_address); //this will be received at ledControl (class) Activity
            intent.putExtra(EXTRA_NAME, device_name); //this will be received at ledControl (class) Activity
            //Change the activity.
            startActivity(intent);
        }
    };

Am Ende des oberen Codes wechsle ich zur Activity "message". Der Code für "message" lautet:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class message extends AppCompatActivity implements TextWatcher, View.OnClickListener {
    private static final String TAG = "message";

    /*Variablen deklarieren*/
    //Btn
    private Button btn_send;
    //Eingabe
    private EditText fld_message;
    //Anzeige-Fld
    private TextView mBluetoothStatus;
    //String
    private String device_adresse, device_name, message_to_the_arduino;
    //Class
    home home = new home();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent newint = getIntent();
        //String
        device_adresse = newint.getStringExtra(home.EXTRA_ADDRESS);
        device_name = newint.getStringExtra(home.EXTRA_NAME);
        //Funktion aufrufen
        kopplung_mit_bluetooth_modul();

        setContentView(R.layout.activity_message);
        //Btn
        btn_send = findViewById(R.id.btn_send);
        btn_send.setOnClickListener(this);
        //Eingabe
        fld_message = findViewById(R.id.fld_message);
        fld_message.addTextChangedListener(this);
        //Anzeige-Fld
        mBluetoothStatus = findViewById(R.id.fld_bt_status);
    }

    private void kopplung_mit_bluetooth_modul()
    {
        //Connect with the Bluetooth-Adapter
    }

    private void send_message()
    {
        //Send the String "message_to_the_arduino"
    }

    /*Btn*/
    @Override
    public void onClick(View v) {
        switch(v.getId())
        {
            case R.id.btn_send:
                send_message();
                break;
        }
    }

    /*Eingabefeld*/
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after)
    {}
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        message_to_the_arduino = s.toString();
    }
    @Override
    public void afterTextChanged(Editable s)
    {}
}

In der Activity "message" möchte ich eine Verbindung zum Bluetooth-Adapter herstellen [Funktion "kopplung_mit_bluetooth_modul"].
Danach möchte ich LEDs am Arduino EIN / AUS machen, also muss ich eine Nachricht an den Arduino senden (Befehl) und Nachrichten vom Arduino erhalten (Rückmeldung) [Funktion "send_message"].

Ich habe nun schon vieles verschiedenes ausprobiert, kriege es aber einfach nicht gebacken.
Kann mir jemand helfen ????

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.529

13.01.2019, 19:09:51 via Website

Hallo willkommen im Forum.

In einem anderen Forum habe ich schon mal diesen Code zum ähnlichen Thema veröffentlicht. Das könnte dir helfen.

An sonsten noch diese links.

https://de.m.wikibooks.org/wiki/Googles_Android/_Bluetooth
https://www.instructables.com/id/Android-Bluetooth-Control-LED-Part-2/

public class ActivityBlue extends AppCompatActivity implements View.OnClickListener{


    // UUID fuer Kommunikation mit Seriellen Modulen
    private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    private static final String LOG_TAG = "BLueTest";


    private BluetoothAdapter adapter = null;
    private BluetoothSocket socket = null;
    private OutputStream stream_out = null;
    private InputStream stream_in = null;
    private boolean is_connected = false;
    private Set<BluetoothDevice> pairedDevices;
    private ArrayList<BluetoothDevice> pairedListe;
    private ListView lv;
    private static String mac_adresse; // MAC Adresse des Bluetooth Adapters

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blue);

        Log.d(LOG_TAG, "Bluetest: OnCreate");

        ((Button)findViewById(R.id.bt_on)).setOnClickListener(this);
        ((Button)findViewById(R.id.bt_trennen)).setOnClickListener(this);
        ((Button)findViewById(R.id.bt_verbinden)).setOnClickListener(this);
        ((Button)findViewById(R.id.bt_liste)).setOnClickListener(this);
        ((Button)findViewById(R.id.bt_senden)).setOnClickListener(this);


        ((TextView) findViewById(R.id.text_uuid)).setText("UUID: " + uuid);
        pairedListe = new ArrayList<>();

        // Verbindung mit Bluetooth-Adapter herstellen
        adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter == null || !adapter.isEnabled()) {
            Toast.makeText(getApplicationContext(), "Bitte Bluetooth aktivieren oder auf On Klicken", Toast.LENGTH_LONG).show();
            Log.d(LOG_TAG, "onCreate: Bluetooth Fehler: Deaktiviert oder nicht vorhanden");
        } else {
            Log.d(LOG_TAG, "onCreate: Bluetooth-Adapter ist bereit");
        }

        lv = (ListView)findViewById(R.id.paired_listview);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                BluetoothDevice mDevice = pairedListe.get(position);
                mac_adresse = mDevice.getAddress();
                ((EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);
            }
        });
    }

    public  void bluetoothOn(){
        if (!adapter.isEnabled()) {
            Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn, 0);
            adapter = BluetoothAdapter.getDefaultAdapter();

        } else {
            Toast.makeText(getApplicationContext(), "BT ON", Toast.LENGTH_LONG).show();

        }
    }

    public void listeBTGeräte(){

        pairedDevices = adapter.getBondedDevices();
        ArrayList list = new ArrayList();

        for(BluetoothDevice bt : pairedDevices) {
            list.add(bt.getName());
            pairedListe.add(bt);
        }

        Toast.makeText(this, "List Paired Devices",Toast.LENGTH_SHORT).show();
        final ArrayAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
        lv.setAdapter(adapter);

    }

    public void verbinden() {

        mac_adresse = ((EditText) findViewById(R.id.text_adresse)).getText()
                .toString();
        Log.d(LOG_TAG, "Verbinde mit " + mac_adresse);

        BluetoothDevice remote_device = adapter.getRemoteDevice(mac_adresse);

        // Socket erstellen
        try {
            socket = remote_device
                    .createInsecureRfcommSocketToServiceRecord(uuid);
            Log.d(LOG_TAG, "Socket erstellt");
        } catch (Exception e) {
            Log.e(LOG_TAG, "Socket Erstellung fehlgeschlagen: " + e.toString());
        }

        adapter.cancelDiscovery();

        // Socket verbinden
        try {
            socket.connect();
            Log.d(LOG_TAG, "Socket verbunden");
            is_connected = true;
        } catch (IOException e) {
            is_connected = false;
            Log.e(LOG_TAG, "Socket kann nicht verbinden: " + e.toString());
        }

        // Socket beenden, falls nicht verbunden werden konnte
        if (!is_connected) {
            try {
                socket.close();
            } catch (Exception e) {
                Log.e(LOG_TAG,
                        "Socket kann nicht beendet werden: " + e.toString());
            }
        }

        // Outputstream erstellen:
        try {
            stream_out = socket.getOutputStream();
            Log.d(LOG_TAG, "OutputStream erstellt");
        } catch (IOException e) {
            Log.e(LOG_TAG, "OutputStream Fehler: " + e.toString());
            is_connected = false;
        }

        // Inputstream erstellen
        try {
            stream_in = socket.getInputStream();
            Log.d(LOG_TAG, "InputStream erstellt");
        } catch (IOException e) {
            Log.e(LOG_TAG, "InputStream Fehler: " + e.toString());
            is_connected = false;
        }

        if (is_connected) {
            Toast.makeText(this, "Verbunden mit " + mac_adresse,
                    Toast.LENGTH_LONG).show();
            ((Button) findViewById(R.id.bt_verbinden))
                    .setBackgroundColor(Color.GREEN);
        } else {
            Toast.makeText(this, "Verbindungsfehler mit " + mac_adresse,
                    Toast.LENGTH_LONG).show();
            ((Button) findViewById(R.id.bt_verbinden))
                    .setBackgroundColor(Color.RED);
        }
    }

    public void senden() {
        String message = ((EditText) findViewById(R.id.text_eingabe)).getText()
                .toString();
        byte[] msgBuffer = message.getBytes();
        if (is_connected) {
            Log.d(LOG_TAG, "Sende Nachricht: " + message);
            try {
                stream_out.write(msgBuffer);
            } catch (IOException e) {
                Log.e(LOG_TAG,
                        "Bluetest: Exception beim Senden: " + e.toString());
            }
        }
    }

    public void trennen() {
        if (is_connected && stream_out != null) {
            is_connected = false;
            ((Button) findViewById(R.id.bt_verbinden))
                    .setBackgroundColor(Color.RED);
            Log.d(LOG_TAG, "Trennen: Beende Verbindung");
            try {
                stream_out.flush();
                socket.close();
            } catch (IOException e) {
                Log.e(LOG_TAG,
                        "Fehler beim beenden des Streams und schliessen des Sockets: "
                                + e.toString());
            }
        } else
            Log.d(LOG_TAG, "Trennen: Keine Verbindung zum beenden");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy. Trenne Verbindung, falls vorhanden");
        trennen();
    }

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.bt_on:
            bluetoothOn();
            break;
        case  R.id.bt_verbinden:
            verbinden();
            break;
        case  R.id.bt_liste:
            listeBTGeräte();
            break;
        case  R.id.bt_trennen:
            trennen();
            break;
        case R.id.bt_senden:
           senden();
            break;
    }
}

}

— geändert am 19.01.2019, 12:37:27

Hilfreich?
swa00
Kommentieren
MadMax2506
  • Forum-Beiträge: 3

13.01.2019, 19:17:02 via Website

Ok, vielen Dank für deine schnelle Antwort, werde ich sofort ausprobieren.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

13.01.2019, 19:21:29 via Website

Hier noch das Layout

<?xml version="1.0" encoding="utf-8"?>

xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/linearLayout">

<TextView
        android:id="@+id/text_uuid"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="UUID"
        app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>

<TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="MAC Adresse des Bluetooth Devices:"
        android:id="@+id/textView" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/text_uuid"
        app:layout_constraintEnd_toEndOf="parent"/>

<EditText
        android:id="@+id/text_adresse"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:text="00:11:12:14:00:35"
        app:layout_constraintTop_toTopOf="@+id/textView" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="18dp"
        app:layout_constraintEnd_toEndOf="parent">
</EditText>

<Button
        android:id="@+id/bt_verbinden"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Verbinden"
        app:layout_constraintStart_toStartOf="@+id/text_adresse" app:layout_constraintTop_toBottomOf="@+id/text_adresse"/>

<Button
        android:id="@+id/bt_trennen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Trennen"
        app:layout_constraintStart_toStartOf="@+id/bt_verbinden" app:layout_constraintTop_toBottomOf="@+id/bt_verbinden"/>

<TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Eingabe:"
        android:id="@+id/textView3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/bt_verbinden"
        app:layout_constraintEnd_toEndOf="parent"/>

<EditText
        android:id="@+id/text_eingabe"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ems="10"
        android:text="Test 123"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/bt_trennen">

    <requestFocus android:layout_height="wrap_content"
                  android:layout_width="wrap_content"/>
</EditText>

<Button
        android:id="@+id/bt_senden"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Senden"
        app:layout_constraintStart_toStartOf="@+id/text_eingabe" app:layout_constraintTop_toBottomOf="@+id/text_eingabe" android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"/>

<Button
        android:text="BT On"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/bt_on" app:layout_constraintStart_toEndOf="@+id/bt_trennen"
        android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintEnd_toStartOf="@+id/bt_liste" android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp" app:layout_constraintTop_toBottomOf="@+id/text_adresse"/>
<Button
        android:text="Liste"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/bt_liste"
        app:layout_constraintTop_toBottomOf="@+id/text_adresse" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp" android:layout_marginRight="16dp"
/>
<ListView
        android:layout_width="368dp"
        android:layout_height="133dp" app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"
        android:id="@+id/paired_listview" app:layout_constraintHorizontal_bias="0.0"
        android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/bt_senden"/>

Hilfreich?
swa00
Kommentieren
MadMax2506
  • Forum-Beiträge: 3

13.01.2019, 21:48:37 via Website

Habe es jetzt ausprobiert, es funktioniert SUPER!!!
Vielen Dank :-)

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 11:40:20 via Website

Hallo Joker,

Erstmal viel Dank für diese tolle Beschreibung.
Ich habe trotzdem massive Fehler und bekomme den Source mit Android 3.3 und einem Huawei Y6 nicht zum laufen. Mein Arduino Code mit dem HM-10 läuft auf einem iPhone App (selber mit Xcode10 geschrieben ) einwandfrei.
Ich habe folgende Ergänzungen gemacht:
In AbdroidManifest.xml habe die Permissions eingefügt:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />

In ActivityBlue.jave habe dir UUID angepasst:
// private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private UUID uuid = UUID.fromString("00001804-0000-1000-8000-00805F9B34FB");

Nach dem kompilieren bekomme ich diese ErrorCode:
Build: completed successfully 4 s 307 ms
Run build 4 s 260 ms
Load build 6 ms
Configure build 554 ms
Calculate task graph 59 ms
Run tasks 3 s 639 ms

Schreibe ich mit Debug 'app' die App in mein Smartphone erhalte ich diese Fehler:
D/BLueTest: Bluetest: OnCreate
D/HwRTBlurUtils: check blur style for HwToast-Toast, themeResId : 0x7f0c0005, context : com.bitwerk.ble_hm10.ActivityBlue@21ea1e2, Nhwext : 6, get Blur : disable with , android.graphics.drawable.NinePatchDrawable@fe82c0c
D/BLueTest: -----------> onCreate: Bluetooth Fehler: Deaktiviert oder nicht vorhanden
D/ActivityThread: add activity client record, r= ActivityRecord{bec75d1 token=android.os.BinderProxy@c535f {com.bitwerk.ble_hm10/com.bitwerk.ble_hm10.ActivityBlue}} token= android.os.BinderProxy@c535f
I/HwSecImmHelper: mSecurityInputMethodService is null
D/OpenGLRenderer: HWUI Binary is disabled

BT ON sagt in Toast.makeText 'BT ON'
LISTE gibt nichts aus
VERBINDEN klappt auch nicht.

Bin ein wenig verzweifelt da ich ein Android Studio Newbie bin.

Danke für eine kleine Hilfe.

— geändert am 19.01.2019, 12:54:46 durch Moderator

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 12:01:49 via Website

Hallo
Hast du den vorher auch die Geräte gepaart?
Wenn nicht ist es klar das nichts in der Liste steht .

Nach dem kompilieren bekomme ich diese ErrorCode:
Build: completed successfully 4 s 307 ms

Das ist keine Error Meldung sodern eine Erfolgs Meldumg

Das mit dem Toast könnte daran liegen das ich "this" und nicht "getApplicationContext()" benutzt habe.

sieht auch so aus als ob du den BT auf gem Gerät gar nicht ein geschaltet hast.

— geändert am 19.01.2019, 12:39:47

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 16:48:44 via Website

Hi

BT ist schon auf dem Gerät eingeschaltet sonst würde meine IOS App auch nicht funktionieren. Mit welchem AT Befehl soll ich denn pairen. Ich habe nichts gefunden? Wenn ich mein HM-10 Modul mit dem Android Phone suche finde ich es unter verfügbar. Lässt sich jedoch nicht verbinden.

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 17:04:55 via Website

Hi
habe mir gerade die nrf Connect App auf mein Smartphone geladen. Meine Hardware wird sofort gefunden und verbindet sich sofort mit meiner HM-10 hardware ohne pairing wenn ich Connect auswähle. Ich habe z.Zt mehrere BT Beacons im Einsatz die auch sauber gefunden und auch verbunden werden.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 17:18:27 via Website

Ich meinte nicht dein IOS Gerät wir sprechen hier von Android.
Du willst eine Verbindung von einem Android Gerät zu einem Arduino Bluetooth aufbauen. Wo kommt da IOS vor?
Ich gehe mal von so etwassen aus wohin du Verbinden willst.
https://www.reichelt.de/arduino-4duino-wireless-modul-hc-05-4-pin-arduino-hc-05-4-p170173.html?PROVID=2788&gclid=CjwKCAiAsoviBRAoEiwATm8OYG2Tsc5UrJuXFjBiRnIdzReijUmNiBxY8kpShXnqsVI8H1uIAaJ26hoC-CkQAvD_BwE&&r=1

Nach den Fehlermeldungen scheite es mir schon so als ob das BT auf dem Android Handy nicht aktiv ist.
Paaren musst du die Geräte selber mit den Android eigenen Möglichkeiten. Ist im Quellcode nicht enthalten. BT einschalten, sichtbar machen, Gerät suchen Paaren Verbinden. So wie sonst auch mit anderen Geräten. Nun ist das Gerät deinem Android System bekannt und du kannst die Liste der Geräte auch in deiner App benutzen.

PS. Bemerken möchte ich noch das in dem Code nicht geprüft wird ob es gepaarte Geräte gibt.
Auch wird nicht geprüft ob das Handy überhaupt BT hat. Das ist nur ein funktions Beispiel, Keine komplette App. Am Anfang sind auch Links wo es eigentlich erklärt wird.

— geändert am 19.01.2019, 17:43:14

Hilfreich?
swa00Pascal P.
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 17:43:32 via Website

Ich meinte auch nur das meine BT-Hardware mit der IOS App einwandfrei funktioniert. Wenn das BT auf meinem Android Handy nicht eingeschaltet wäre würde auch nrfConnect nicht funktionieren. Oder?
Der Link oben zeigt übrigens ein HC-05-4 und kein HM-10. Ich bezweifle das HC-05 BLE unterstützt. Ich setze folgendes Modul ein:
DSD TECH HM-10-Bluetooth-40-BLE-Arduino-CC2541-iOS-Android-Master-Slave-Modul
Das unterstützt in jedenfalls BT 4.0 BLE.
Hast Du nrfConnect oder DSD TECH Bluetooth im Einsatz? Dann könntest Du sehen ob Dein Modul BLE fähig ist. Ich befürchte Dein Modul wird nicht mit einem HM-10 zusammen arbeiten.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 17:53:38 via Website

Der Link war nur ein schnelles Beispiel um dir zu zeigen über welche Art von Modul wir sprechen. Wollte dir damit nur zeigen das IOS hier keine Rolle Spielt.

Vielmehr glaube ich das es an der UUID liegt. Die in meinen Code ist eine Universelle Serielle Schnittstelle über die wir uns Unterhalten. RFComm. Und dies sollten alle dieser Module Beherrschen.

Wenn das BT auf meinem Android Handy nicht eingeschaltet wäre würde auch nrfConnect nicht funktionieren.

woher willst du das wissen wenn du die Geräte nicht mal gepaart hast.

ohne Code kommen wir hier sicherlich nicht weiter.

— geändert am 19.01.2019, 17:58:38

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 18:10:15 via Website

Welchen Code möchtest Du denn sehen?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 18:10:58 via Website

deine Bt Klasse

sind die geräte wiklich gepaart? wenn du die Mac Adresse vom Modul weist kannst du die auch eingeben und verbinden. ohne gepaart zu sein.

— geändert am 19.01.2019, 18:25:36

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 18:26:49 via Website

Hi Jokel,
ich fürchte ich habe einen Fehler gemacht. Ich habe lediglich Deine beiden Sources in meinem Project übernommen. Die App wird auf meinem Android Handy gestartet aber ich gehe mal davon aus das nichts arbeitet. Denn eine Bt Class find ich nicht. Wo sollt die den stehen? Habe ich ein Modul übersehen? Wie gesagt ich bin absoluter Android Studio Neuling.
Danke für Deine Geduld.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 18:41:14 via Website

Du hast doch bestimmt ein neues Projekt erstellt. Dann hast du eine Klasse die MainActivity heißt.
In meinen Beispiel habe ich sie „ActivityBlue“ Genannt.
Du müsstest meinen Code in die MainActivity packen aber der Name der Klasse sollte MainActivity Bleiben . Denn die wird als erstes gestartet. Und ist im Manifest auch eingetragen. Meine Beispiel Klasse nicht. kann also nicht starten.

Vielmehr glaube ich das du Dir erst mal die Grundlagen von Android Programmierung und Java aneignen solltest . Wenn du das könntest würdest du den Code auch verstehen und könntest damit umgehen. Das muss ich hier mal sagen.
Glaube du suchst mal nach Grundlagen Android Programmierung im Netz.

Wenn du willst Zeige deine MainActivity

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 18:47:27 via Website

Kein Problem. Hier ist der Code.
package com.bitwerk.ble_hm10;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;

public class ActivityBlue extends AppCompatActivity implements View.OnClickListener{

// UUID fuer Kommunikation mit Seriellen Modulen
private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

// private UUID uuid = UUID.fromString("00001804-0000-1000-8000-00805F9B34FB");
// 00001804-0000-1000-8000-00805f9b34fb
/*
public static final UUID TX_POWER_UUID = UUID.fromString("00001804-0000-1000-8000-00805f9b34fb");
public static final UUID TX_POWER_LEVEL_UUID = UUID.fromString("00002a07-0000-1000-8000-00805f9b34fb");
public static final UUID FIRMWARE_REVISON_UUID = UUID.fromString("00002a26-0000-1000-8000-00805f9b34fb");
public static final UUID DIS_UUID = UUID.fromString("0000180a-0000-1000-8000-00805f9b34fb");

//public static final UUID CCCD = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
public   static final UUID CCCD = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
//public static final UUID RX_SERVICE_UUID = UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
public   static final UUID RX_SERVICE_UUID = UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb");
//public static final UUID RX_CHAR_UUID = UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
public   static final UUID RX_CHAR_UUID = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");
//public static final UUID TX_CHAR_UUID = UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
public   static final UUID TX_CHAR_UUID = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");

*/


private static final String LOG_TAG = "BLueTest";


private BluetoothAdapter adapter = null;
private BluetoothSocket socket = null;
private OutputStream stream_out = null;
private InputStream stream_in = null;
private boolean is_connected = false;
private Set<BluetoothDevice> pairedDevices;
private ArrayList<BluetoothDevice> pairedListe;
private ListView lv;
private static String mac_adresse; // MAC Adresse des Bluetooth Adapters


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_blue);

    Log.d(LOG_TAG, "Bluetest: OnCreate");

    ((Button)findViewById(R.id.bt_on)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_trennen)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_verbinden)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_liste)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_senden)).setOnClickListener(this);


    ((TextView) findViewById(R.id.text_uuid)).setText("UUID: " + uuid);
    pairedListe = new ArrayList<>();

    // Verbindung mit Bluetooth-Adapter herstellen
    adapter = BluetoothAdapter.getDefaultAdapter();
    if (adapter.isEnabled()) {
        Toast.makeText(this, "Bitte Bluetooth aktivieren oder auf On Klicken", Toast.LENGTH_LONG).show();
        Log.d(LOG_TAG, "-----------> onCreate: Bluetooth Fehler: Deaktiviert oder nicht vorhanden");
    } else {
        Log.d(LOG_TAG, "-----------> onCreate: Bluetooth-Adapter ist bereit");
    }

    lv = (ListView)findViewById(R.id.paired_listview);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            BluetoothDevice mDevice = pairedListe.get(position);
            mac_adresse = mDevice.getAddress();
            ((EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);

// ((EditText) findViewById(R.id.text_adresse)).setText("78:A5:04:3A:6E:05");
}
});
}

public  void bluetoothOn(){
    if (!adapter.isEnabled()) {
        Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(turnOn, 0);
        adapter = BluetoothAdapter.getDefaultAdapter();
        Toast.makeText(getApplicationContext(), "Bluetooth ist On",Toast.LENGTH_LONG).show();
        Log.d(LOG_TAG, "onCreate: Bluetooth-Adapter ist bereit");

    } else {
        Toast.makeText(this, "BT On", Toast.LENGTH_LONG).show();
        Log.d(LOG_TAG,"onCreate: Bluetooth Fehler: Deaktiviert oder nicht vorhanden");
    }
}

public void listeBTGeräte(){

    pairedDevices = adapter.getBondedDevices();
    ArrayList list = new ArrayList();

    for(BluetoothDevice bt : pairedDevices) {
        list.add(bt.getName());
        pairedListe.add(bt);
    }


    Toast.makeText(this, "List Paired Devices",Toast.LENGTH_SHORT).show();
    final ArrayAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
    lv.setAdapter(adapter);

}

public void verbinden() {


    mac_adresse = ((EditText) findViewById(R.id.text_adresse)).getText().toString();

    //mac_adresse = "78:A5:04:3A:6E:05";

    Log.d(LOG_TAG, "Verbinde mit ---------------------------------------------------------------------");
    Log.d(LOG_TAG, "Verbinde mit " + mac_adresse);
    Log.d(LOG_TAG, "Verbinde mit ---------------------------------------------------------------------");

   BluetoothDevice remote_device = adapter.getRemoteDevice(mac_adresse);



    // Socket erstellen
    try {
        socket = remote_device
                .createInsecureRfcommSocketToServiceRecord(uuid);
        Log.d(LOG_TAG, "Socket erstellt");
    } catch (Exception e) {
        Log.e(LOG_TAG, "Socket Erstellung fehlgeschlagen: " + e.toString());
    }

    adapter.cancelDiscovery();

    // Socket verbinden
    try {
        socket.connect();
        Log.d(LOG_TAG, "Socket verbunden");
        is_connected = true;
    } catch (IOException e) {
        is_connected = false;
        Log.e(LOG_TAG, "Socket kann nicht verbinden: " + e.toString());
    }

    // Socket beenden, falls nicht verbunden werden konnte
    if (!is_connected) {
        try {
            socket.close();
        } catch (Exception e) {
            Log.e(LOG_TAG,
                    "Socket kann nicht beendet werden: " + e.toString());
        }
    }

    // Outputstream erstellen:
    try {
        stream_out = socket.getOutputStream();
        Log.d(LOG_TAG, "OutputStream erstellt");
    } catch (IOException e) {
        Log.e(LOG_TAG, "OutputStream Fehler: " + e.toString());
        is_connected = false;
    }

    // Inputstream erstellen
    try {
        stream_in = socket.getInputStream();
        Log.d(LOG_TAG, "InputStream erstellt");
    } catch (IOException e) {
        Log.e(LOG_TAG, "InputStream Fehler: " + e.toString());
        is_connected = false;
    }

    if (is_connected) {
        Toast.makeText(this, "Verbunden mit " + mac_adresse,
                Toast.LENGTH_LONG).show();
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.GREEN);
    } else {
        Toast.makeText(this, "Verbindungsfehler mit " + mac_adresse,
                Toast.LENGTH_LONG).show();
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.RED);
    }
}

public void senden() {
    String message = ((EditText) findViewById(R.id.text_eingabe)).getText()
            .toString();
    byte[] msgBuffer = message.getBytes();
    if (is_connected) {
        Log.d(LOG_TAG, "Sende Nachricht: " + message);
        try {
            stream_out.write(msgBuffer);
        } catch (IOException e) {
            Log.e(LOG_TAG,
                    "Bluetest: Exception beim Senden: " + e.toString());
        }
    }
}

public void trennen() {
    if (is_connected && stream_out != null) {
        is_connected = false;
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.RED);
        Log.d(LOG_TAG, "Trennen: Beende Verbindung");
        try {
            stream_out.flush();
            socket.close();
        } catch (IOException e) {
            Log.e(LOG_TAG,
                    "Fehler beim beenden des Streams und schliessen des Sockets: "
                            + e.toString());
        }
    } else
        Log.d(LOG_TAG, "Trennen: Keine Verbindung zum beenden");
}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "onDestroy. Trenne Verbindung, falls vorhanden");
    trennen();
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.bt_on:
            bluetoothOn();
            break;
        case  R.id.bt_verbinden:
            verbinden();
            break;
        case  R.id.bt_liste:
            listeBTGeräte();
            break;
        case  R.id.bt_trennen:
            trennen();
            break;
        case R.id.bt_senden:
            senden();
            break;
    }
}

}

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 19:01:15 via Website

Mal noch eine Frage wird die Activity überhaupt aufgerufen. Siehst du das Layout?
Wievielte Activitys hast du ?
Zeige mal dein Manifest
Zum code später

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 19:19:36 via Website

Okay.

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".ActivityBlue">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Sicher sehe ich das Layout. Alle Widgets sind sichtbar.
Alles kann ich nicht schicken da diese Meldung ständig erscheint:
Bitte überprüfe Deinen Beitrag noch einmal, es sind Fehler aufgetreten.

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 19:21:12 via Website

Diese Zeilen kann ich nicht mit http schicken:

package="com.bitwerk.ble_hm10">

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 19:27:17 via Website

Ich meinte natürlich den oberen Kopf der AndroidManifest.xml kann ich nicht schicken.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 19:58:15 via Website

Ist schon Ok habe gesehen was ich wollte. Wollte wissen welche Activity gestartet wird bzw. wie die heißt.

Eigentlich sollte der code laufen.
Bei den Logs und Toast hast du die texte etwas durcheinander.
Wenn du gepaarte Geräte hast sollten die auch wenn du auf Liste Klickst angezeigt werden.

Wenn du die Mac gleich gesetzt haben willst dann setze sie in der onCrate und da ich sie aus dem EditText hole musst du sie auch dort ablegen. Dann solltest du auch ohne gepaart zu sein verbinden können .
Es werden aber noch lange nicht alle Fehler Möglichkeiten abgefangen. Zb. Wenn du auf verbinden Klicks und Bt ist nicht gibt es Fehler . Mein Code war auch nur als Beispiel zu verstehen mehr nicht.

public class ActivityBlue extends AppCompatActivity implements View.OnClickListener{

// UUID fuer Kommunikation mit Seriellen Modulen
private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

// private UUID uuid = UUID.fromString("00001804-0000-1000-8000-00805F9B34FB");
// 00001804-0000-1000-8000-00805f9b34fb
/*
public static final UUID TX_POWER_UUID = UUID.fromString("00001804-0000-1000-8000-00805f9b34fb");
public static final UUID TX_POWER_LEVEL_UUID = UUID.fromString("00002a07-0000-1000-8000-00805f9b34fb");
public static final UUID FIRMWARE_REVISON_UUID = UUID.fromString("00002a26-0000-1000-8000-00805f9b34fb");
public static final UUID DIS_UUID = UUID.fromString("0000180a-0000-1000-8000-00805f9b34fb");

//public static final UUID CCCD = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
public static final UUID CCCD = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
//public static final UUID RX_SERVICE_UUID = UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID RX_SERVICE_UUID = UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb");
//public static final UUID RX_CHAR_UUID = UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID RX_CHAR_UUID = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");
//public static final UUID TX_CHAR_UUID = UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
public static final UUID TX_CHAR_UUID = UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");

*/

private static final String LOG_TAG = "BLueTest";


private BluetoothAdapter adapter = null;
private BluetoothSocket socket = null;
private OutputStream stream_out = null;
private InputStream stream_in = null;
private boolean is_connected = false;
private Set<BluetoothDevice> pairedDevices;
private ArrayList<BluetoothDevice> pairedListe;
private ListView lv;
private static String mac_adresse; // MAC Adresse des Bluetooth Adapters


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d(LOG_TAG, "Bluetest: OnCreate");

    ((Button)findViewById(R.id.bt_on)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_trennen)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_verbinden)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_liste)).setOnClickListener(this);
    ((Button)findViewById(R.id.bt_senden)).setOnClickListener(this);


    ((TextView) findViewById(R.id.text_uuid)).setText("UUID: " + uuid);
    pairedListe = new ArrayList<>();

    mac_adresse = "78:A5:04:3A:6E:05";
    (EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);
    // Verbindung mit Bluetooth-Adapter herstellen
    adapter = BluetoothAdapter.getDefaultAdapter();
    if (adapter.isEnabled()) {
        Log.d(LOG_TAG, "-----------> onCreate: Bluetooth-Adapter ist bereit");
    } else {
        Toast.makeText(getApplicationContext(), "Bitte Bluetooth aktivieren oder auf On Klicken", Toast.LENGTH_LONG).show();
        Log.d(LOG_TAG, "-----------> onCreate: Bluetooth-Adapter ist nicht bereit");
    }

    lv = (ListView)findViewById(R.id.paired_listview);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            BluetoothDevice mDevice = pairedListe.get(position);
            mac_adresse = mDevice.getAddress();
            ((EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);

// ((EditText) findViewById(R.id.text_adresse)).setText("78:A5:04:3A:6E:05");
}
});
}

public  void bluetoothOn(){
    if (!adapter.isEnabled()) {
        Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(turnOn, 0);
        adapter = BluetoothAdapter.getDefaultAdapter();
        Log.d(LOG_TAG,"Button On: Bluetooth BT muss vom User eingeschaltet werden");

    } else {
        Toast.makeText(getApplicationContext(), "BT ON", Toast.LENGTH_LONG).show();
        Log.d(LOG_TAG,"Button On: Bluetooth ist ON");
    }
}

public void listeBTGeräte(){

    pairedDevices = adapter.getBondedDevices();
    ArrayList list = new ArrayList();

    for(BluetoothDevice bt : pairedDevices) {
        list.add(bt.getName());
        pairedListe.add(bt);
    }


    Toast.makeText(this, "List Paired Devices",Toast.LENGTH_SHORT).show();
    final ArrayAdapter adapter = new  ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
    lv.setAdapter(adapter);

}

public void verbinden() {


    mac_adresse = ((EditText) findViewById(R.id.text_adresse)).getText().toString();

    //mac_adresse = "78:A5:04:3A:6E:05";

    Log.d(LOG_TAG, "Verbinde mit ---------------------------------------------------------------------");
    Log.d(LOG_TAG, "Verbinde mit " + mac_adresse);
    Log.d(LOG_TAG, "Verbinde mit ---------------------------------------------------------------------");

    BluetoothDevice remote_device = adapter.getRemoteDevice(mac_adresse);



    // Socket erstellen
    try {
        socket = remote_device
                .createInsecureRfcommSocketToServiceRecord(uuid);
        Log.d(LOG_TAG, "Socket erstellt");
    } catch (Exception e) {
        Log.e(LOG_TAG, "Socket Erstellung fehlgeschlagen: " + e.toString());
    }

    adapter.cancelDiscovery();

    // Socket verbinden
    try {
        socket.connect();
        Log.d(LOG_TAG, "Socket verbunden");
        is_connected = true;
    } catch (IOException e) {
        is_connected = false;
        Log.e(LOG_TAG, "Socket kann nicht verbinden: " + e.toString());
    }

    // Socket beenden, falls nicht verbunden werden konnte
    if (!is_connected) {
        try {
            socket.close();
        } catch (Exception e) {
            Log.e(LOG_TAG,
                    "Socket kann nicht beendet werden: " + e.toString());
        }
    }

    // Outputstream erstellen:
    try {
        stream_out = socket.getOutputStream();
        Log.d(LOG_TAG, "OutputStream erstellt");
    } catch (IOException e) {
        Log.e(LOG_TAG, "OutputStream Fehler: " + e.toString());
        is_connected = false;
    }

    // Inputstream erstellen
    try {
        stream_in = socket.getInputStream();
        Log.d(LOG_TAG, "InputStream erstellt");
    } catch (IOException e) {
        Log.e(LOG_TAG, "InputStream Fehler: " + e.toString());
        is_connected = false;
    }

    if (is_connected) {
        Toast.makeText(this, "Verbunden mit " + mac_adresse,
                Toast.LENGTH_LONG).show();
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.GREEN);
    } else {
        Toast.makeText(this, "Verbindungsfehler mit " + mac_adresse,
                Toast.LENGTH_LONG).show();
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.RED);
    }
}

public void senden() {
    String message = ((EditText) findViewById(R.id.text_eingabe)).getText()
            .toString();
    byte[] msgBuffer = message.getBytes();
    if (is_connected) {
        Log.d(LOG_TAG, "Sende Nachricht: " + message);
        try {
            stream_out.write(msgBuffer);
        } catch (IOException e) {
            Log.e(LOG_TAG,
                    "Bluetest: Exception beim Senden: " + e.toString());
        }
    }
}

public void trennen() {
    if (is_connected && stream_out != null) {
        is_connected = false;
        ((Button) findViewById(R.id.bt_verbinden))
                .setBackgroundColor(Color.RED);
        Log.d(LOG_TAG, "Trennen: Beende Verbindung");
        try {
            stream_out.flush();
            socket.close();
        } catch (IOException e) {
            Log.e(LOG_TAG,
                    "Fehler beim beenden des Streams und schliessen des Sockets: "
                            + e.toString());
        }
    } else
        Log.d(LOG_TAG, "Trennen: Keine Verbindung zum beenden");
}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(LOG_TAG, "onDestroy. Trenne Verbindung, falls vorhanden");
    trennen();
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.bt_on:
            bluetoothOn();
            break;
        case  R.id.bt_verbinden:
            verbinden();
            break;
        case  R.id.bt_liste:
            listeBTGeräte();
            break;
        case  R.id.bt_trennen:
            trennen();
            break;
        case R.id.bt_senden:
            senden();
            break;
    }
}

}

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 20:11:53 via Website

Die Zeile (EditText) findViewById(R.id.text_adresse)).setText(mac_adresse); wird vom Compiler nicht akzeptiert.
Gibt eine Fehler Meldung:
Compilation failed; see the compiler error output for details.

com/bitwerk/ble_hm10/ActivityBlue.java
error: not a statement
error: ';' expected

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 20:14:39 via Website

Richtig ist wohl ((EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);. Keine Compiler error mehr dafür aber dieser Blödsinn:
app/src/main/java
com/bitwerk/ble_hm10/ActivityBlue.java
uses unchecked or unsafe operations.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 20:18:02 via Website

Da wurde irgendwie eine Klammer weggeschnitten.

((EditText) findViewById(R.id.text_adresse)).setText(mac_adresse);

Hilfreich?
swa00
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 20:21:57 via Website

Post haben sich überschnitten.

stimmt dein Package name mit deiner Ordner Struktur überein?

— geändert am 19.01.2019, 20:24:13

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 20:23:35 via Website

Habe die App gerade auf das Handy gespielt. Geht auch nicht.
Liste gibt immer nichts aus.
BT ON zeigt BT On.
VERBINDEN Taste wechselt auf Rot aber die BT LED blinkt immer noch. Also ein Zeichen das nichts verbunden wurde. Denn bei erfolgreichem Verbinden bleibt die LED auf dem HM-10 konstant an.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 20:32:08 via Website

Hast du wirklich die Geräte gepaart. Zeige ein Foto von den Android BT Screen wo deine gepaarten Geräte aufgelistet werden.

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 20:35:58 via Website

So sieht es bei mir aus:
app
manifests
AndroidManifest.xml
java
com.bitwerk.ble_hm10
ActivityBlue
com.bitwerk.ble_hm10 (androidTest)
ExampleInstrumentedTest
com.bitwerk.ble_hm10 (test)
ExampleUnitTest
generatedJava
com.bitwerk.ble_hm10
BuildConfig
res
drawable
layout
activity_blue.xml
mipmap-xhdpi
values
colors.xml
strings.xml
styles.xml

dann kommt der Gradle Krempel

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 20:43:49 via Website

das wolte ich nicht ich will so was sehen um dir glauben zu können das die geräte gepaart sind.image

Hilfreich?
swa00
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

19.01.2019, 21:08:50 via Website

image

Kerze_111 ist mein HM 10 Modul

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 21:13:26 via Website

verfügbar also in der nähe. aber nicht gekoppelt ist ein unterschied.

verfügbare Geräte werden im code nicht angezeigt nur gekoppelte gepaarte Geräte.

Der Unterschied zwischen Gepaart und Verfügbar, Sichtbar hat arber nichts mit Android Anfänger zu tun.
Das ist bei IOS auch so.

— geändert am 19.01.2019, 21:23:58

Hilfreich?
Pascal P.
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

19.01.2019, 21:20:37 via Website

der Code ist für gekoppelte ,gepaarte Geräte nicht für verfügbare Geräte.
Das kannst du selber schreiben. Doku Link ist am Anfang. Dann hast du das was deine App aus dem Store macht.
Die Doku Links wirst du wohl nicht gelesen haben.

— geändert am 19.01.2019, 21:31:37

Hilfreich?
Pascal P.
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

20.01.2019, 23:22:11 via Website

Moin

Nachdem ich den Sonntag mit lesen verbracht habe finde ich das:

Hm10s by default are non discoverable/pairing BLE UART over air.
They aren’t designed to be “paired” with. And shouldn’t show up in androids Bluetooth pairings. Older phones with pre bluetooth v4+ the BLE devices would show up. But BLE devices are not designed to show up in the Bluetooth pairings of android.

Meine Hardware ist auch mit iPhone nicht gepaart und auch nicht sichtbar. Es erscheint per Namen in der Auswahlliste und kann verbunden werden.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

20.01.2019, 23:28:34 via Website

Ja das kann sein. Der Code ist nicht BLE . Sondern klassisch Rfcomm
Dazu musst du dir eine lib zu BLE suchen.
Ob da schon etwas im Android sdk vorhanden ist weiß ich jetzt nicht.

am sinnvollsten wird es wohl sein das Glatt Protokoll zu benutzen . Für das HM10 ist wohl für Senden und Empfangen. Service = „ffe0“ Carakteristic = „ffe1“ read , write, notify

https://developer.android.com/guide/topics/connectivity/bluetooth-le#java

— geändert am 21.01.2019, 00:23:08

Hilfreich?
Kommentieren
bitwerk46
  • Forum-Beiträge: 17

21.01.2019, 10:24:28 via Website

Habe ein Modul auf dieser Basis gefunden und meine IOS App auf Android fast komplett umgeschrieben.
Habe noch ein paar Probleme mit dem Android Studio 3.3 was die Views mit Constraint, Linear und Relative Layout betrifft, aber man lernt dazu. Ich habe leider bei meinem AS 3.2.1 ein Update auf 3.3 durchgeführt und damit fing das Elend an.

Ach ja, "Android-nRF-UART by no-go" - auf GitHub Pages ist die Ausgangsbasis für mein BLE System. Hat auf Anhieb funktioniert.

Hilfreich?
Kommentieren
ekinci
  • Forum-Beiträge: 2

26.08.2020, 13:22:38 via Website

Hi Joker,

hab eine Frage. Könnte ich mit dein Code auch die Mitteilung an ein Android Gerät (Smartphone) schicken? Würde das funktionieren.

Vielen Dank im Voraus!

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.08.2020, 15:57:24 via Website

Du kannst auch 2 Smartphones mit BT verbinden.
Bis auf die verschickten Nachtrichten wärde dies auch der selbe Code.
Du müsstest ihnd dann auf deine Belange anpassen

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.529

26.08.2020, 19:05:04 via Website

Hallo
Richtig was @Pascal sagt.

Nur beachte das in dem Code nur eine sende Methode vorhanden, ein Empfang ist nicht vorhanden.
Der Code sendet nur Daten an das BT Modul mehr nicht.

Wenn du Daten von Handy zu Handy schicken willst musst du auch eine Empfangs Methode machen.
Das aber besser in einen Thread und Receiver.

Auch das senden sollte man besser in einem Thread machen.

Hilfreich?
Pascal P.
Kommentieren
ekinci
  • Forum-Beiträge: 2

27.08.2020, 08:37:18 via Website

Vielen Dank. Alles klar.

Hilfreich?
Kommentieren