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

Posted

技术标签:

【中文标题】如何通过蓝牙将串行数据发送到未指定的设备?【英文标题】:How to send serial data via Bluetooth to an unspecified device? 【发布时间】:2016-09-26 21:00:13 【问题描述】:

我对 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】:

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

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

在此处查找涉及广告的示例应用:

https://github.com/googlesamples/android-BluetoothAdvertisements https://github.com/devunwired/accessory-samples/blob/master/bluetoothadvertiser

另请注意,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 用作扫描仪,但必须购买/构建信标进行测试。

【讨论】:

以上是关于如何通过蓝牙将串行数据发送到未指定的设备?的主要内容,如果未能解决你的问题,请参考以下文章

通过写入 DataOutputStream 通过蓝牙向设备发送命令

VBA代码将一个单元格的条件格式复制到未指定范围的单元格

低功耗蓝牙Ble的详细使用流程

如何将浮点值从一个蓝牙模块发送到其他模块(HC 05)

如何使用android蓝牙接收串行数据

通过过滤和添加分隔符将串行数据从蓝牙存储到数组