如何通过蓝牙将串行数据发送到未指定的设备?
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 用作扫描仪,但必须购买/构建信标进行测试。
【讨论】:
以上是关于如何通过蓝牙将串行数据发送到未指定的设备?的主要内容,如果未能解决你的问题,请参考以下文章