LoginSignup
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-18

対象

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)投稿しました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5