Page 1 of 1

Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Mon Jan 08, 2018 9:32 pm
by cr4nk
Hallo,



bin an einer App für das Handy dran, mit der ich die GPIO vom RasPi steuern möchte

Wenn ich auf Verbinden klicke erscheint nichts, aber wenn Bluetooth aus ist kommt meine Meldung. (Logisch...)

Ich beobachte auf dem RasPi Zero das für kurze Zeit (einige Sekunden) eine Verbindung entsteht, diese wird aber dann abgebrochen. (Im Anhang findet man Screenshots)

Als Ausgabe kommt auch nichts, mit BlueTerm funktioniert das ganze.. also das ich die GPIO steuern kann


Weiß jemand vielleicht woran es liegt? Bin ich komplett falsch an die Sache ran?

Das ganze habe ich mit C# (xamarin) gemacht..


Mein Quellcode:

Code: Select all

using System;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using Android.Bluetooth;
using Java.Util;
namespace RasPi
{
        [Activity(Label = "VerbindenActivity")]
        public class VerbindenActivity : Activity
        {
            BluetoothDevice device;
            BluetoothAdapter adapter;
            Button btnBluetooth;
            Button btnTest;
            BluetoothSocket socket;
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                //Layout laden
                SetContentView(Resource.Layout.Verbinden);
                btnBluetooth = FindViewById<Button>(Resource.Id.btnBluetooth);
                btnBluetooth.Click += Bluetooth_Click;
                btnTest = FindViewById<Button>(Resource.Id.btnTest);
                btnTest.Click += BtnTest_Click;
        }
            async void Bluetooth_Click(object sender, EventArgs e)
            {
                //Alert für die verschienden Fälle
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.SetTitle("Status");
                builder.SetCancelable(false);
                builder.SetPositiveButton("Ok", (object sendersender, DialogClickEventArgs ee) =>
                {
                    //Nichts machen
                });
                try
                {
                    adapter = BluetoothAdapter.DefaultAdapter;
                    if (!adapter.IsEnabled)
                    {
                        builder.SetMessage("Bluetooth einschalten!");
                        AlertDialog statusAlert = builder.Create();
                        statusAlert.Show();
                    }
                    else if (adapter.IsEnabled)
                    {
                        device = (from bd in adapter.BondedDevices
                                  where bd.Name == "raspberrypi"
                                  select bd).FirstOrDefault();
                        if (device == null)
                        {
                            builder.SetMessage("Raspberry Pi wurde nicht gefunden.");
                            AlertDialog statusAlert = builder.Create();
                            statusAlert.Show();
                        }
                        else
                        {
                            var socket = device.CreateRfcommSocketToServiceRecord(UUID.FromString("00000000-0000-1000-8000-00805F9B34FB"));
                            await socket.ConnectAsync();
                            btnBluetooth.Enabled = false;
                            builder.SetMessage("Verbindung erfolgreich");
                            AlertDialog statusAlert = builder.Create();
                            statusAlert.Show();
                        }
                    }
                }
                catch (Exception ex)
                {
                    Toast.MakeText(this, ex.Message, ToastLength.Short);
                }
             }
        void BtnTest_Click(object sender, EventArgs e)
        {
            TestFunction("1");
        }
        private async void TestFunction(string strDirection)
        {
            try
            {
                byte[] buffer = Encoding.ASCII.GetBytes(strDirection);
                await socket.OutputStream.WriteAsync(buffer, 0, buffer.Length);
            }
            catch (Exception ex)
            {
                Toast.MakeText(this, ex.Message, ToastLength.Short);
            }
        }
    }
}
Anscheinend steckt es beim "await socket.ConnectAsync();" fest und bricht dann ab. Das habe ich herausgefunden indem ich ein Alert nach "var socket = device.CreateRfcommSocketToServiceRecord[...]" ausgegeben habe und einen Schritt weiter hat er mir keinen Alert ausgegeben.

Im Prinzip möchte ich meinem RasPi zahlen senden und dieser Empfängt diese und arbeitet weiter.

Der Code auf dem RasPi der mit BlueTerm 2 funktioniert:

Code: Select all

import bluetooth
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setwarnings(False)

server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

