我正计划在Android设备和使用商用蓝牙模块的自定义传感器之间使用通信协议.我会使用SPP配置文件,据说"向用户提供简单可靠的数据流,类似于TCP".
我对蓝牙技术不太熟悉,对设计这样的协议有一些疑问.
首先,我不清楚是否必须担心传输的数据是否被传输.底层协议栈是否会保证我从InputStream
Android 读取的字节与UART在传感器端接收的字节相同?我是否必须定义我自己的受CRC或东西保护的数据包,或者它是否过度杀伤?
从Android蓝牙文档中我不清楚如果信号很弱并且丢失了一段时间,我的应用程序会发生什么.我是否立即获得IOException
或者平台为我提供了一些隐藏的错误处理和恢复,这会使我看不到这么短暂的中断?
谢谢你的建议.
我正在开发Android蓝牙项目,以便从定制硬件发送和接收数据.我在SDK中使用蓝牙聊天示例作为基础.
我意识到,有没有办法改变波特率在客户端(Android手机)和波特率取决于硬件.我尝试在硬件上设置不同的波特率,但都没有达到我们的预期;
我能获得的最快速度是91Kbps(当波特率设置为2.7Mbps~910Kbps时).使用最小波特率(115Kbps)我得到43Kbps.我尝试使用不同的手机,它是一样的.我需要每秒将170KB数据传输到硬件.
规范
协议:使用最大520字节大小的包将同步或生成的数据发送到硬件.收到并批准每个包后,硬件发送验证命令,然后电话发送下一个数据包.
客户端:Android 2.3.3,三星galaxy w i8150,蓝牙v3.0,RFCOMM
硬件:自定义,蓝牙v2.1 BlueGiga WT11i
我完全糊涂了..这可能是手机上的Android或蓝牙设备引起的问题吗?我想知道最大波特率是多少?有没有办法加快传输速度(如增加最大包大小,或发送所有包而不等待硬件验证命令).
编辑
将包大小更改为4160字节后,吞吐量增加到254Kbps.我试图找出最佳封装尺寸达到1.5Mbps.我很感激任何建议
我对蓝牙还很陌生,所以这可能是微不足道的,但我仍然会问:
我想通过蓝牙连接 2 个设备 - 一个带有 Linux 设备的移动设备(例如 Raspberry Pi,但另一个......)。
第 1 面 - 移动设备:它有一个应用程序,应与 Linux 设备配对,并向其发送一些数据(此时带有“Hello”的消息)。
第 2 面 - Linux 设备:它应该有一种侦听器来监听设备通过蓝牙连接到它的事实,然后期待数据、接收数据并处理它。
第 1 面对我来说一切都很好且清晰。
至于第二面,目前我只使用一些命令行命令来打开蓝牙,为设备设置一些名称,然后等待扫描。我使用“hciconfig”来完成此操作,在 Python 脚本中依次运行以下命令:
hciconfig hci0 up
hciconfig hci0 name MyDevice
hciconfig hci0 sspmode 1
hciconfig hci0 piscan
Run Code Online (Sandbox Code Playgroud)
此时,我的设备可以被我的手机发现,并且可以成功配对。现在,我被听力部分困住了。我希望 Linux 设备在设备配对时运行某个功能(更喜欢在 Python 中),并期望从中接收数据。我使用 RFCOMM 和 Bluez 在网上阅读了一些链接,但没有成功......
有人可以帮忙吗?谢谢
对于一些需求分析,我想测试两个Android设备之间基于RFCOMM的蓝牙通信.
我需要从Android设备1发送大约1 MB的数据,Android设备2应该接收它并显示/保存数据.我需要使用蓝牙SPP(RFCOMM)配置文件来完成此操作.
可以任何人建议一些可用的应用程序/代码来做到这一点?
我正在尝试使用蓝牙软件狗将手机连接到RaspberryPi(不做任何破坏地球的工作,只需确定手机何时在该区域中)。如果我把我的手机的蓝牙上并发出以下命令,我得到下面的输出(任何人都开始说教我,这是怎么一个安全漏洞之前,让我提醒你,这是不是我的实际电话蓝牙ID):
命令:
sudo rfcomm connect 0 AA:BB:CC:DD:EE:FF 10
echo $?
Run Code Online (Sandbox Code Playgroud)
输出:
Connected /dev/rfcomm0 to AA:BB:CC:DD:EE:FF on channel 10
Press CTRL-C for hangup
0
Run Code Online (Sandbox Code Playgroud)
现在,如果我把我的手机的蓝牙关闭,并发出相同的命令,我得到下面的输出(再次,所有的ID已被更改,以保护无辜)。
命令:
sudo rfcomm connect 0 AA:BB:CC:DD:EE:FF 10
echo $?
Run Code Online (Sandbox Code Playgroud)
输出:
Can't connect RFCOMM socket: Host is down
0
Run Code Online (Sandbox Code Playgroud)
由于我正在尝试确定电话何时在房间里以及何时离开,因此我需要某种方式(通过其他方式)来检测加密狗何时可以和不能连接到它。我该如何实现呢?(注意:我尝试从建筑物中取出手机,甚至完全将其关闭)
编辑:我已经考虑捕获stderr
消息并像这样测试它
error=$`sudo rfcomm connect 0 AA:BB:CC:DD:EE:FF 10 >/dev/null` &
if [ $error=="Can't connect RFCOMM socket: Host is down" ]
then
...
fi;
Run Code Online (Sandbox Code Playgroud)
但是问题是rfcomm必须在后台运行。
是否可以设置Android蓝牙聊天示例应用程序,以便一次连接多个人,并拥有一个迷你聊天室?那会带来什么?