我正在尝试在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”的所有指示,但这并不像他说的那样......
任何帮助都会很棒!
谢谢,
鲍勃
答案 0 :(得分:8)
经过高低的搜索,我完成了这项工作。
关键问题是处理使用rxtx java库(RXTX-2.1-7)进行串行通信。
“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设备进行通信
一次性设置:
启动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);
运行处理脚本后,请务必按CTRL-C 命令行断开JY-MCU。
应该这样做! 再见, 鲍勃
答案 1 :(得分:0)
我心中突然出现了一些东西。 由于已经使用了通道1,我遇到了类似的问题。如果绑定到已经使用的频道,可能会发生不好的事情。
sdptool browse local
使用该命令查看Ubuntu设备上可用的频道。