如何通过蓝牙将串行数据发送到未指定的设备?

时间:2016-05-28 17:17:28

标签: java android bluetooth arduino-uno

我将以下代码用于Arduino Uno:

#include <SoftwareSerial.h>

SoftwareSerial device(2, 3); 

void setup()  
{
  device.begin(9600);
}

void loop() 
{
  device.println("33,89,156,203,978,0,0;");
}

未设置要发送的特定设备。

如果我想在笔记本电脑上接收数据(运行Ubuntu 14.04),我只需致电:

sudo rfcomm bind rfcomm0 [MAC ADDRESS] 1

screen /dev/rfcomm0 

在另一个终端实例中,它可以工作。

如何使用Android应用程序实现相同的行为? 以下example code指定设备。我找不到任何其他代码。此外,它只适用于我在笔记本电脑上听取这样的传入连接:

sudo rfcomm listen rfcomm0 [MAC ADDRESS]

我希望我的Android应用程序与Arduino示例完全一样。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

不幸的是,Android似乎没有低级别的经典蓝牙API,这将允许您进行广播类型行为。这是有道理的,因为Android旨在进入功率受限的设备,而有源无线电使用能量。如果您需要使用经典蓝牙(3.x)和Android来处理发送或接收广播类型的行为,您可能需要编写自定义ROM。

然而,有一种称为蓝牙低功耗(4.x)的规范允许更少的能量消耗但更慢/更少的数据吞吐量。特别是广告模式。正在扫描的Android设备可以获取由称为“信标”的设备广播的短广告数据包。使用此模式的协议是Apple的iBeacon和Google的Eddystone。

在这里查看涉及广告的示例应用:

另请注意,Android设备并不总是支持BLE外设模式,这是您的Android设备需要像信标一样的功能。

相关链接: Can an Android device act as an iBeacon?

一个很好的已测试设备清单: http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html

因此,在您的情况下,您仍然可以使用Sony Xperia Z3作为扫描仪,但必须购买/构建信标进行测试。