串口数据读取类,用于windows的串口数据读取;
1.例如观察者为羊,被观察者为狼 ,模仿的场景为狼叫羊跑,可参考博客:
https://blog.csdn.net/dada360778512/article/details/6977758
2.模拟串口传输数据,需要两个工具,Virtual Serial Port Driver、串口调试助手;可参考:
https://jingyan.baidu.com/article/046a7b3eae7028f9c27fa9f7.html
3.基于RXTX(提供串口和并口通信)开源类库对串口进行操作的。具体配置,详见:
https://blog.csdn.net/liu4071325/article/details/53392218
必备插件/工具包:
1.项目里引用: RXTXcomm.jar
2.windows服务器需要以下三个文件:
\JDK目录\jre\lib\ext ---> RXTXcomm.jar
\JDK目录\bin ---> rxtxParallel.dll 和 rxtxSerial.dll
2.Linux服务器需要放置以下三个文件
\JDK目录\jre\lib\ext ---> RXTXcomm.jar
\JDK目录\bin --->librxtxParallel.so 和 librxtxSerial.so
感谢分享!
代码:
1.创建被观察者 SerialReader.java
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Observable;
import java.util.TooManyListenersException;
/**
* <p>串口数据读取类,用于windows的串口数据读取</p>
*
* 声明被观察者SerialReader,继承Observable<br/>
* 观察者,继承Observer<br/>
*
* Observer模式 主要是观察者与被观察者之间的关系。<br/>
*
*/
public class SerialReader extends Observable implements Runnable, SerialPortEventListener {
static CommPortIdentifier portId;
int delayRead = 200;
int numBytes; // buffer中的实际数据字节数
private static byte[] readBuffer = new byte[4096]; // 4k的buffer空间,缓存串口读入的数据
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
//声明观察者时,被指定的参数信息
HashMap serialParams;
// 端口读入数据事件触发后,等待n毫秒后再读取,以便让数据一次性读完
public static final String PARAMS_DELAY = "delay read"; // 延时等待端口数据准备的时间
public static final String PARAMS_TIMEOUT = "timeout"; // 超时时间
public static final String PARAMS_PORT = "port name"; // 端口名称
public static final String PARAMS_DATABITS = "data bits"; // 数据位
public static final String PARAMS_STOPBITS = "