通过 BLE 连接发送/接收大数据BlueZ、d-bus、python

问题描述

我目前正在尝试通过 BLE 和 Android 手机上的应用程序控制我的 RaspBerry PI。 我在 PI 端使用带有 d-bus 和 python 的 BlueZ (v5.50)。 对于我的应用,我使用 Flutter 和 Flutter_reactive_ble 作为蓝牙包。

我可以连接和读写小数据到我定义的特征。

但是我不知道如何从/向特征读取/写入更大的数据。

我在网上阅读了很多关于 BLE 的文章,但我对这个主题完全陌生,找不到关于这个主题的任何好的教程。

这是我适用于小数据(字符串)的特性:

from ..ble.characteristic import Characteristic
from ..ble.descriptor import Descriptor


class RequestModulesCharacteristic(Characteristic):
    REQUEST_MODULES_CHaraCTERISTIC_UUID = '82950D0C-CBF3-4370-AE30-ADC08875017E'

    def __init__(self,bus,service):
        Characteristic.__init__(
            self,self.REQUEST_MODULES_CHaraCTERISTIC_UUID,['read','write'],service)
        self.add_descriptor(RequestModulesDescriptor(bus,self))

    def WriteValue(self,value,options):
        print(''.join([str(v) for v in value]))

    def ReadValue(self,options):
        return "Hello World".encode('utf-8')

class RequestModulesDescriptor(Descriptor):
    CUD_UUID = '2901'

    def __init__(self,index,characteristic):
        Descriptor.__init__(
            self,self.CUD_UUID,['read'],characteristic)

    def ReadValue(self,options):
        desc = "Request available modules."

        return desc.encode('utf-8')

导入和 GATT 服务器基本上是 BlueZ 示例 GATT 服务器的副本,可以在这里找到: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test/example-gatt-server

有趣的是,如果我为我的特征写一个长的 Lorem Ipsum 文本。为此,我使用了 nRF Connect Android 应用程序。尽管我的 MTU(用 btmon | grep MTU 测量)只有 517 字节,但我收到了 600 字节的该消息。

BlueZ 文档有一些偏移参数,但我无法理解。或者我必须使用通知/指示来处理这样的事情吗?

有人能引导我朝着正确的方向发展如何实现这一目标吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)