Bluez可以在外围模式下允许多个状态连接或同步连接吗?

时间:2019-07-12 12:49:19

标签: python raspberry-pi bluez

问题:

我有一些传感器需要通过BLE(Peripheral)从Raspberry Pi接收数据,其接收机制实际上是非常机械的: 从传感器到外围设备(R Pi)的一次安全数据传输就是这种情况:

  1. 传感器使用外围设备的公共密钥对随机的一次性会话密钥进行加密,该公开密钥会显示读取特征并在此处发布其公共密钥。 (公钥和会话密钥的RSA 2048位加密是AES 128位,数据为64字节)
  2. 传感器读取公钥并将其用于加密随机会话密钥并将其写入写特征
  3. 外围设备使用随机会话密钥,最后将数据设置为读取特性。 (我在传感器上添加了轮询功能,可以反复轮询新数据。)

我尝试了什么?

我已经在Rpi上使用Bluez使这种机械机构工作了,我为Bluez / test的example-gatt-server示例创建了包装器,并且可以通过BLE发送和接收数据到esp32(使用nkolban lib)

出现问题:

当我的两个ESP32之一尝试进行读取/写入时与服务器的连接时,此连接会导致ESP32复位(因为它期望连续的读取或写入操作且外围设备不可用),并且所有随机会话密钥上下文丢失,因为Bluez已连接了新设备等。

是否有更好的方法来实现我的目标?我还阅读了该规范,并尝试在Internet上进行研究以找到一种方法:我知道该规范要求BLE协议一旦建立连接就停止广告。 RPi也做同样的事情,但是当一个esp的读取和写入之间存在延迟时,另一个连接到它,并且整个通信变得一团糟。另外,在我的esp上附有一个计时器,无论如何(无论是不是最动态的设计),它都会停止通信以防止电池电量消耗。 但就我而言,由于我的数据传输至少需要2个连接,所以当前的机械设计要求设备都记住上下文和状态。整个过程在2秒钟之内就可以正常工作,而在蓝牙网络上只有一个esp。

我知道这个问题很长,但是如果有人愿意提供帮助,我相信这将需要洞悉我要实现的目标。

0 个答案:

没有答案