当前位置: 首页 > 知识库问答 >
问题:

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

弘承运
2023-03-14

我对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应用程序实现相同的行为?以下示例代码指定了设备。我找不到任何其他代码。此外,它仅在我在笔记本电脑上侦听这样的传入连接时才有效:

sudo rfcomm listen rfcomm0 [MAC ADDRESS]

我希望我的Android应用程序与Arduino示例完全一样工作。我如何实现这一点?

共有1个答案

方浩旷
2023-03-14

不幸的是,Android似乎没有低水平的经典蓝牙API,可以让你做广播类型的行为。这在一定程度上是有道理的,因为Android打算进入一个功率有限的设备,而有源收音机使用能量。如果你需要使用经典的蓝牙(3.x)和Android来处理发送或接收广播类型的行为,你可能需要编写一个自定义ROM。

然而,有一种称为蓝牙低能量(4.x)的规范允许更少的能量消耗,但更慢/更少的数据吞吐量。具体来说就是广告模式。正在扫描的Android设备可以接收被称为“信标”的设备广播的短广告数据包。使用这种模式的协议是苹果的iBeacon和谷歌的Eddystone。

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

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

还要注意的是,Android设备并不总是支持BLE外围模式,这是您的Android设备像信标一样工作所需要的。

相关链接:Android设备可以充当iBeacon吗?

还有一个很好的测试设备列表:http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html

因此,在你的情况下,你应该仍然能够使用你的索尼Xperia Z3作为扫描仪,但将不得不购买/建立一个测试信标。

 类似资料:
  • 我制作了一个android应用程序来扫描蓝牙设备,并向我的服务器发送一个HTTP请求,这样我就可以检测它们是开着还是关着。我已经用我的带有蓝牙适配器的台式电脑测试过了,效果很好。当检测到电脑上的蓝牙功能时,它显示电脑是打开的,当我关闭电脑上的蓝牙功能时,它是关闭的。现在,我需要使用这个应用程序的设备有:雅伯投影仪、Bose SoundLink和JBL耳机,但我遇到了一些问题。 首先,投影仪似乎无法

  • 问题内容: 我正在制作一个应用程序,用于将图像从Android设备发送到在PC上运行的Java应用程序。客户端(android)上的图片是,我将其转换为,以便通过蓝牙发送到服务器。 请注意,位图来自已压缩的文件,因此我不需要再次对其进行压缩。 我在服务器(Java)上使用以下代码: 客户端没有错误。但是我在服务器端(Java应用程序)遇到此异常: java.lang.IllegalArgument

  • 我完全不知道如何使用BLE。我需要为Android设备创建一个应用程序,将一个小字符串从一个Android设备发送到另一个Android设备。我没有使用任何传感器类型的设备。我只需要使用BLE连接将一个字符串从一个电话发送到另一个电话。根据我的理解,我需要创建一个自定义服务,在一个中央设备上实现一个GATT服务器,并让一个外围设备作为一个客户端访问它,但我甚至不确定这是否是我的情况所需要的。我在互

  • 实现蓝牙发送和接收数据的demo。文件包含两个工程,一个接收,一个发送。 [Code4App.com]

  • 问题内容: 我正在尝试通过蓝牙两个设备连接。我已经能够做到,但是当连接启动时,操作系统要求我提供配对代码。 我要做的是以编程方式提供该代码。有没有一种方法可以连接这些设备并发送配对代码而无需用户插入? 注意:我确实有配对代码,只是我不希望用户插入它,而是由应用程序从保存它的地方获取并使用它。 注意_2:必须使用配对码。因此,不能使用createInsecureRfcommSocketToServi