Bluez-Programmierung
Ich bin Programmierung in BlueZ auf meinem Raspberry Pi mit einem USB-Bluetooth-dongle.
Ich muss in der Lage sein, um programmgesteuert eine Verbindung zu einem Arduino BT, das problem ist, dass das Bluetooth-Modul der Arduino ist immer noch mit legacy-Paarung also immer wenn ich versuchen, einen socket zu öffnen, um das Gerät bekomme ich eine Permission Denied
.
Wie sende ich entlang einer PIN zum abschließen des pairing-Anfrage durch BlueZ?
- Haben Sie testen mit der
simple-agent
? - Ich will es tun, ohne third-party software, nur durch die bluez-C-API.
- Haben, versuchen Sie dies: stackoverflow.com/questions/14820004/...
- Ich schlage vor, Sie verwenden die bluez DBUS APIs anstelle der internen hcitools code. Es ist besser unterstützt und auf einem höheren Niveau. Wenn Sie diesen Weg gehen, was Sie tun müssen, ist zu registrieren, Ihre Bewerbung als Agent. Dann, wenn ein BT-Authentifizierung erforderlich ist, muss Ihr Agent erhalten die PIN/passkey anfordern. Finden Sie die bluez agent-doc für die API. Oder Sie können starten Sie ein pairing mit dem Gerät api. Das Gerät sieht Geräte-doc für details.
- Au sieht es aus wie diese API ' s sind sowohl für Python gibt es keine Dokumentation für C?
- Sie sind nicht-python-APIs. Sie sind DBUS APIs. Wenn Sie nicht behandelt DBUS dann gibt es eine Lernkurve. Im Grunde DBUS ist ein messaging-system. Es gibt verschiedene Bindungen (C, python, etc) enthalten, die dbus-Unterstützung. Für C, die zwei häufigsten sind glib und QT (kein link, da ich nicht verwenden). bluez intern verwendet glib.
- Die docs sagen, was der Bluez DBUS-Schnittstellen und Eigenschaften sind. Dann, was Sie tun, ist (über die von Ihnen gewählte dbus-binding) aufrufen des Bluez DBUS apis zu Entdecken, Pair, Unpair, etc. Für einen schnellen start, Blick auf die bluez Umsetzung für die bluetoothctl - Befehl. Das nutzt den DBUS APIs zur Implementierung einer Befehlszeile führt, dass die verschiedenen BT-Operationen.
- au-oh ich sehe, danke. Ich nehme an es gibt keine Beispiele für die DBUS-API für bluetooth-agent Zwecke? Da DBUS ist für mehr Dinge, als jusr Bluetooth-ich fürchte, ich könnte überfordert sein
- au Danke für den link, ich werde sehen, dass heraus zu starten
- Keine Probleme. Wenn Sie irgendwelche spezifischen Fragen nach einem Blick auf, der poste bitte eine neue Frage und hoffentlich auch mich oder jemand kann Ihnen helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie vielleicht zu prüfen, die
main.c
Datei in der client Ordner der neuesten Bluez source-code. Es ist der source-code für die bluetoothctl tool. Führen Sie es auch. Der source code zeigt genau an, wie Sie verwenden GDBus, einschließlich Stellvertretern, Agenten, aufrufen von Methoden, wie beschrieben in der API (/doc Ordner) und all das. Es ist in C und verwendet die high-level-API.Ich schlage vor, Sie Schritt durch den code, denn es hat mich 2 Wochen endlos versucht zu verstehen, Bluez in C und die Tatsache, dass es keine Dokumentation gibt, aber wenn ich lese, dass main.c-Datei, die ich bereit war, in einem Tag. Lesen Sie auf der richtigen Dbus-API-Dokumentation und-noch wichtiger-Konzepte. Einige Dokumente, die mir geholfen haben:
Den gdbus-tool:
https://developer.gnome.org/gio/stable/gdbus.html
Diese enthalten alle Anrufe auf gdbus und von Objekten in der
main.c
- Datei und erklären Ihnen sehr gut.https://developer.gnome.org/gio/stable/gdbus-convenience.html
D-Füße, ein unverzichtbares Werkzeug bei der Inspektion und das lernen über Dbus auf dem system. Versuchen Sie Auschecken der /bluez-bus.
https://wiki.gnome.org/action/show/Apps/DFeet?action=show&redirect=DFeet
oder
sudo apt-get install d-feet
Nicht viel von einem tutorial, aber Lesen lohnt sich zu verstehen, einige Konzepte, wie die bluetoothctl Werkzeug passt in das, was Sie versuchen zu sagen hier.
http://dbus.freedesktop.org/doc/dbus-tutorial.html
Den bluetoothctl schafft eine interaktive shell an, aber so ist es vielleicht nicht klug sein, um Zeit zu verschwenden zu versuchen, um fit in Ihrem code, sondern einfach nur Holen, was Sie braucht.