def connect_ble_device(device): print('found device: ', str(device)) if str(device).find('NOA_BLE_UART') > -1: lock.acquire() print('Start connect') device.connect() print('Start discover') device.discover() for key, val in device.characteristics.items(): print("- GATTCharacteristic: 0x%x" % key) write_uuid = uuid.gattlib_uuid_str_to_int( '6e400002b5a3f393e0a9e50e24dcca9e') write_characteristic = device.characteristics[write_uuid] notify_uuid = uuid.gattlib_uuid_str_to_int( '6e400003b5a3f393e0a9e50e24dcca9e') notify_characteristic = device.characteristics[notify_uuid] notify_characteristic.register_notification(notify_progress) notify_characteristic.notification_start() while True: content = input("Please input content\n") if content == 'disconnect': device.disconnect() break else: write_characteristic.write(content.encode()) print('write success: ', content) print("Quit success") default_adapter.scan_disable() default_adapter.close() lock.release()
def sound_service(args, gatt_device): global m_mainloop NORDIC_THINGY_SOUND_SERVICE = uuid.gattlib_uuid_str_to_int( "EF680500-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_CONFIG_CHAR = uuid.gattlib_uuid_str_to_int( "EF680501-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_SPEAKER_CHAR = uuid.gattlib_uuid_str_to_int( "EF680502-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_SPEAKER_STATUS_CHAR = uuid.gattlib_uuid_str_to_int( "EF680503-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_MICROPHONE_CHAR = uuid.gattlib_uuid_str_to_int( "EF680504-9B35-4933-9B10-52FFA9740042") config_characteristic = gatt_device.characteristics[ NORDIC_THINGY_CONFIG_CHAR] speaker_characteristic = gatt_device.characteristics[ NORDIC_THINGY_SPEAKER_CHAR] speaker_status_characteristic = gatt_device.characteristics[ NORDIC_THINGY_SPEAKER_STATUS_CHAR] microphone_characteristic = gatt_device.characteristics[ NORDIC_THINGY_MICROPHONE_CHAR] try: DBusGMainLoop(set_as_default=True) m_mainloop = GLib.MainLoop() speaker_status_characteristic.register_notification( speaker_status_notification) speaker_status_characteristic.notification_start() if args.wav: threading.Thread(target=play_wav_file, args=(config_characteristic, speaker_characteristic, args.wav)).start() else: threading.Thread(target=play_sample, args=(config_characteristic, speaker_characteristic)).start() m_mainloop.run() except KeyboardInterrupt: m_mainloop.quit() finally: speaker_status_characteristic.notification_stop() gatt_device.disconnect()
def environment_service(args, gatt_device): NORDIC_THINGY_WEATHER_STATION_SERVICE = uuid.gattlib_uuid_str_to_int( "EF680200-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_TEMPERATURE_CHAR = uuid.gattlib_uuid_str_to_int( "EF680201-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_PRESSURE_CHAR = uuid.gattlib_uuid_str_to_int( "EF680202-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_HUMIDITY_CHAR = uuid.gattlib_uuid_str_to_int( "EF680203-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_AIR_QUALITY_CHAR = uuid.gattlib_uuid_str_to_int( "EF680204-9B35-4933-9B10-52FFA9740042") temperature_characteristic = gatt_device.characteristics[ NORDIC_THINGY_TEMPERATURE_CHAR] pressure_characteristic = gatt_device.characteristics[ NORDIC_THINGY_PRESSURE_CHAR] humidity_characteristic = gatt_device.characteristics[ NORDIC_THINGY_HUMIDITY_CHAR] air_quality_characteristic = gatt_device.characteristics[ NORDIC_THINGY_AIR_QUALITY_CHAR] # Initialize graph threading.Thread(target=graph_init).start() try: DBusGMainLoop(set_as_default=True) mainloop = GLib.MainLoop() temperature_characteristic.register_notification( temperature_notification) temperature_characteristic.notification_start() pressure_characteristic.register_notification(pressure_notification) pressure_characteristic.notification_start() humidity_characteristic.register_notification(humidity_notification) humidity_characteristic.notification_start() mainloop.run() except KeyboardInterrupt: mainloop.quit() finally: humidity_characteristic.notification_stop() pressure_characteristic.notification_stop() temperature_characteristic.notification_stop() gatt_device.disconnect()
parser.add_argument('mac', type=str, help='Mac Address of the GATT device to connect') parser.add_argument( 'action', choices=['read', 'write'], help='Tell if we want to read/write the GATT characteristic') parser.add_argument('uuid', type=str, help='UUID of the GATT Characteristic') parser.add_argument('value', type=str, nargs='?', help='Value to write to the GATT characteristic') args = parser.parse_args() gatt_device = device.Device(adapter=None, addr=args.mac) gatt_device.connect() uuid = uuid.gattlib_uuid_str_to_int(args.uuid) if uuid not in gatt_device.characteristics: raise RuntimeError("Failed to find GATT characteristic '%s'" % args.uuid) characteristic = gatt_device.characteristics[uuid] if args.action == "read": value = characteristic.read() print(value) elif args.action == "write": characteristic.write(value) gatt_device.disconnect()