如何在Processing到/ dev / rfcomm0中设置串行通信

时间:2013-03-17 18:25:19

标签: bluetooth serial-port processing rfcomm

我正在尝试在Ubuntu 12.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串口进行通信,这非常有效。

然而,尽管经过多次尝试,我根本无法看到如何在Processing中创建一个以任何方式工作的串口。

例如:

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)
    ...

我无法理解为什么会失败。我一直在遵循Tom Igoe的“Make Things Talk”的所有指示,但这并不像他说的那样......

任何帮助都会很棒!

谢谢,

鲍勃

2 个答案:

答案 0 :(得分:8)

经过高低的搜索,我完成了这项工作。

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

RXTX wiki说:

  

“rxtx尝试通过扫描/ dev来检测与其匹配的文件的端口   一组已知良好的前缀,例如'ttyS','ttym',以及2.2   'ttyUSB'等等。 “

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

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

$ sudo ln -s  /dev/rfcomm0 /dev/ttyS99

然后,连接:

$ 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设备进行通信

一次性设置:

  1. 启动JY-MCU,

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

    $ hcitool scan  
    
  3. 用它来创建/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";
    }
    
  4. 使用BlueMan配对JY-MCU。

  5. 每次您想使用JY-MCU

    1. 创建sym链接:

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

      $ sudo rfcomm connect 0
        Connected /dev/rfcomm0 to 00:12:11:19:08:54 on channel 1
        Press CTRL-C for hangup
      
    3. 您现在可以运行处理脚本并连接到JY-MCU 代码:

      String portName = "/dev/ttyS99";
      myPort = new Serial(this, portName, 9600);
      
    4. 运行处理脚本后,请务必按CTRL-C 命令行断开JY-MCU。

    5. 应该这样做! 再见, 鲍勃

答案 1 :(得分:0)

我心中突然出现了一些东西。 由于已经使用了通道1,我遇到了类似的问题。如果绑定到已经使用的频道,可能会发生不好的事情。

sdptool browse local

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