天道酬勤,学无止境

bluetooth-lowenergy

Android Bluetooth Low Energy Characteristic notification count limit: does this vary by device?

问题 语境 我正在构建一个针对 5.0+ 的 Android 应用程序,它使用 BLE 连接到多个外围设备。 这些外设中的每一个都具有许多 (~10) 特性。 理想情况下,我想订阅这些特征中每一个的更改通知。 但是,我从阅读中了解到,Android 的蓝牙实现对可以激活的同时通知的数量实施了硬性限制。 此问题确定了限制在 Android 蓝牙实现中的定义位置,还指出了限制如何随时间变化: 最大并发活动通知( BTA_GATTC_NOTIF_REG_MAX ): 4 在安卓 4.3 上 7 在安卓 4.4 上 15 在 Android 5.0+ 上 Dave Smith 在此视频中确认了这些数字,其中还建议: 这些限制对设备是全局的(即,如果某个其他应用订阅了 2 条通知,我的应用可用的数量会减少 2); 这些限制不应因 Android 操作系统级别以外的任何因素而有所不同(即,它们应独立于制造商、实际硬件功能等) 问题 然而,在 5.0+ 设备上进行测试时,我发现我显然能够成功订阅超过15 个通知。 到目前为止,我已经观察到这一点: 运行 7.1.1 的 Pixel XL 运行 6.0.1 的 Galaxy S6 运行 5.X 的 Nexus 5 这些通知订阅通过两个措施成功: GATT 操作状态为GATT_SUCCESS ; 该应用程序能够接收所有目标特征的特征变化通知。

2022-05-16 09:34:38    分类:技术分享    android   bluetooth-lowenergy   android-bluetooth

Open source implementations of BLE stack

问题 回答1 有几个开源 BLE 堆栈:- NimBLE - Apache mynewt 的蓝牙低功耗堆栈。 BTstack -BlueKitchen 的蓝牙堆栈。 Zephyr - 资源受限系统的小型内核。 smallTooth - 仅限 PIC,但可能适用于 ARM。 Blessed - 针对嵌入式裸机设备的 BLE 堆栈(仅限 nrf51)。 我希望这有帮助。 回答2 我在产品中使用了 NimBLE,即 Apache Mynewt 蓝牙堆栈。 它在 Nordic NRF51 和 NRF52 芯片上工作得非常好,而且是可移植的,所以看起来移植到其他平台上并不难。 代码很好很干净。 Mynewt 还带有安全启动和软件升级功能。 几个链接: http://mynewt.apache.org/latest/network/ble/ble_intro/ https://www.youtube.com/watch?v=LCmwTWLcVBs 希望这可以帮助。 回答3

2022-05-16 05:20:03    分类:技术分享    bluetooth   bluetooth-lowenergy   bluez   android-ble

android | BLE write value to characteristic

