[JAVA] Exemple de communication série à l'aide de jSerialComm

introduction

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.

échantillon

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>
...

Source Java

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();
	}
}

Résultat d'exécution

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

Évaluation

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

Exemple de communication série à l'aide de jSerialComm
Exemple de communication série utilisant purejavacomm
Exemple d'interface graphique utilisant JavaFX
Utiliser la communication série sur Android
Exemple de code utilisant Minio de Java
Communication de processus utilisant AMQP avec RabbitMQ