spring boot 对串口的读取的快速方法 demo
- 支持了多串口操作
- maven 坐标名称有调整
- 普通項目请使用 common-rxtx
-
引入依赖
<dependency> <groupId>cn.qqhxj.rxtx</groupId> <artifactId>spring-boot-starter-rxtx</artifactId> <version>2.1.0-RELEASE</version> </dependency>
-
启动串口自动配置
@EnableSerialPortAutoConfig
-
配置串口
- 注解和配置文件重复配置可能会配置出错
- 注解配置
@EnableSerialPorts(value = {
@EnableSerialPort(value = "COM2", portName = "COM2")})
- 配置文件配置
serialport: config: - portName: COM1 - portName: COM2
- 串口数据读取器配置(可选)
-
一个串口只能配置一个,不支持绑定多个串口上
-
使用 @SerialPortBinder(value = "COM2") 绑定到指定串口
-
AnyDataReader
读取一切的数据 (默认配置) -
ConstLengthSerialReader
读取定长的数据 -
VariableLengthSerialReader
读取有前后标识字符的数据 -
LiveControlSerialReader
读取有开始位、数据长度的数据大家还可以按照自己的协议实现新的数据解析器
- 需要实现
SerialReader
接口 - 不要忘记要加入到spring的IOC容器中,才能对数据进行处理哦
- 需要实现
-
数据解析器配置(可选)
大家可以自己配置需要的解析器 示例如下
-
需要实现
SerialDataParser<T>
接口 的public T parse(byte[] bytes)
方法。解析为相应的对象 -
不要忘记要加入到spring的IOC容器中,才能对数据进行处理哦
-
一个数据解析器可同时配置在多个串口上。
-
使用 @SerialPortBinder(value = "COM2") 绑定到指定串口
public class StringSerialDataParser implements SerialDataParser<String> { @Override public String parse(byte[] bytes) { return new String(bytes); } }
-
-
配置数据处理器
没有进行任何的默认配置 需要的请自行配置
- 要实现
SerialDataProcessor<T>
接口在public void processor(T t)
方法中对数据进行处理 - 要将该处理器加入到spring的IOC容器中。 配置方法如下所示
- 一个数据处理器可同时配置在多个串口上。
- 使用 @SerialPortBinder(value = "COM2") 绑定到指定串口
@Component public class XXXProcessor implements SerialDataProcessor<String> { @Override public void processor(String s) { System.out.println(s); } }
- 要实现
-
启动
@SpringBootApplication
public class RxtxDemoApplication {
public static void main(String[] args) {
SpringApplication.run(RxtxDemoApplication.class, args);
while (true) {
;
}
}
}
- 获取 串口上下文
SerialContext
@Qualifier(value = "COM2.SerialContext")
@Autowired
private SerialContext serialContext;
//或者
@Lazy
@Resource
@Qualifier("COM31.SerialContext");
private SerialContext serialContext;