Javaの開発環境には、標準でシリアル通信を使うためのクラスが含まれていません。 そこで、新しくライブラリを追加することになります。
Communications APIと互換性があるRXTXライブラリのダウンロード
Javaで使用するためには、Communications APIと互換性があるRXTXライブラリのダウンロードサイト(英語)を使うのですが、”RXTX Downloads are Moving! ”となっており、現時点ではライブラリが存在しません。 このため、googleで検索キー”rxtx-2.1-7-bins-r2.zip”(Windows 32ビット版)を設定して検索し、ライブラリをダウンロードします。
ダウンロードした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 で制限されているためアクセスできません
シリアル転送用のテストプログラムの作成
実際に使用したシリアル転送用のテストプログラムを次に示します。シリアルポートに「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も正常に動作していることが確認できました。