The other day, I introduced "jSerialComm" Here is a sample of "jSerialComm /)". Actually, "jSerialComm" is used. "Netty-Transport-jSerialComm "Use directly.
maven Add netty-transport-jserialcomm to pom.xml.
pom.xml
...
	<dependencies>
		<!-- https://mvnrepository.com/artifact/se.koc/netty-transport-jserialcomm -->
		<dependency>
			<groupId>se.koc</groupId>
			<artifactId>netty-transport-jserialcomm</artifactId>
			<version>1.0.0</version>
		</dependency>
	</dependencies>
...
This time, I am creating a sample that simply connects to COM5 and continues to receive text. For COM5, I used my MONO Wireless TWE-Lite-USB.
JSerialCommClient.java
package net.kyosho.serial.jsc;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.jsc.JSerialCommDeviceAddress;
import io.netty.channel.jsc.JSerialCommChannel;
import io.netty.channel.jsc.JSerialCommChannelConfig.Paritybit;
import io.netty.channel.jsc.JSerialCommChannelConfig.Stopbits;
import io.netty.channel.oio.OioEventLoopGroup;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
/**
 * Sends one message to a serial device
 */
public final class JSerialCommClient {
	static final String PORT = System.getProperty("port", "COM5");
	public static void main(String[] args) throws Exception {
		EventLoopGroup group = new OioEventLoopGroup();
		try {
			Bootstrap b = new Bootstrap();
			b.group(group).channel(JSerialCommChannel.class).handler(new ChannelInitializer<JSerialCommChannel>() {
				@Override
				public void initChannel(JSerialCommChannel ch) throws Exception {
					ch.config().setBaudrate(115200).setParitybit(Paritybit.NONE).setStopbits(Stopbits.STOPBITS_1);
					ch.pipeline().addLast(new LineBasedFrameDecoder(32768), new StringEncoder(), new StringDecoder(),
							new JSerialCommClientHandler());
				}
			});
			ChannelFuture f = b.connect(new JSerialCommDeviceAddress(PORT)).sync();
			f.channel().closeFuture().sync();
		} finally {
			group.shutdownGracefully();
		}
	}
}
JSerialCommClientHandler.java
package net.kyosho.serial.jsc;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
public class JSerialCommClientHandler extends SimpleChannelInboundHandler<String> {
	@Override
	public void channelActive(ChannelHandlerContext ctx) {
		ctx.writeAndFlush("AT\n");
	}
	@Override
	public void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
		if ("OK".equals(msg)) {
			System.out.println("Serial port responded to AT");
		} else {
			System.out.println("Serial port responded with not-OK: " + msg);
		}
//		ctx.close();
	}
}
When executed, the following output will be obtained. For the time being, it can be read that TWE-Lite-USB outputs a counter at 1-second intervals.
output
Serial port responded with not-OK: ::ts=3760
Serial port responded with not-OK: ::ts=3761
Serial port responded with not-OK: ::ts=3762
Serial port responded with not-OK: ::ts=3763
Serial port responded with not-OK: ::ts=3764
It's easier to use than purejavacomm because you only need to add "Netty-Transport-jSerialComm" to pom.xml. (Purejavacomm will be as easy to use as it maintains netty-transport) There is also a link to the original site of netty, and if you get lost, you should use jSerialComm and netty-transport-jserialcomm.