6

Ubuntu 12.04 と Arduino に接続された JY-MCU Bluetooth シリアル モジュールの間でシリアル通信を実行しようとしています。

この構成を /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";
}

パテを使用して /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 の「Making Things Talk」のすべての指示に従っていますが、これは彼の言うようには機能しません...

どんな助けでも素晴らしいでしょう!

ありがとう、

ボブ

4

2 に答える 2

9

ハイローを検索した後、私はこの作品を作りました。

重要な問題は、処理がシリアル通信に rxtx Java ライブラリ (RXTX-2.1-7) を使用することです。

RXTX ウィキには次のように書かれています。

「rxtx は、/dev をスキャンして、「ttyS」、「ttym」、および 2.2 以降の「ttyUSB」などの一連の既知の適切なプレフィックスのいずれかに一致するファイルをスキャンすることにより、ポートを検出しようとします。

また、Bluetooth デバイスには名前が付けられ rfcomm*ているため、検出できません。

トリックは、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 の赤い 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 device に 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 をペアリングします。

JY-MCU を使用するたびに

  1. シンボリック リンクを作成します。

    $ 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 を切断してください。

それはそれを行う必要があります!チャオ、ボブ

于 2013-03-23T11:38:32.700 に答える
0

何かが頭に浮かびました。チャネル1がすでに使用されているために発生した同様の問題がありました。すでに使用されているチャネルにバインドすると、悪いことが起こる可能性があります。

sdptool browse local

そのコマンドを使用して、Ubuntuデバイスで使用可能なチャネルを確認します。

于 2013-03-18T09:52:35.357 に答える