Java
COM
serial
Netty
RXTX

Javaのシリアル通信ライブラリRXTXの課題と代替調査


対象

Javaでシリアル通信したい方向けです。

私自身は、近年IoTが流行ってしまい、ソフトウェア屋さんなのに!素人なのに!電子工作始めることになり、苦労しています(笑)

本文は、簡単な備忘録気分で書いていますので、不足点や不備があるかと思いますが、よかったら読んでやってください。


環境

調査時点では、Windows10 64bit環境で動作することを第一としています。

開発環境は以下となっています。


  • Eclipse 2018-12

  • maven


RXTX

Javaでシリアル通信をしたいとき、ググると大抵RXTXライブラリがヒットします。

RXTXは、JavaのライブラリとC/C++ネイティブライブラリの2つから構成されており、以下からダウンロードできます。

Windows 32bit, Windows 64bit, Linux, mac等、プラットフォームによってネイティブライブラリを切り替える必要があります。


RXTXの課題

RXTXを使っていて、以下の課題に直面しています。

(他にもあるかも?)


  1. 10年以上メンテナンスされていない

  2. 亜種バージョン(2.2)やネイティブライブラリもいろいろなサイトで少し異なるバージョンが配布されており、管理・統一されていない

  3. ネイティブライブラリの影響で、折角Javaで書いたのにプラットフォーム依存となってしまう


代替ライブラリ

上記の課題があると、シリアル通信しようとすると尻込みしちゃいますよね。。。

「でも、RXTXで困ってる人は私だけではないはず!何とかしようとしている勇者がいるはず!」

ということで、2つほど見繕ってみました。

サンプルを実行してみると、Windows 10 64bitではすんなり動いてくれたので、ご紹介します。


purejavacomm

説明を読むと、JNA(Java Native Access)を利用して、プラットフォーム非依存を確保しつつシリアル通信を実現したそうです。

RXTXで言うところのネイティブライブラリが、JNAに置き換わったという理解です。

RXTXを意識していると書いてある通り、APIは似通っています。

2019-01に1.0.3をリリースしているので、メンテナンスはしてくれている様子です。

(記述時のmavenリポジトリは1.0.2が最新でした)


jSerialComm

こちらもRXTXの代替として作られているようで、APIは類似しています。

ネイティブライブラリはjarに内蔵されており、起動時にプラットフォーム別に利用ライブラリをロードしているようです。

Windows/Linux に加えて、ARMプロセッサにも対応しているとあり、RaspberryPiでも動くようです。

(ソースコードを眺めるとAndroidというキーワードも入っているのでAndroid上でも動作するかも?)

メンテナンスは、2018-12に最新版リリースしています。


評価

実際にサンプルを実行すると、purejavacommもjSerialCommも、mavenリポジトリから利用できました。

ネイティブライブラリを意識せずに動作しました。

他ライブラリとの連携という観点では、両者ともにnettyと連携するライブラリが公開されています。

メンテナンス・サポートといった面では、purejavacommが良さそうですが、netty-transport-purejavacomm - github.comはmavenリポジトリに無いのが惜しいところです。

netty本家サイトではNetty-Transport-jSerialComm - github.com が紹介されていますし、mavenリポジトリを利用できるので使いやすいです。


今後の課題

今後、purejavacomm と jSerialCommを使ったサンプルを投稿したいと思います。

(2019-02-19)投稿しました。