我正在做一个项目,我需要通过蓝牙在android和树莓派之间传输数据。然而,我对此很陌生,并且对两个设备配对时会发生什么没有深入的了解。假设两个感兴趣的设备已经配对,那么为此类任务进行编程的起点在哪里?我一直在阅读BluetoothSocket,但我仍然不确定从哪里开始。有人可以帮我吗?
提前非常感谢!
我一直在研究同样的问题,这是我在最后发现的阅读材料。我一直在寻找专门用 python 编写的代码,所以这是第一个角度,第二个是 C++,但有一个非常彻底的介绍。
https://people.csail.mit.edu/albert/bluez-intro/index.html
这个也很好,简介不是太密集:
http://beej.us/guide/bgnet/output/html/multipage/index.html
具体要看的部分涉及到规划方面。 beej 编程指南的介绍具体展示了套接字是什么以及它们如何适应网络意义。这意味着流套接字和数据报套接字。它还显示哪些套接字已使用以及哪些可用。第 1 章到第 3 章为我提供了足够坚实的阅读基础,可以使用第二个文档来确定一些事情。
MIT 文档的第 2 章详细介绍了结构级别必须发生的每个步骤,包括 L2CAP + UDT、RCOMM 以及无论流是什么。通过阅读这些内容,我能够确定我想要使用的网络是 L2CAP。我希望这些可以帮助您指明正确的方向,无论您想要设置什么网络以及您想要使用什么语言进行编程。
不久前我一直在做同样的任务。要点是,为了开始发送和接收数据,您必须首先建立连接。有两个侧设备连接(创建套接字),另一个接收连接(蓝牙服务器套接字),一旦连接完成就发出连接。连接建立后,您应该停止接收传入连接或尝试建立任何连接。 从实现的角度来看,您应该实现几个线程来管理所有这些阶段 - 连接线程、接受线程、通信线程。谷歌有一个很好的例子:https://github.com/googlesamples/android-BluetoothChat。它使用了该技术。唯一的缺点是它使用 Handler(Android 功能,允许读取通信)来通知用户有关蓝牙事件的信息。我稍微修改了一下,引入了另一个线程,接收状态更新并从回调接口调用方法,请随意使用项目中的代码:https://github.com/AlexShutov/LEDLights。
我在连接蓝牙耳机时也遇到问题。之前我总是可以连接我的蓝牙耳机,但现在我无法连接,并显示“GDBus.Error.org.bluez.ErrorConnectionAttemptFailed:页面超时”,因此我尝试将其从配对中删除,并尝试它是否会重新连接,但它赢了无法连接,提示“GDBus.Error.org.bluez.ErrorConnectionAttemptFailed:页面超时”。有没有人有解决办法?