Exemple de communication série utilisant purejavacomm

introduction

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

échantillon

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

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.

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

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

Évaluation

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

Exemple de communication série utilisant purejavacomm
Exemple de communication série à l'aide de jSerialComm
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