Bluetooth 如何在处理到/dev/rfcomm0时设置串行通信

Bluetooth 如何在处理到/dev/rfcomm0时设置串行通信,bluetooth,serial-port,processing,rfcomm,Bluetooth,Serial Port,Processing,Rfcomm,我试图在Ubuntu12.04和连接到Arduino的JY-MCU蓝牙串行模块之间执行串行通信 我在/etc/bluetooth/rfcomm.conf中创建了此配置 rfcomm0 { # # Automatically bind the device at startup bind yes; # # # Bluetooth address of the device device 00:12:11:19:08:54 # # RFCOMM channel f

我试图在Ubuntu12.04和连接到Arduino的JY-MCU蓝牙串行模块之间执行串行通信

我在/etc/bluetooth/rfcomm.conf中创建了此配置

rfcomm0 {
#   # Automatically bind the device at startup
    bind yes;
#
#   # Bluetooth address of the device    
    device 00:12:11:19:08:54
#   # RFCOMM channel for the connection
    channel 1;
#   # Description of the connection
    comment "Linvor Bluetooth Module";
}
我可以使用putty与/dev/rfcomm0串行端口通信,这非常有效

然而,尽管进行了多次尝试,我还是无法看到如何在处理中创建一个以任何方式工作的串行端口

例如:

println(Serial.list());
什么也不打印

如果我执行:

String portName = "/dev/rfcomm0";
myPort = new Serial(this, portName, 9600);
println(myPort);
我在显示器上看到:

processing.serial.Serial@1712651
但如果我打电话:

 myPort.write('9');
我得到一个例外:

java.lang.NullPointerException
    at processing.serial.Serial.write(Serial.java:572)
    ...
我不明白这为什么会失败。我一直在遵循汤姆·伊戈的《让事情说话》中的所有指示,但这并不像他说的那样有效

任何帮助都会很好

谢谢


鲍勃

我脑子里突然想起了什么。 由于通道1已经使用,我遇到了类似的问题。如果您绑定到已在使用的频道,则可能会发生不好的事情

sdptool browse local

使用该命令查看您的Ubuntu设备上有哪些频道可用。

在上下搜索之后,我已经完成了这项工作

关键问题是处理使用rxtx java库(rxtx-2.1-7)进行串行通信

报告说:

“rxtx通过扫描/dev以查找与任何 指一组已知的好前缀,如“ttyS”、“ttym”和自2.2以来 “ttyUSB”等等。”

由于蓝牙设备名为
rfcomm*
,因此无法检测到

诀窍是创建一个sym链接来愚弄rxtx(使用尚未分配的ttyS设备):

然后,连接:

$ sudo rfcomm connect 0
 Connected /dev/rfcomm0 to 00:12:11:19:08:54 on channel 1
 Press CTRL-C for hangup
此时,JY-MCU上的红色led变为固态,处理可以检测到:

println(Serial.list());
输出为:

[0] "/dev/ttyACM0" 
[1] "/dev/ttyS99"
因此,串行通信可以工作

总之,以下过程将允许处理脚本通过串行端口与BlueZ linux框架中的JY-MCU设备通信

一次性设置:

  • 给JY-MCU通电

  • 使用以下命令获取其硬件地址,我的是00:12:11:19:08:54

    $ hcitool scan  
    
  • 使用它创建/etc/bluetooth/rfcomm.conf文件;您会注意到,我为rfcomm设备选择了0,我们需要该设备用于以后的连接:

    $ cat /etc/bluetooth/rfcomm.conf
    rfcomm0 {
        bind yes;
        device 00:12:11:19:08:54;
        channel    1;
        comment "Linvor Bluetooth Module";
    }
    
  • 使用BlueMan将JY-MCU配对

  • 每次你想用JY-MCU的时候

  • 创建sym链接:

    $ sudo ln -s  /dev/rfcomm0 /dev/ttyS99
    
  • 连接到JY-MCU:

    $ sudo rfcomm connect 0
      Connected /dev/rfcomm0 to 00:12:11:19:08:54 on channel 1
      Press CTRL-C for hangup
    
  • 现在,您可以运行一个处理脚本并使用连接到JY-MCU 守则:

    String portName = "/dev/ttyS99";
    myPort = new Serial(this, portName, 9600);
    
  • 运行处理脚本后,请确保在 断开JY-MCU连接的命令行

  • 那就够了! 再见,
    Bob

    如果真的创建了myPort,您可以调试吗?也许myPort中的某些内容为null,并且在您想要编写某些内容时给出了异常。另外,试着在两侧使用一个终端,这样你就知道连接设置正确了。在arduino方面,如果你有其他linux设备,你可以使用它。我真的不知道如何处理。。。若我用python或putty编写一个例程,我可以和arduino通信,但只是在处理中,这是我的目标…似乎是一个处理isue,我ḿ 遗憾的是,我不熟悉这一点。你需要sudo/管理员权限吗?我想如果你这么做的话,可能会在早些时候出错。我很累,但是Sudo/admin权限没有什么区别。。。似乎没有人知道这件事。我甚至写信给Tom Igoe,因为他的书给出了关于通过rfcomm进行串行通信的错误说明…谢谢,但这仍然没有帮助。我可以从Putty或通过python Bluethoth bluez包看到rfcomm0设备,但不能从处理。。。我很确定这是我自己的无知,但看不到前进的道路……谢谢你的报道!:)谢谢,我已经按照你的步骤做了。我能够运行一次处理草图,然后通信就会丢失,每次我重新运行程序时,我都会出现端口忙异常。有什么建议吗?
    String portName = "/dev/ttyS99";
    myPort = new Serial(this, portName, 9600);