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);
}
}
}
}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()
Danke im Voraus..