2013-03-17 9 views
5

Arduinoに接続されたUbuntu 12.04とJY-MCUブルートゥースシリアルモジュール間でシリアル通信を実行しようとしています。処理中のシリアル通信を/ dev/rfcomm0に設定する方法

私は私では、/ dev/rfcomm0シリアルポートとの通信にパテを使用することができ、これは完璧に動作/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"; 
} 

にこの設定を作成しました。

しかし、多くの試みにもかかわらず、私は単純にどのように動作する処理でシリアルポートを作成するのか分かりません。例えば

println(Serial.list()); 

は全く何も出力しません。

私が実行した場合:私は、呼び出す場合

[email protected] 

:しかし

myPort.write('9'); 

を、私は例外を取得

String portName = "/dev/rfcomm0"; 
myPort = new Serial(this, portName, 9600); 
println(myPort); 

私はモニターでこれを参照してください

java.lang.NullPointerException 
    at processing.serial.Serial.write(Serial.java:572) 
    ... 

これがなぜ失敗するのか理解できません。私はTom Igoeの "Making Things Talk"からのすべての指示に従っていますが、これは彼の言う通りには機能しません。

どんな助けもb素晴らしいです!

おかげで、私の心にポップアップ

ボブ

+0

myPortが実際に作成されていればデバッグできますか?おそらく、myPortの中の何かがnullで、何かを書きたいときに例外を与えているかもしれません。 また、両側の端末を使用すると、接続が正しく設定されていることがわかります。 arduino側では、別のLinuxデバイスを使用することができます。 –

+0

私は処理に本当に無知です...私はPythonやパテでルーチンを書くが、ただの処理では、私の目標であるarduinoと通信することができます... – gratefulfrog

+0

次に、IUEではない処理のように見えますそれに精通している、悲しいことに。 sudo/admin権限が必要ですか?もしあなたがそうしたら、それは早くエラーになるだろうと思います。 –

答えて

0

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

sdptool browse local 

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

+0

ありがとうございます。でもそれでも助けにはなりません。私はパテからrfcomm0デバイスを見ることができますか、またはpython bluethooth bluezパッケージを経由して処理することはできません...私はそれが私の無知だと確信していますが、決して前進していません... – gratefulfrog

8

高所と低所を探した後、私はこの作業をしました。

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

RXTX wikiは言う:たとえば 『はttyS』、 『ttym』として知ら-良いプレフィックスのセットのいずれかの にマッチするファイルのスキャンは/ devでのポートを検出しようとRXTX」

、および2.2 「は、ttyUSB」以来というように。」

とBluetoothデバイスがそれを検出することができないrfcomm*命名されているため。

トリックRXTX(まだ割り当てられていないはttySデバイスを使用)だますためにSYM・リンクを作成することである。そして、

$ 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. JY-MCUをペアリングするBlueManを使用しています。

あなたは

  1. JY-MCU

    を使用するたびに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. これでprocを実行できるようになりましたスクリプトをエッシンクと とJY-MCUにコードを接続します

    String portName = "/dev/ttyS99"; 
    myPort = new Serial(this, portName, 9600); 
    
  4. を処理スクリプトを実行した後、JY-MCUを切断する コマンドラインでCTRL-Cを確認してください。

すべきです! Ciao、 Bob

+0

これを報告してくれてありがとう! :) –

+0

ありがとう、私はあなたの踏み台に従った。 Processingスケッチを一度実行すると通信が失われ、プログラムを再実行するたびにPort Busy例外が発生します。何かアドバイス? – UserK

関連する問題