标签: gatt

蓝牙LE适用于Java SE

我正在寻找一个支持蓝牙LE连接的Java库,特别是GATT,如果我很幸运Apple的新iBeacon协议.它需要能够自己广播,如果可能的话,能够发起连接.

我见过BlueCove甚至试图扩展它以支持蓝牙LE,但无法让它工作.有没有人知道任何支持蓝牙库的Java SE,而不是Android或Java ME,因为这似乎是我能找到的全部.

有任何想法吗?

java bluetooth bluetooth-lowenergy gatt ibeacon

9
推荐指数
0
解决办法
1562
查看次数

BLE GATT onCharacteristicChanged在订阅通知后没有调用

这是我关于SO的第一篇文章.

我在Android 5.0.2上订阅GATT通知时遇到了一些问题.

我的目的是将Arduino和BLE Shield连接到我的Android手机.我有一个连接到Arduino的传感器,想要使用BLE屏蔽将数据从Arduino发送到我的手机.盾牌上有一个nRF8001是服务器,我的手机/应用程序是客户端.

到目前为止我所做的是创建一个扫描BLE设备的Android应用程序.它可以连接到设备并读取或写入特征.所以,我可以通过调用"手动"读取特征gatt.readCharacteristic(mCharacteristic);.这允许我从Arduino获取传感器值.我还使用nRFGo Studio创建了一个自定义服务.我知道这部分工作正常,因为我可以使用Google Play上提供的BLE扫描仪应用程序发现,连接甚至收到有关特征变化的通知.但订阅我自己的应用程序中的通知将无法正常工作.好吧,至少订阅有效,但onCharacteristicChanged(...)从未调用过.有趣的是,如果我订阅我的应用程序中的特性,然后使用BLE扫描仪应用程序订阅它突然onCharacteristicChanged(...)被调用,直到我再次通过BLE扫描仪应用程序取消订阅.(我可以通过Log看到这个)

我的android代码如下:GATT回调:

private final BluetoothGattCallback mGattCallback =
        new BluetoothGattCallback() {
            @Override
            public void onConnectionStateChange(BluetoothGatt gatt, int status,
                                                int newState) {
                if (newState == BluetoothProfile.STATE_CONNECTED) {
                    sendBroadcastConnected();

                    Log.i("BLE", "Connected to GATT server.");
                    Log.i("BLE", "Attempting to start service discovery:" + bleManager.startServiceDiscovery());

                } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                    sendBroadcastDisconnected();
                    Log.i("BLE", "Disconnected from GATT server.");
                }
            }

            @Override
            public void onServicesDiscovered(BluetoothGatt gatt, int status) …
Run Code Online (Sandbox Code Playgroud)

android arduino bluetooth-lowenergy gatt

9
推荐指数
1
解决办法
1万
查看次数

BluetoothGatt:协商新的MTU成功,但不能使用新的大小(3个字节的差异)

我正在开发一个使用BLE在设备之间交换数据的应用程序.

为了获得更好的性能,在连接两个设备后,我正在协商增加MTU,以便通过BLE交换更大的数据包.

连接BluetoothDevice并读取所有服务和特性后,我请求使用以下命令增加MTU:

private void requestMtu() {
    //gatt is a BluetoothGatt instance and MAX_MTU is 512
    this.gatt.requestMtu(MAX_MTU);
}
Run Code Online (Sandbox Code Playgroud)

之后,在BluetoothGattCallback实现中,我获得MTU请求成功,新MTU匹配我请求的MTU:

