Python蓝牙传输速度?

0 投票
3 回答
1346 浏览
提问于 2025-04-16 11:01

在Python中,我正在使用LightBlue模块来实现蓝牙连接。我想知道我从笔记本电脑(Ubuntu)向手机发送文件时的传输速度是多少?

3 个回答

-1

你需要一个连接蓝牙驱动程序和操作系统服务的工具,这样才能处理蓝牙设备。
大部分驱动程序是用C语言写的,有些是用C++写的。如果你能拿到源代码或者API,或者这些东西是提供给你的,那么你可能可以通过Python来访问它。你可能还需要写一些特别的代码来连接你的操作系统服务。

0

说“python蓝牙速度”是不太准确的,因为Python只是一个编程语言和执行环境,跟蓝牙没有直接关系。你应该告诉我们你在用哪个Python扩展来处理蓝牙?你使用的蓝牙协议栈是什么?还有你用的操作系统是什么?

使用lightblue这个库,你无法确定连接的速度,因为正如项目作者所说,它“提供了简单的蓝牙操作访问”,同样,另一个用于蓝牙的Python库PyBluez也不能做到这一点。因为我猜你在使用套接字(sockets),你可以计算发送和接收的数据量,这样你就能大致了解速度。

但要准确确定整个输入/输出流量的数量,你需要在HCI层级别深入协议栈,并计算以下内容:

  • ACL - 数据
  • SCO - 语音
  • 命令
  • 事件

所以我建议使用一个已经构建好的流量分析工具,比如WireShark。

更新:

如果你查看BlueZ的文档,在hci_lib.h中有一个函数:

int hci_devinfo(int dev_id, struct hci_dev_info *di);

而hci_dev_info结构体包含了你想要的信息,比如acl_pkts和sco_pkts,所以你应该在Python中导出这个BlueZ API函数并使用它 :)

struct hci_dev_info {
uint16_t dev_id;
char     name[8];

bdaddr_t bdaddr;

uint32_t flags;
uint8_t  type;

uint8_t  features[8];

uint32_t pkt_type;
uint32_t link_policy;
uint32_t link_mode;

uint16_t acl_mtu;
uint16_t acl_pkts;
uint16_t sco_mtu;
uint16_t sco_pkts;

struct   hci_dev_stats stat;
};
0

最简单的办法就是先弄清楚文件有多大,然后在传输开始前和结束后记录一下系统时间,最后做个简单的计算。要想计算在传输过程中更精确的传输速度,就需要知道你的发送缓冲区的大小,以及每次发送之间的时间间隔。

撰写回答