我正在尝试将可穿戴设备连接到使用蓝牙连接的IDE处理。在此之前,我不得不说,我已经让它在Windows上工作了,但是我很难用Linux Mint.Trying来使它工作--我让事情变得更糟了,所以我要尽量解释清楚。
第一个问题
在开始时,我能够从处理连接到rfcomm0端口,但它只发送给我255个内容的字节。例如,如果我发送了一个命令(如myPort.write(0x03) )来获取可穿戴设备的流示例,它没有这样做,它只是向我发送了一个带有255个字节的字节。在同一个程序中,但是运行在windows中,我得到了我向设备请求的所有数据,所以这肯定是rfcomm0端口的问题。我的/etc/蓝牙看起来是这样的:
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,以确保它连接到其他通道),并运行处理,当我试图连接时,我一直会收到这个错误:
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命令时,它给出了以下内容:
rfcomm0: 00:06:66:42:10:44 channel 0 cleanSo...any帮助?
诚挚的问候
编辑
第二个问题仅在我将rfcomm连接到channel0时才会发生。所以:
-Channel 0 -> Port not found
-Channel 1 -> Bytes with 255.
-Channel X -> Nothing.请记住,Windows中的相同代码可以正常工作。
编辑2
好的,似乎我只在从方法something...the ()发送消息时才收到可穿戴设备发送给我的信息字节,因为我需要从安装方法中发送消息(从绘图方法向StartStreaming发送消息是没有意义的,它将一直发送此消息)。
编辑3
issues...if在安装函数上做这件事似乎要花些时间了:
for(int i = 0; i < 50; i++){
delay(200);
getSampleRate();
}我只收到4到5次答案.我真的不知道发生了什么。
以下是整个代码:
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中尝试过相同的代码,所有的东西都运行得很好.
发布于 2014-08-13 01:37:29
在与/etc/蓝牙绑定时,我在前面遇到了类似的情况。
我不知道为什么会这样,但这就是我工作的方式。
我把/etc/蓝牙空了。
我用代码做了所有的连接。
插入USB蓝牙后,您需要使用以下内容:
bzero(temp, 256);
sprintf(temp, "sudo hciconfig hci0 reset");
system((char*)temp);以上只需要在USB第一次插入时完成,而不是每次连接时。有时,EMI会导致USB“拔出并插回插头”,在这种情况下,您需要再次运行上面的命令。
这将连接到设备:
bzero(temp, 256);
sprinttf(temp, "sudo rfcomm -r connect 00:06:66:42:10:44 1");
system((char*)temp);然后,我使用它来检查是否建立了连接:
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);
}要关闭连接,我使用了以下命令:
bzero(temp, 256);
sprintf(temp, "sudo rfcomm release /dev/rfcomm1");
system((char*)temp);不用说,您的sudo将需要信任,所以不需要密码运行rfcomm和hc共图。
https://stackoverflow.com/questions/23393528
复制相似问题