忘備録-備忘録

技術的な備忘録

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

javaでシリアル通信

2018-11-15 20:29:00 | raspberry ...

ライブラリをインストールします。

$ 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();
    }
}

 

参考

 

コメント   この記事についてブログを書く
« 起動時にNTPと時刻を合わせる | トップ | JavaでRaspberry PiのIO制御 »
最新の画像もっと見る

コメントを投稿

raspberry ...」カテゴリの最新記事