Javaの開発環境には、標準でシリアル通信を使うためのクラスが含まれていません。 そこで、新しくライブラリを追加することになります。

Communications APIと互換性があるRXTXライブラリのダウンロード

Javaで使用するためには、Communications APIと互換性があるRXTXライブラリのダウンロードサイト(英語)を使うのですが、”RXTX Downloads are Moving! ”となっており、現時点ではライブラリが存在しません。 このため、googleで検索キー”rxtx-2.1-7-bins-r2.zip”(Windows 32ビット版)を設定して検索し、ライブラリをダウンロードします。

ダウンロードしたRXTXライブラリ

ダウンロードしたRXTXライブラリをEclicpse(Juno )に設定

Windows7 32ビット版のEclicpse(Juno )に、ダウンロードしたRXTXライブラリを設定します。
”rxtx-2.1-7-bins-r2.zip”を解凍して、RXTXcomm.jarを取り出し、Javaをインストールしたディレクトリ内の“/jre/lib/ext”に起きます。今回はJava7を使用したので、”C:/pleiades/java/7”となりました。

次に、解凍したフォルダ内の“Windows”ディレクトリ内の”rxtxParallel.dll”と”rxtxSerial.dll”を、先ほどの”java/7”内の“bin”に置けば 、RXTXライブラリのインストール作業完了です。

これで、gnu.io.*クラス群を使ってコンパイルは出来るはずなのですが、この状態であんまり見たことのない次のエラーが出て来ました(Windows7のためかもしれません。XPでは見たことがありません)。

アクセス制限: 型 SerialPort は必須ライブラリー /Library/Java/Extensions/RXTXcomm.jar で制限されているためアクセスできません

gnu/**のアクセス許可

調べたところ、デフォルトのJavaプロジェクトでは、”gnu/**”がアクセスできない状態になっていたみたいで、右クリックで「ビルド・パスの構成」を表示し、 ライブラリータブの「JREシステム・ライブラリーのアクセスルールを編集」、「追加」で、「gnu/**」を「アクセス許可」を設定すると、ビルドができるようになりました。

シリアル転送用のテストプログラムの作成

実際に使用したシリアル転送用のテストプログラムを次に示します。シリアルポートに「test」と出力する試験プログラムです。

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

import java.io.OutputStream;

public class serial_test
{
 public static void main( String arg[] )
 {
   //シリアルポートを確保する

   //使用するCOMポートを取得
   CommPortIdentifier comID = CommPortIdentifier.getPortIdentifier( "COM11" );

   //COMポートを開きます
   CommPort commPort = comID.open("hoge",2000);

   //シリアルポートのインスタンスを生成…
   SerialPort port = (SerialPort)commPort;

   //ボーレート、データビット数、ストップビット数、パリティを設定
   port.setSerialPortParams( 115200,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE );

   //ストリームを生成して、1文字ずつ送信していきます
   OutputStream out = port.getOutputStream();

   out.write( 't' );
   out.write( 'e' );
   out.write( 's' );
   out.write( 't' );
   out.write( '\r' );

   //ストリームとCOMポートを閉じる処理
   out.close();
   port.close();
 }
}

javaプログラムからのシリアル転送の動作確認

javaのプログラムからシリアル転送ができているか動作確認するために、以前設定したvirtual serial port driver for Windows「com0com」を使用しました。

まず、ポート(COM12)をTeraTermで開きます。Javaのプログラムを実行すると、確かに「test」とTeraTermの画面に表示され、正常に動作していることが確認できました。また、com0comも正常に動作していることが確認できました。