微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决通过 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 举报,一经查实,本站将立刻删除。