ライブラリをインストールします。
$ sudo apt-get install librxtx-java |
サンプルコードを入力します。(ARMアーキテクチャ環境のJava7でRXTXをビルドするのページより)
//http://d.hatena.ne.jp/talisker_ZQN/20130508/1368017726 import gnu.io.CommPortIdentifier; import java.util.Enumeration; public class Test{ public static void main(String[] args){ System.out.println("main method start."); try{ Enumeration portList = CommPortIdentifier.getPortIdentifiers(); CommPortIdentifier port = null; while (portList.hasMoreElements()) { port = (CommPortIdentifier)portList.nextElement(); System.out.println(port.getName()); } }catch(Exception e){ e.printStackTrace(); } } } |
コンパイル&実行します。
コンパイル $ javac -cp .:/usr/share/java/RXTXcomm.jar Test.java 実行 シリアルポートの一覧が表示される $ java -cp .:/usr/share/java/RXTXcomm.jar -Djava.library.path=/usr/lib/jni Test |
Javaからシリアル(RS232C)通信をするのページにサンプルプログラムが存在するので動作チェックすることができます。
//http://ytkoks.github.io/programming/2012/08/31/serial-communications-with-java/ import java.io.*; import java.util.*; import gnu.io.*; public class serial implements SerialPortEventListener { private SerialPort port; private static BufferedReader reader; serial() { try { // Serial port initialize CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("/dev/ttyS0"); port = (SerialPort)portId.open("serial", 2000); port.setSerialPortParams( 9600, // 通信速度[bps] SerialPort.DATABITS_8, // データビット数 SerialPort.STOPBITS_1, // ストップビット SerialPort.PARITY_NONE // パリティ ); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); reader = new BufferedReader( new InputStreamReader(port.getInputStream())); try { port.addEventListener(this); port.notifyOnDataAvailable(true); } catch (TooManyListenersException e) { System.out.println("Error: " + e); } } catch (Exception e) { System.out.println("Error: " + e); System.exit(1); } } public void run() { try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); OutputStream out = port.getOutputStream(); boolean flagQuit = false; while (!flagQuit) { String input = br.readLine(); if (input.length() > 0) { if (input.equals(":quit")) break; input += "\r"; out.write(input.getBytes("US-ASCII")); } } port.close(); } catch (Exception e) { System.out.println("Error: " + e); } } public void serialEvent(SerialPortEvent event) { if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) { String buffer = null; try { while (reader.ready()) { buffer = reader.readLine(); System.out.println(buffer); } } catch (IOException ex){ ex.printStackTrace(); System.exit(1); } } } public static void main(String arg[]) { serial serial = new serial(); serial.run(); } } |
参考
※コメント投稿者のブログIDはブログ作成者のみに通知されます