cr4nk
Posts: 5
Joined: Sun Jan 07, 2018 7:03 pm

Raspberry Pi Zero W Steuerung über Bluetooth

Mon Jan 08, 2018 9:32 pm

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..
Attachments
RasPi.jpg
RasPi.jpg (161.65 KiB) Viewed 488 times
RasPi -.jpg
RasPi -.jpg (164.87 KiB) Viewed 488 times

smartifahrer
Posts: 290
Joined: Sat Feb 13, 2016 8:10 am

Re: Raspberry Pi Zero W Steuerung über Bluetooth

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?

User avatar
mline
Posts: 980
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Raspberry Pi Zero W Steuerung über Bluetooth

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.
<~~>

cr4nk
Posts: 5
Joined: Sun Jan 07, 2018 7:03 pm

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Tue Jan 09, 2018 4:45 pm

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?
Last edited by cr4nk on Tue Jan 09, 2018 7:37 pm, edited 1 time in total.

cr4nk
Posts: 5
Joined: Sun Jan 07, 2018 7:03 pm

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Tue Jan 09, 2018 4:46 pm

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....

smartifahrer
Posts: 290
Joined: Sat Feb 13, 2016 8:10 am

Re: Raspberry Pi Zero W Steuerung über Bluetooth

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.

cr4nk
Posts: 5
Joined: Sun Jan 07, 2018 7:03 pm

Re: Raspberry Pi Zero W Steuerung über Bluetooth

Wed Jan 10, 2018 8:58 pm

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?

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 10 guests