问题 我在将值写入 BLE 特性时遇到问题。 我发送了正确的字节数组,但是主要没有改变。 我的特征很少,阅读它们没有问题。 然而,给他们每个人写新的价值是有问题的。 这是我的“阅读”部分: @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { super.onServicesDiscovered(gatt, status); if (status == BluetoothGatt.GATT_SUCCESS) { List<BluetoothGattService> services = gatt.getServices(); for (BluetoothGattService service : services) { registerService(service); characteristics = new ArrayList<BluetoothGattCharacteristic>(); characteristics.add(services.get(4).getCharacteristics().get(0)); characteristics.add(services.get(4).getCharacteristics().get(1))

2022-05-15 13:29:09    分类:技术分享    android   bluetooth-lowenergy

How does BLE parameter negotiation work?

问题 我想知道当“中央”和“外围”设置不同的参数时,参数协商如何工作。 我可能弄错了,但据我了解,外围设备在连接时会发出更新请求,以便为连接设置参数。 然后中央决定是否批准。 我不明白的是如何决定这些参数是否被批准。 而且我还没有找到任何代码。 例如,如果我有以下设置(只是选择随机值): Central:间隔 10 毫秒,从属延迟 0,监督超时 500 外设:间隔 50ms,Slave 延迟 10,supervisortimeout 3000 我如何确定我的外围参数将被使用或它们被批准的标准是什么? 如果有人能给出一个很好的解释,我将非常感激。 回答1 Central 为所欲为,Peripheral 必须遵守参数,否则断开连接。 外围可以询问中央规定的其他参数,但没有任何内容表明它们必须获得批准。 来自 Central 的验收标准是多种约束条件的组合: 规范性(这些是恒定的和全球性的), 特定于实现,大多数时候,它们依赖于外围类型/实现的服务(Apple 明确定义了一些,例如(参见 3.6)), 动态的(如果 Central 同时管理多个连接,它可能更喜欢以它们各自的间隔是公共基础的倍数的方式安排它们。 在开发外设时,您无法判断是否会使用您喜欢的连接参数。 你必须应付它。 而且,有些中心会以固定参数连接,在连接后立即发出连接参数更新,然后枚举服务并做出决定

2022-05-15 12:06:10    分类:技术分享    bluetooth   embedded   bluetooth-lowenergy

MQTT-SN on Raspberry pi3 , 6lowpan over BLE

问题 我正在尝试设置一个 MQTT-SN 代理(rsmb),并使用几个 pi3 作为客户端。 首先,我将建立一个 6lowpan over ble 连接。 设置 pi3(RASPBIAN JESSIE 内核 v4.4) sudo su hciconfig hci0 reset modprobe bluetooth_6lowpan echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable hciconfig hci0 leadv BLE 网关 (Ubuntu 14.04) sudo su hciconfig hci0 reset modprobe bluetooth_6lowpan echo 35 > /sys/kernel/debug/bluetooth/6lowpan_psm echo 1 > /proc/sys/net/ipv6/conf/all/forwarding echo "connect *my_pi3_bluetooth_address* 1" > /sys/kernel/debug/bluetooth/6lowpan_control ifconfig bt0 add 2001:xxxx:xxxx:xxxx::/64 service radvd restart 我的 6lowpan over ble 连接正在工作。

2022-05-15 09:39:21    分类:技术分享    bluetooth-lowenergy   ipv6   mqtt

AT commands to hm10 over bluetooth with android

问题 回答1

2022-05-15 02:25:26    分类:技术分享    android   bluetooth   bluetooth-lowenergy   at-command   hm-10

Android BLE: "Scan failed, reason app registration failed for UUID"

问题 我正在使用RxAndroidBle库开发一个应用程序,该库大约每 30 秒定期执行 BLE 扫描,并且每分钟左右执行一些 BLE 操作。 几个小时后,通常在 5 到 24 小时之间,扫描停止工作。 每次应该开始扫描时,我都会得到: 09-05 09:08:37.160 8160-8160/myapp D/BluetoothAdapter: startLeScan(): null 09-05 09:08:37.165 8160-8160/myapp D/BluetoothAdapter: STATE_ON 09-05 09:08:37.165 8160-8160/myapp D/BluetoothAdapter: STATE_ON 09-05 09:08:37.165 8160-8160/myapp D/BluetoothLeScanner: Start Scan 09-05 09:08:37.165 8160-8160/myapp D/BluetoothAdapter: STATE_ON 09-05 09:08:37.165 8160-8160/myapp D/BluetoothAdapter: STATE_ON 09-05 09:08:37.170 8160-8160/myapp D/BluetoothAdapter: STATE_ON 09-05 09:08:37.170

2022-05-14 23:39:28    分类:技术分享    android   bluetooth   bluetooth-lowenergy   android-bluetooth   rxandroidble

BLE Android write characteristic data

问题 我正在使用 Android 开发一个 BLE 项目。 我想写入特征数据并将其发送到 BLE 芯片。 我想重写 ISEN_Toulon 我使用此代码编写特征数据,但数据"ISEN_Toulon"并未按预期替换为"TEST" 。 private BluetoothGattCharacteristic mWriteCharacteristic; private final ExpandableListView.OnChildClickListener servicesListClickListner = new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,int childPosition, long id) { if (mGattCharacteristics != null) { final BluetoothGattCharacteristic characteristic = mGattCharacteristics.get(groupPosition).get(childPosition); final int charaProp =

2022-05-13 00:39:15    分类:技术分享    android   bluetooth-lowenergy

Having trouble with custom UUID in Android BLE

问题 我在使用自己生成的 UUID(不使用蓝牙 SIG 保留的 16 位 UUID)在 Android BLE 中进行通信时遇到问题。 目标设备有两个 - 一个作为外围设备(Samsung Galaxy Note 4/android 5.1.1),另一个作为中央设备(Samsung Galaxy S5/android 5.0.1)。 我将自己的服务的 UUID 和特性的 UUID 放在外围设备端。 在中央,它找不到特色,只有服务。 它似乎是由于不使用这些特征 UUID 之一而是使用自定义生成的 UUID 引起的。 下面是我自己生成的 UUID。 private static final UUID CUSTOM_SERVICE_UUID = UUID.fromString("abcd1111-0000-1000-8000-00805f9b34fb"); private static final UUID CUSTOM_CHARACTERISTIC_UUID = UUID.fromString("abcd1112-0000-1000-8000-00805f9b34fb"); 服务,发现很好,但有特色,没有。 你有什么主意吗? 回答1 您正在使用官方基本 UUID:xxxxxxxx-0000-1000-8000-00805f9b34fb,其中保留了所有高 32 位(一些已分配。) 相反

2022-05-12 04:55:06    分类:技术分享    android   bluetooth   bluetooth-lowenergy   gatt   characteristics

BLuetooth Gatt Callback not working with new API for Lollipop

问题 我目前有一种方法可以写入 BLE 设备以发出哔哔声。 我的蓝牙回调如下: ReadCharacteristic rc = new ReadCharacteristic(context, ds.getMacAddress(), serviceUUID, UUID.fromString(myUUID), "") { @Override public void onRead() { Log.w(TAG, "callDevice onRead"); try{Thread.sleep(1000);}catch(InterruptedException ex){} WriteCharacteristic wc = new WriteCharacteristic(activity, context, getMacAddress(), serviceUUID, UUID.fromString(myUUID), ""){ @Override public void onWrite(){ Log.w(TAG, "callDevice onWrite"); } @Override public void onError(){ Log.w(TAG, "callDevice onWrite-onError"); } }; // Store data in writeBuffer wc

2022-05-11 00:32:28    分类:技术分享    android   bluetooth-lowenergy   android-5.0-lollipop   android-bluetooth   gatt