対象
Javaでシリアル通信したい方向けです。
私自身は、近年IoTが流行ってしまい、ソフトウェア屋さんなのに!素人なのに!電子工作始めることになり、苦労しています(笑)
本文は、簡単な備忘録気分で書いていますので、不足点や不備があるかと思いますが、よかったら読んでやってください。
環境
調査時点では、Windows10 64bit環境で動作することを第一としています。
開発環境は以下となっています。
- Eclipse 2018-12
- maven
RXTX
Javaでシリアル通信をしたいとき、ググると大抵RXTXライブラリがヒットします。
RXTXは、JavaのライブラリとC/C++ネイティブライブラリの2つから構成されており、以下からダウンロードできます。
Windows 32bit, Windows 64bit, Linux, mac等、プラットフォームによってネイティブライブラリを切り替える必要があります。
RXTXの課題
RXTXを使っていて、以下の課題に直面しています。
(他にもあるかも?)
- 10年以上メンテナンスされていない
- 亜種バージョン(2.2)やネイティブライブラリもいろいろなサイトで少し異なるバージョンが配布されており、管理・統一されていない
- ネイティブライブラリの影響で、折角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)投稿しました。