@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
    super.onMtuChanged(gatt, mtu, status);

    if (status == BluetoothGatt.GATT_SUCCESS) {
        this.supportedMTU = mtu;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试发送512字节的数据包时,在另一侧(onCharacteristicWriteRequest:)我得到509字节.

有任何想法吗?

android bluetooth-lowenergy gatt

9
推荐指数
1
解决办法
3596
查看次数

通过pip3下载gattlib时出错


我运行时 使用Ubuntu 16.04 64位操作系统

$ sudo pip3 install gattlib
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

/ usr/bin/ld:找不到-lboost_python-py34
collect2:错误:ld返回1退出状态
错误:命令'x86_64-linux-gnu-g ++'失败,退出状态为1

我试着谷歌搜索如何解决这个问题,但没有什么对我
有用我想在python使用gatttool,所以我需要安装这个
我怎么解决这个问题?

PS.我已经下载了libboost-dev

python-3.x gatt ubuntu-16.04

9
推荐指数
2
解决办法
4672
查看次数

是否有蓝牙 GATT 服务及其描述的列表?

我正在寻找蓝牙 GATT 服务列表以及每个服务的简短描述。我正在开发 BLE Android 应用程序,必须选择最好的服务。

bluetooth bluetooth-lowenergy gatt bluetooth-gatt

9
推荐指数
1
解决办法
8357
查看次数

Android,如何将BLE设备配对设备(已绑定)

在GATT之前,createRfcommSocketToServiceRecord,createInsecureRfcommSocketToServiceRecord

方法可以使配对设备,

但GATT没有关于配对设备的选择,只能使用BluetoothDevice.connectGatt(...)

如果它已连接,我想制作配对设备.

谢谢.

android bluetooth-lowenergy gatt

8
推荐指数
1
解决办法
2万
查看次数

BluetoothGattServer cancelConnection不会取消连接

我有Android应用程序暴露BLE服务器.我连接BluetoothGattServer#connect.它有效 - 我的应用程序通过STATE_CONNECTED调用BluetoothGattServerCallback#onConnectionStateChange.当我完成客户端后,我尝试使用BluetoothGattServer#cancelConnection与我的应用程序断开连接.

但我没有接到对BluetoothGattServerCallback#onConnectionStateChange的调用,似乎连接仍然处于活动状态,因为我的BLE客户端没有开始做广告(当没有任何连接时它就会这样做).

在logcat中我只看到:

BluetoothGattServer: cancelConnection() - device: XX:XX:XX:XX:XX:XX
Run Code Online (Sandbox Code Playgroud)

有趣的是,我的应用程序在完全关闭BT后立即调用BluetoothGattServerCallback#onConnectionStateChangeSTATE_DISCONNECTED.

谷歌追踪器中的类似问题:6346163464.

android bluetooth-lowenergy android-bluetooth gatt android-ble

8
推荐指数
2
解决办法
1251
查看次数

在Windows中获取char值句柄

在linux中,我们有gatttool查询蓝牙低功耗设备的工具.如果我们运行,gatttool --device=[MAC] --characteristics我们将获得相应设备具有的特征列表.示例输出:

handle = 0x0002, char properties = 0x02, char value handle = 0x0003, uuid = 00002a00-0000-1000-8000-00805f9b34fb
handle = 0x0004, char properties = 0x02, char value handle = 0x0005, uuid = 00002a01-0000-1000-8000-00805f9b34fb
handle = 0x0006, char properties = 0x0a, char value handle = 0x0007, uuid = 00002a02-0000-1000-8000-00805f9b34fb
handle = 0x0008, char properties = 0x02, char value handle = 0x0009, uuid = 00002a04-0000-1000-8000-00805f9b34fb
handle = 0x000d, char properties = 0x22, char value handle = 0x000e, uuid …
Run Code Online (Sandbox Code Playgroud)

c# bluetooth-lowenergy gatt windows-10 gatttool

8
推荐指数
0
解决办法
545
查看次数

Android BLE - 一次连接多个设备

我正在开发一个连接到BLE设备并读取Gatt服务和Gatt特性的Android应用程序.我使用Android开发站点的BluetoothLeGatt示例项目作为参考.

到目前为止,我能够以编程方式连接到设备(我注意到我的设备地址能够执行此操作)并通过记录UUID过滤掉我想要读取的特定Gatt服务以及服务的特定特征服务和特征.当我的BLE设备向我的Android应用程序发送消息时,Google提供的示例也会更新.总的来说,我没有遇到任何问题.

但是,在GATT上进一步阅读后,我发现可以使用单个Android应用程序(作为主OR客户端 - 连接到多个BLE设备(所有从属设备或服务器 - 发送数据的设备))接收所述数据).所以我试图做的是拥有2个BLE设备(不同的地址),记下他们的地址,然后我的应用程序尝试连接到它们,一旦应用程序看到这两个地址启动并运行.

在代码中,当我看到我的2个BLE设备时,我会调用此函数:

private void connectToDevice(){

    mDeviceName = deviceList.get(currentIndex).getName();
    mDeviceAddress = deviceList.get(currentIndex).getAddress();

    Log.e(TAG, "connecting to device name = " + mDeviceName);

    mBluetoothLeService.connect(mDeviceAddress);
}
Run Code Online (Sandbox Code Playgroud)

currentIndex最初设置为零.然后,一旦我成功连接,我会:

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
            Log.e(TAG, "connected");
            mConnected = true;

            if(currentIndex < deviceList.size()-1) currentIndex ++;
            connectToDevice();

        } 
    }
};
Run Code Online (Sandbox Code Playgroud)

在哪里检查我是否仍然有设备连接到我的deviceList,如果是这样,增加我的计数器,然后连接,直到我耗尽我的列表中的所有内容.

但是,我似乎完全没有使用这种方法.

请注意,我的设备之间无法切换连接(循环).当我拥有大量设备时,这将是一个问题,重要的是让他们的消息实时无延迟.这就是说,我必须有一个与我的设备的实时连接.

有没有人试图连接到Android中的多个BLE设备?我不确定如何继续这个.

android bluetooth-lowenergy gatt

7
推荐指数
1
解决办法
1万
查看次数

ios CoreBluetooth connectionEventDidOccur 未被调用

我有一个外围设备,支持 A2DP 配置文件和BR/EDR 上的 gatt。各种 gatt 服务都在蓝牙经典的 sdp 记录中注册。\n我开发了一个 Android 应用程序来与其成功通信,如下所示:

\n\n
//here scan the classic Bluetooth to get its address\nBluetoothDevice device = bluetoothAdapter.getRemoteDevice(**CLASSIC_BLUETOOTH_ADDRESS**);\ndevice.connectGatt(context, false, gattCallback, BluetoothDevice.TRANSPORT_BREDR);\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我需要开发一个iOS应用程序,经过大量搜索,似乎iOS 13之后CoreBluetooth确实支持GATT over BR/EDR,但与android不同的是,它无法扫描经典蓝牙设备,但我确实找到了示例代码\ n苹果示例代码在这里,所以我编写我的测试代码如下:

\n\n
\nimport CoreBluetooth\nimport UIKit\nimport os.log\n\nstruct BTConstants {\n    static let uuidService = CBUUID.init(string: "66666666-8888-7777-5555-123456780000") //our gatt service uuid(modified)\n}\n\nclass CentralViewController: UIViewController {\n    private var cbManager: CBCentralManager!\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        cbManager = CBCentralManager(delegate: self, queue: nil)\n    }\n}\n\nextension CentralViewController: CBCentralManagerDelegate {\n    func centralManagerDidUpdateState(_ central: CBCentralManager) …
Run Code Online (Sandbox Code Playgroud)

ios core-bluetooth gatt swift bluetooth-gatt

7
推荐指数
0
解决办法
795
查看次数