Если вы планируете использовать систему на базе Linux, вы можете использовать bluez5.
Bluez5 предоставляет интерфейсы в DBus, поэтому взаимодействие с bluez может быть выполнено с помощью привязок dbus по вашему выбору (C, python, C# Mono ..). Используя dbus-api, вы сможете сканировать, подключаться, парно, уведомлять, читать/писать, рекламировать и многое другое.
Здесь вы можете найти описание dbus api, выставленного здесь bluez (я предлагаю посмотреть на адаптер-апи, устройство-апи и GATT-апи): https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc
Перед погружением в код, который вы можете играть с bluetoothctl (инструмент, который можно использовать для спаривания, соединяясь, открытие услуг, GATT атрибуты чтения & писать и т.д.). Кроме того, вы можете найти исходный код bluetoothctl здесь: https://git.kernel.org/cgit/bluetooth/bluez.git/tree/client/main.c
bluetoothctl был построен с использованием GLib GDBus (Dbus привязок для Glib в C), и вы найдете примеры кода для почти все, что вы хотели бы сделать с Bluez ,