我正在尝试开发一种具有蓝牙模块的设备,可以通过应用程序连接该模块,并下载其文件并将其存储在设备的 SD 卡上。
这个想法是,设备将收集信息,将所述信息作为 .csv 文件写入 SD 卡,并能够通过蓝牙连接将其下载到外部设备(如 PC)。
我对蓝牙还比较陌生,所以我有点不确定实现这一目标的标准协议是什么。应遵循的步骤是:
设备收集数据并以.csv文件保存到SD卡文件系统
用户使用内置应用程序通过蓝牙连接到设备。该应用程序可以看到SD卡上有什么
用户选择文件并按“下载”
文件下载到用户设备(例如电脑)
现在,该文件已作为 CSV 文件存储在文件系统上。当我想下载它时,我该怎么做?我是否通过蓝牙将文件的原始内容传输到终端设备?或者我是否将其转换为二进制文件并发送?或者还有其他我应该关注的事情吗?我的第一个假设是您将以字节块的形式发送文件的二进制版本。
如果您有任何资源,我也应该阅读,我将不胜感激。
对于Bluetooth Classic,文件传输的标准协议是OBEX FTP。 Bluetooth LE 没有标准化的解决方案,因此您必须想出自己的实现方案。
这里有一个Python代码,其中包含一个相当简单的使用经典连接的DIY(非标准)蓝牙文件传输协议。 filetransfer.py 文件应在任何支持 Python 的计算机(例如 PC)上运行。它有一个获取文件的选项 来自服务器。首先进行指定文件名和大小的信息交换,然后进行带有 CRC 校验的二进制传输过程。使用相同的原理,可以添加可用文件名的交换。另一方面,这取决于蓝牙模块的身份。最简单的选择是它也可以运行 filetransfer.py,否则必须重新生成服务器代码。如果是 Linux 系统,例如 Raspberry Pi,则可以使用网站上的其他文件 - btferret.c 和 btferret.py 具有相同的文件传输代码,将充当 filetransfer.py 的服务器。
对于蓝牙BLE,如果您不想使用GATT,您可以使用LE CREDIT BASED FLOW CONTROL MODE。
如果你使用 btstack,这里有一个例子 https://github.com/bluekitchen/btstack/blob/master/example/le_credit_based_flow_control_mode_client.c https://github.com/bluekitchen/btstack/blob/master/example/le_credit_based_flow_control_mode_server.c