gpt4 book ai didi

bluetooth - 如何在处理中设置串行通信到/dev/rfcomm0

转载 作者:行者123 更新时间:2023-12-03 08:17:14 25 4
gpt4 key购买 nike

我正在尝试在 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');

我得到一个异常(exception):
java.lang.NullPointerException
at processing.serial.Serial.write(Serial.java:572)
...

我不明白为什么这会失败。我一直在遵循 Tom Igoe 的“让事情说话”中的所有指示,但这并不像他所说的那样工作......

任何帮助都会很棒!

谢谢,

鲍勃

最佳答案

在高低搜索之后,我完成了这项工作。

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

RXTX wiki说:

"rxtx tries to detect ports on by scanning /dev for files matching any of a set of known-good prefixes, such as 'ttyS', 'ttym', and since 2.2 'ttyUSB' and so on. "



由于蓝牙设备被命名为 rfcomm*它无法被检测到。

诀窍是创建一个符号链接(symbolic link)来欺骗 rxtx(使用尚未分配的 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上的红灯长亮,处理可以检测到:
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
  • 创建符号链接(symbolic link):
    $ 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。

  • 应该这样做!
    再见,
    鲍勃

    关于bluetooth - 如何在处理中设置串行通信到/dev/rfcomm0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464475/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com