Skip to content
Snippets Groups Projects
Commit 0510219d authored by Paul-Winpenny's avatar Paul-Winpenny
Browse files

Create RPiBluetooth.py

parent a564f3f6
No related branches found
No related tags found
1 merge request!1App now has a basic structure and BLE support
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
ADVERTISING_UUID = '00001801-0000-1000-8000-00805f9b34fb'
def register_ad_cb():
print("Advertisement registered")
def register_ad_error_cb(error):
print(f"Failed to register advertisement: {error}")
def register_advertisement(adapter, advertisement):
ad_manager = dbus.Interface(adapter, 'org.bluez.LEAdvertisingManager1')
ad_manager.RegisterAdvertisement(advertisement.get_path(), {},
reply_handler=register_ad_cb,
error_handler=register_ad_error_cb)
class BLEAdvertisement(dbus.service.Object):
def __init__(self, bus, index):
self.path = f"/org/bluez/example/advertisement{index}"
self.props = {
'Type': dbus.String('peripheral'),
'ServiceUUIDs': dbus.Array([dbus.String(ADVERTISING_UUID)]),
'LocalName': dbus.String('MyRaspberryPi')
}
super().__init__(bus, self.path)
def get_path(self):
return dbus.ObjectPath(self.path)
@dbus.service.method('org.bluez.LEAdvertisement1', in_signature='', out_signature='a{sv}')
def GetProperties(self):
return self.props
@dbus.service.method('org.bluez.LEAdvertisement1', in_signature='', out_signature='')
def Release(self):
print(f"{self.path}: Released")
def main():
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
# Access the Bluetooth adapter
adapter = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.bluez.Adapter1')
# Make sure the adapter is powered on
adapter_props = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.freedesktop.DBus.Properties')
adapter_props.Set('org.bluez.Adapter1', 'Powered', dbus.Boolean(1))
# Create the BLE advertisement and register it
advertisement = BLEAdvertisement(bus, 0)
ad_manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez/hci0'), 'org.bluez.LEAdvertisingManager1')
ad_manager.RegisterAdvertisement(advertisement.get_path(), {},
reply_handler=register_ad_cb,
error_handler=register_ad_error_cb)
print("BLE Advertising started. Press Ctrl+C to stop.")
mainloop = GLib.MainLoop()
mainloop.run()
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment