ich wollte von einem Raspberry per Bluetooth einen HC06 kontaktieren. Je nach Aufruf auf verschiedene HC06. Angeben wollte ich Bluetooth-Adresse und Pincode und damit automatisiert die Verbindung aufbauen.
Zu diesem Zweck hab ich ein Simple-Agent-Beispiel angepasst. Jedoch als Neuling bei Sockets und DBus unter Python.
Code: Alles auswählen
from bluetool import Bluetooth
import bluetooth
import sys
from gi.repository import GObject
import dbus
import dbus.service
import dbus.mainloop.glib
from optparse import OptionParser
BUS_NAME = 'org.bluez'
AGENT_INTERFACE = 'org.bluez.Agent1'
AGENT_PATH = "/test/agent"
bus = None
device_obj = None
dev_path = None
bd_addr = "12:34:56:78:90:AB"
bd_pin = "1234"
class Rejected(dbus.DBusException):
_dbus_error_name = "org.bluez.Error.Rejected"
class Agent(dbus.service.Object):
pin = "1234"
def setPin(self, pin):
self.pin = pin
@dbus.service.method(AGENT_INTERFACE, in_signature="", out_signature="")
def Release(self):
print("Release")
mainloop.quit()
@dbus.service.method(AGENT_INTERFACE, in_signature="o", out_signature="s")
def RequestPinCode(self, device):
print("RequestPinCode (%s)" % (device))
return(self.pin)
if __name__ == '__main__':
bt = Bluetooth()
devices = bt.get_paired_devices()
print(devices)
bd_addrb = bytes(bd_addr, 'utf-8')
if(next((item for item in devices if item["mac_address"] == bd_addrb), False)):
print("paired")
port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.bind(("", port))
try:
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
except(bluetooth.BluetoothError):
print("bt-error")
except:
print("Fehler")
else:
print("not paired")
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
path = "/test/agent"
agent = Agent(bus, path)
agent.setPin(bd_pin)
obj = bus.get_object(BUS_NAME, "/org/bluez");
manager = dbus.Interface(obj, "org.bluez.AgentManager1")
manager.RegisterAgent(path, "KeyboardDisplay")
print("Agent registered")
port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.bind(("", port))
try:
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
except(bluetooth.BluetoothError):
print("bt-error")
except:
print("Fehler")
manager.RequestDefaultAgent(path)