L'autre jour, "PureJavaComm présenté dans" Issues and Alternative Surveys for Java Serial Communication Library RXTX " Voici un exemple de "purejavacomm / purejavacomm.php)". En fait, en plus de "PureJavaComm", "[netty-transport-purejavacomm](https://github.com/steveturner/netty-transport-" J'utilise aussi purejavacomm) ".
maven Ajoutez purejavacomm à pom.xml. De plus, "netty-transport-purejavacomm" est copié et utilisé.
pom.xml
...
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.purejavacomm/purejavacomm -->
<dependency>
<groupId>com.github.purejavacomm</groupId>
<artifactId>purejavacomm</artifactId>
<version>1.0.2.RELEASE</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.
PureJavaCommClient.java
package net.kyosho.serial.pjc;
import java.util.Enumeration;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
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;
import purejavacomm.CommPortIdentifier;
public final class PureJavaCommClient {
public static void main(String[] args) throws Exception {
CommPortIdentifier portid = null;
Enumeration<CommPortIdentifier> e = CommPortIdentifier.getPortIdentifiers();
while (e.hasMoreElements()) {
portid = (CommPortIdentifier) e.nextElement();
System.out.println("found " + portid.getName());
}
EventLoopGroup group = new OioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group).channel(PureJavaCommChannel.class).handler(new ChannelInitializer<PureJavaCommChannel>() {
@Override
public void initChannel(PureJavaCommChannel 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 PureJavaCommClientHandler());
}
});
ChannelFuture f = b.connect(new PureJavaCommDeviceAddress("COM5")).sync();
f.channel().closeFuture().sync();
} finally {
group.shutdownGracefully();
}
}
private PureJavaCommClient() {
}
}
PureJavaCommClientHandler.java
package net.kyosho.serial.pjc;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
public class PureJavaCommClientHandler 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. Bien! Je suis connecté!
output
found COM5
found COM1
found COM3
Serial port responded with not-OK: ::ts=2743
Serial port responded with not-OK: ::ts=2744
Serial port responded with not-OK: ::ts=2745
Serial port responded with not-OK: ::ts=2746
Serial port responded with not-OK: ::ts=2747
Serial port responded with not-OK: ::ts=2748
Je suis un peu inquiet de devoir copier et utiliser "netty-transport-purejavacomm", mais soyez conscient de la bibliothèque native. C'est facile parce que vous n'êtes pas obligé. Et quand vous souhaitez communiquer facilement?
Recommended Posts