JAvaシリアルポート通信の詳細と簡単な例

6412 ワード

JAvaシリアルポート通信の実現
最近ハードウェア関連のプロジェクトをしましたが、javaでハードウェアと付き合うと聞いたばかりで、本当にドキドキしました.JAvaはハードウェアも操作できますか?
その後javaでシリアル通信でハードウェアを制御している感じがして使いやすくなりました.
みんなと一緒に分かち合いましょう.
準備:
まずSUN公式サイトにzipパッケージをダウンロードします:javacomm 20-win 32.zip
重要なのは、これらのファイルです.
win32com.dll
comm.jar
javax.comm.properties
説明に従って環境を構成します.次のようにします.
win 32 com.dllをbinディレクトリにコピーします.comm.jarをlibにコピーします.javax.com.propertiesも同じようにlibディレクトリにコピーします.しかし、実際にシリアルポートパケットを使用する場合は、これらだけでは十分ではありません.通常、「Java MyApp」を実行する場合、JRE下の仮想マシンがMyAppを起動するからです.これらのファイルのみをJDKの対応するディレクトリの下にコピーするため、アプリケーションはシリアルポートが見つからないことをプロンプトします.この問題を解決する方法は簡単で、上記のファイルをJRE対応のディレクトリの下に置くだけでいいです.
このjavaシリアルポート開発環境になると構築が完了します
本機で使用できるシリアルポートを確認する:

package test;

import java.util.Enumeration;
import java.util.HashMap;

import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;

public class GetSerialPorts {

  public void listPortChoices() {
    CommPortIdentifier portId;
    Enumeration en = CommPortIdentifier.getPortIdentifiers();
    // iterate through the ports.
    while (en.hasMoreElements()) {
      portId = (CommPortIdentifier) en.nextElement();
      if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        System.out.println(portId.getName());
      }
    }

  }

  public static void main(String[] args) {

    GetSerialPorts GSP = new GetSerialPorts();
    GSP.listPortChoices();

  }

}




シリアルポートを開き、シリアルポートを閉じます.

package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.HashMap;

import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;

public class GetSerialPorts {

  private CommPortIdentifier portId;

  private SerialPort testPort;

  private CommPortIdentifier myPort;

  private InputStream is;

  private OutputStream os;

  public void listPortChoices() {

    Enumeration en = CommPortIdentifier.getPortIdentifiers();
    // iterate through the ports.
    while (en.hasMoreElements()) {
      portId = (CommPortIdentifier) en.nextElement();
      if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        System.out.println(portId.getName());
      }
      myPort = portId;//        ,  com1
    }

  }

  public boolean openPort() {
    try {
      testPort = (SerialPort) myPort.open("COM1", 500);//                
      try {
        this.testPort.setSerialPortParams(38400, SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
      } catch (UnsupportedCommOperationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      try {
        this.testPort.enableReceiveTimeout(30);
      } catch (UnsupportedCommOperationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      this.testPort.setOutputBufferSize(1024);
      this.testPort.setInputBufferSize(1024);

      try {
        this.is = this.testPort.getInputStream();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      try {
        this.os = this.testPort.getOutputStream();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      this.testPort.notifyOnDataAvailable(true);
      this.testPort.notifyOnOutputEmpty(true);
      this.testPort.notifyOnBreakInterrupt(true);

      // this.printerPort.addEventListener(new PrintPortListener(is));
      System.out.println("  com1     ");
      return true;
    } catch (PortInUseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return false;
    }

  }

  /**
   * TODO     
   * 
   * @param
   * @return Map
   * @throws
   */
  public boolean closePort() {
    // TODO Auto-generated method stub
    try {
      if (null != this.testPort) {
        is.close();
        os.close();
        this.testPort.close();
      }
      System.out.println("  COM1    ");
      return true;
    } catch (Exception e) {
      // TODO Auto-generated catch block
      // e.printStackTrace();
      System.out.println("  COM1    ");
      return false;
    }
  }

  public static void main(String[] args) {

    GetSerialPorts GSP = new GetSerialPorts();
    GSP.listPortChoices();
    GSP.openPort();

  }

}


データの読み込み:

/**
   * TODO     ���
   * 
   * @param InputStream
   * @return String
   * @throws
   */
  public String readData(InputStream is) {
    //       
    byte[] readBuffer = new byte[4096];
    int readDataLength = 0;
    try {
      readDataLength = is.read(readBuffer);
      // for (byte b : readBuffer) {
      // System.out.print(b);
      // }
      // System.out.println();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
    //              
    byte[] readTemp = new byte[readDataLength];
    for (int i = 0; i < readDataLength; i++) {
      readTemp[i] = readBuffer[i];
    }

    //  byte     16     
    String stringTemp = FeelTheBase.bytesToHexString(readTemp);
    // System.out.println("     " + stringTemp);

    return stringTemp;

  }


読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!