port = 1
server_socket.bind(("", bluetooth.PORT_ANY))
server_socket.listen(1)

client_socket, address = server_socket.accept()
print ("Verbunden ", address)
try:
    while 1:
        data = client_socket.recv(1024)
        print ("Empfangen: %s" % data)
        if (data == b'0'):
            GPIO.output(11, 0)
        if (data == b'1'):
            GPIO.output(11, 1)

finally:
    print("Cleaning Up!")
    GPIO.cleanup()
    client_socket.close()
    server_socket.close()
Ich hoffe jemand kann mir helfen, da ich schon sehr lange dran sitze....

Danke im Voraus..

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Tue Jan 09, 2018 9:34 am
by smartifahrer
BlueTerm ist eine App auf dem Handy, richtig? Wenn es darüber geht so baut deine andere App auf dem Handy vielleicht die Verbindung falsch oder gar nicht auf. Falsche Bluetooth Profil und/oder Verbindungsparameter.

Wäre schön wenn du dein Projekt hier teilst. Mich interessiert das Thema auch. Nutzt du Android?

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Tue Jan 09, 2018 12:24 pm
by mline
Das einzige was mir aufgefallen ist: Die UUID ist nur die Basis. Da fehlt die Servicespezifikation ( https://www.bluetooth.com/specification ... -discovery )

Hier https://developer.xamarin.com/api/membe ... iceRecord/ ganz unten ist ein Beispiel für eine SPP UUID

Die Art wie du asynchrone Funktionen als synchrone nutzt finde ich zwar garnicht schön, sollte allerdings so funktionieren.

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Tue Jan 09, 2018 4:45 pm
by cr4nk
smartifahrer wrote:
Tue Jan 09, 2018 9:34 am
BlueTerm ist eine App auf dem Handy, richtig? Wenn es darüber geht so baut deine andere App auf dem Handy vielleicht die Verbindung falsch oder gar nicht auf. Falsche Bluetooth Profil und/oder Verbindungsparameter.

Wäre schön wenn du dein Projekt hier teilst. Mich interessiert das Thema auch. Nutzt du Android?
Das ist meine erste App mit Bluetooth für den RasPi.
Ja BlueTerm ist eine App auf dem Handy.
ja ich nutze Android, wie kann ich dir mein Projekt teilen?
Bluetooth Profil?

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Tue Jan 09, 2018 4:46 pm
by cr4nk
mline wrote:
Tue Jan 09, 2018 12:24 pm
Das einzige was mir aufgefallen ist: Die UUID ist nur die Basis. Da fehlt die Servicespezifikation ( https://www.bluetooth.com/specification ... -discovery )

Hier https://developer.xamarin.com/api/membe ... iceRecord/ ganz unten ist ein Beispiel für eine SPP UUID

Die Art wie du asynchrone Funktionen als synchrone nutzt finde ich zwar garnicht schön, sollte allerdings so funktionieren.
Hi,

diese UUID habe ich auch schon Probiert.
Wie wäre es deiner Meinung nach besser....

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Wed Jan 10, 2018 12:58 pm
by smartifahrer
Teilen: in dem du hier im Forum mehr davon veröffentlichst z.B. als Tutorial oder auf einer externen Seite die du dann verlinkst.
Einfach so das auch andere so was umsetzen können. Programmcode wäre dann gut. Er muss ja nicht perfekt sein ;) Sollte nur funken.
Bluetooth Profil: "Bluetooth-Profile" was auch mline gemeint hat.

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Posted: Wed Jan 10, 2018 8:58 pm
by cr4nk
smartifahrer wrote:
Wed Jan 10, 2018 12:58 pm
Teilen: in dem du hier im Forum mehr davon veröffentlichst z.B. als Tutorial oder auf einer externen Seite die du dann verlinkst.
Einfach so das auch andere so was umsetzen können. Programmcode wäre dann gut. Er muss ja nicht perfekt sein ;) Sollte nur funken.
Bluetooth Profil: "Bluetooth-Profile" was auch mline gemeint hat.
Okay, mache ich.
Bei mir funktioniert das aber immernoch nicht ....
Liegt es daran das ich mit dem onBoard Bluetooth vom RasPi arbeite? Nein oder?
Kannst du mir ein beispiel machen?