首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓝牙RFCOMM连接Linux

蓝牙RFCOMM连接Linux
EN

Stack Overflow用户
提问于 2014-04-30 16:35:32
回答 1查看 11.2K关注 0票数 1

我正在尝试将可穿戴设备连接到使用蓝牙连接的IDE处理。在此之前,我不得不说,我已经让它在Windows上工作了,但是我很难用Linux Mint.Trying来使它工作--我让事情变得更糟了,所以我要尽量解释清楚。

第一个问题

在开始时,我能够从处理连接到rfcomm0端口,但它只发送给我255个内容的字节。例如,如果我发送了一个命令(如myPort.write(0x03) )来获取可穿戴设备的流示例,它没有这样做,它只是向我发送了一个带有255个字节的字节。在同一个程序中,但是运行在windows中,我得到了我向设备请求的所有数据,所以这肯定是rfcomm0端口的问题。我的/etc/蓝牙看起来是这样的:

代码语言:javascript
复制
rfcomm0 {
    # Automatically bind the device at startup
    bind yes;

    # Bluetooth address of the device
    device 00:06:66:42:10:44;

    # RFCOMM channel for the connection
    channel 1;

    # Description of the connection
    comment "Example Bluetooth device";
}

设备已经成对,因此,执行rfcomm 0 00:06:66:42:10:44,并以管理员身份运行处理时,我能够连接到端口(尽管没有像我说的那样接收到正确的数据)。我在串行口方面真的很新,但我的猜测是,也许1号频道不是正确的。如何知道哪个频道是我需要使用的频道?

第二问题

为了修复它,我使用了rfcomm发行版rfcomm0,更改了rfcomm0文件设置通道0(用于测试另一个通道)和绑定之后(rfcomm0 0 00:06:66:42:10:44 0,以确保它连接到其他通道),并运行处理,当我试图连接时,我一直会收到这个错误:

代码语言:javascript
复制
Error opening serial port /dev/rfcomm0: Port not found

这个端口的文件实际上是存在的。我已经将文件的权限掩码设置为/dev/rfcomm0 0为crw-rw-rw- 1根拨号216,0 4月30日17:04 /dev/rfcomm0 0,以防出现问题,但没有成功。

当我使用rfcomm命令时,它给出了以下内容:

代码语言:javascript
复制
rfcomm0: 00:06:66:42:10:44 channel 0 clean

So...any帮助?

诚挚的问候

编辑

第二个问题仅在我将rfcomm连接到channel0时才会发生。所以:

代码语言:javascript
复制
-Channel 0 -> Port not found
-Channel 1 -> Bytes with 255.
-Channel X -> Nothing.

请记住,Windows中的相同代码可以正常工作。

编辑2

好的,似乎我只在从方法something...the ()发送消息时才收到可穿戴设备发送给我的信息字节,因为我需要从安装方法中发送消息(从绘图方法向StartStreaming发送消息是没有意义的,它将一直发送此消息)。

编辑3

issues...if在安装函数上做这件事似乎要花些时间了:

代码语言:javascript
复制
  for(int i = 0; i < 50; i++){
    delay(200);
    getSampleRate();
  }

我只收到4到5次答案.我真的不知道发生了什么。

以下是整个代码:

代码语言:javascript
复制
    void setup() 
{
  size(windowW, windowH);
  smooth();  

  // List all the available serial ports:
  println(Serial.list());

  try {
    myPort = new Serial(this, Serial.list()[0], 115200);

  } catch (Exception e) {

      println(e.getMessage());
      connectionError = true;
  } 

  delay(2000);

  /*
  for(int i = 0; i < 50000; i++){
    delay(200);
    getSampleRate();
  }
  */
}

void draw(){

  background(255);

}

// Called whenever there is something available to read
void serialEvent(Serial port) {

  int bytesAvailable = myPort.available();
  for(int i = 0; i < bytesAvailable; i++){
    println("Byte:", port.read());
  } 
}

最终编辑

嗯,经过大量的研究和测试,我认为问题就在于Linux中使用蓝牙的端口连接。我在Windows和MAC中尝试过相同的代码,所有的东西都运行得很好.

EN

回答 1

Stack Overflow用户

发布于 2014-08-13 01:37:29

在与/etc/蓝牙绑定时,我在前面遇到了类似的情况。

我不知道为什么会这样,但这就是我工作的方式。

我把/etc/蓝牙空了。

我用代码做了所有的连接。

插入USB蓝牙后,您需要使用以下内容:

代码语言:javascript
复制
bzero(temp, 256);
sprintf(temp, "sudo hciconfig hci0 reset");
system((char*)temp);

以上只需要在USB第一次插入时完成,而不是每次连接时。有时,EMI会导致USB“拔出并插回插头”,在这种情况下,您需要再次运行上面的命令。

这将连接到设备:

代码语言:javascript
复制
bzero(temp, 256);
sprinttf(temp, "sudo rfcomm -r connect 00:06:66:42:10:44 1");
system((char*)temp);

然后,我使用它来检查是否建立了连接:

代码语言:javascript
复制
for(timeout = 0;; timeout++){
    access_status = access("/dev/rfcomm1", F_OK);
    if(access_status != -1) break; /* file exist */
    if(timeout >= 10) {
        printf("Failed to connect.");
        return;
    }
    sleep(1);
}

要关闭连接,我使用了以下命令:

代码语言:javascript
复制
bzero(temp, 256);
sprintf(temp, "sudo rfcomm release /dev/rfcomm1");
system((char*)temp);

不用说,您的sudo将需要信任,所以不需要密码运行rfcomm和hc共图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23393528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档