L'autre jour, "jSerialComm présenté dans" Issues and Alternative Surveys for Java Serial Communication Library RXTX " Voici un exemple de "jSerialComm /)". En fait, "jSerialComm" est utilisé. "Netty-Transport-jSerialComm "Utilisez directement.
maven Ajoutez netty-transport-jserialcomm à 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>
...
Cette fois, je crée un exemple qui se connecte simplement à COM5 et continue de recevoir du texte. Pour COM5, j'ai utilisé mon 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();
}
}
Une fois exécuté, la sortie suivante sera obtenue. Pour le moment, on peut lire que TWE-Lite-USB émet un compteur à 1 seconde d'intervalle.
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
Il est plus facile à utiliser que purejavacomm car il vous suffit d'ajouter "Netty-Transport-jSerialComm" à pom.xml. (Purejavacomm sera aussi facile à utiliser qu'il maintient un netty-transport) Il existe également un lien vers le site d'origine de netty, et si vous vous perdez, vous devez utiliser jSerialComm et netty-transport-jserialcomm.
Recommended Posts