[JAVA] Beispiel für eine serielle Kommunikation mit jSerialComm

Einführung

Neulich wurde "jSerialComm in" Probleme und alternative Umfragen für die Java Serial Communication Library RXTX "eingeführt. Hier ist ein Beispiel von "jSerialComm /)". Tatsächlich wird "jSerialComm" verwendet. "Netty-Transport-jSerialComm "Direkt verwenden.

Stichprobe

maven Fügen Sie pom.xml netty-transport-jserialcomm hinzu.

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

Java-Quelle

Dieses Mal erstelle ich ein Beispiel, das einfach eine Verbindung zu COM5 herstellt und weiterhin Text empfängt. Für COM5 habe ich meinen MONO Wireless TWE-Lite-USB verwendet.

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

Ausführungsergebnis

Bei der Ausführung wird die folgende Ausgabe erhalten. Derzeit ist zu lesen, dass TWE-Lite-USB im Abstand von 1 Sekunde einen Zähler ausgibt.

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

Auswertung

Es ist einfacher zu verwenden als purejavacomm, da Sie nur "Netty-Transport-jSerialComm" zu pom.xml hinzufügen müssen. (Purejavacomm wird so einfach zu bedienen sein, wie es einen Netty-Transport unterhält) Es gibt auch einen Link zur ursprünglichen Site von netty. Wenn Sie sich verlaufen, sollten Sie jSerialComm und netty-transport-jserialcomm verwenden.

Recommended Posts

Beispiel für eine serielle Kommunikation mit jSerialComm
Beispiel für eine serielle Kommunikation mit purejavacomm
GUI-Beispiel mit JavaFX
Verwenden Sie die serielle Kommunikation unter Android
Beispielcode mit Minio aus Java
Prozesskommunikation mit AMQP mit RabbitMQ