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

How to send serial data via Bluetooth to an unspecified device?

我将以下代码用于 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 示例一样工作。我怎样才能做到这一点?

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

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

在此处查看涉及广告的示例应用程序:

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

相关link: Can an Android device act as an iBeacon?

以及经过测试的设备列表: http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html

因此,在您的情况下,您应该仍然可以将 Sony Xperia Z3 用作扫描仪,但必须 buy/build 用于测试的信标。