java 직렬 통신 상세 및 간단한 실례
최근에 하드웨어와 관련된 프로젝트를 했는데 처음에 자바와 하드웨어로 접촉한다는 말을 듣고 깜짝 놀랐다.자바도 하드웨어를 조작할 수 있습니까?
나중에 자바로 직렬 통신을 통해 하드웨어를 제어하는 것을 접했는데 사용하기도 괜찮고 편리하다고 느꼈다.
특별히 꺼내서 여러분과 함께 나누겠습니다.
준비 작업:
먼저 SUN 홈페이지에 zip 패키지를 다운로드하세요:javacomm20-win32.zip
중요한 것은 다음과 같습니다.
win32com.dll
comm.jar
javax.comm.properties
지침에 따라 환경을 다음과 같이 구성합니다.
win32com.dll을
이로써 자바 직렬 개발 환경을 구축할 수 있게 되었다
이 컴퓨터에서 사용할 수 있는 직렬 포트를 확인합니다.
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;
}
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.