java 직렬 통신 상세 및 간단한 실례

6373 단어 java직렬 통신
java 직렬 통신 실현
최근에 하드웨어와 관련된 프로젝트를 했는데 처음에 자바와 하드웨어로 접촉한다는 말을 듣고 깜짝 놀랐다.자바도 하드웨어를 조작할 수 있습니까?
나중에 자바로 직렬 통신을 통해 하드웨어를 제어하는 것을 접했는데 사용하기도 괜찮고 편리하다고 느꼈다.
특별히 꺼내서 여러분과 함께 나누겠습니다.
준비 작업:
먼저 SUN 홈페이지에 zip 패키지를 다운로드하세요:javacomm20-win32.zip
중요한 것은 다음과 같습니다.
win32com.dll
comm.jar
javax.comm.properties
지침에 따라 환경을 다음과 같이 구성합니다.
win32com.dll을 \bin 디렉토리로 복사합니다.comm.jar를 \lib로 복사하기;자바스를comm.properties도 \lib 디렉터리로 복사합니다.그러나 직렬 패키지를 실제로 실행할 때, 이것만으로는 부족하다.보통 "자바 마이 앱"을 실행할 때, JRE 아래의 가상 기기에서 마이 앱을 시작하기 때문이다.위의 파일만 JDK의 해당 디렉토리에 복사하므로 직렬을 찾을 수 없다는 메시지가 표시됩니다.이 문제를 해결하는 방법은 매우 간단하다. 우리는 위에서 언급한 파일을 JRE의 상응하는 디렉터리 아래에 두기만 하면 된다
이로써 자바 직렬 개발 환경을 구축할 수 있게 되었다
이 컴퓨터에서 사용할 수 있는 직렬 포트를 확인합니다.

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;

  }

읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기