広告

Ubuntu 16.04.3 と Raspbian Stretch (Raspberry Pi Model B) と Arduino Uno と RXTX でワショーイ

2017-10-11

!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!
!!! 半年以上も前に書かれた古い情報です !!!

温度・湿度センサと接続した Arduino Uno を Ubuntu 16.04.3 と Raspbian Stretch (Raspberry Pi Model B) に接続し、RXTX (Java) を使用して温度と湿度の情報を取得する話です。数年前にやってたのを Spring Boot と Gradle で書き直してみました。

まず、librxtx-java をインストールします。

sudo apt-get -y install librxtx-java

関連する so ファイルと jar ファイルが、/usr/lib/jni/ と /usr/share/java/ に置かれます。

Ubuntu 16.04.3 の場合、

ls -al /usr/lib/jni/
total 156
drwxr-xr-x   2 root root  4096  9月 23 13:10 .
drwxr-xr-x 145 root root  4096  9月 23 13:10 ..
-rw-r--r--   1 root root 22712  7月 21  2014 librxtxI2C-2.2pre1.so
lrwxrwxrwx   1 root root    21  7月 21  2014 librxtxI2C.so -> librxtxI2C-2.2pre1.so
-rw-r--r--   1 root root 14440  7月 21  2014 librxtxParallel-2.2pre1.so
lrwxrwxrwx   1 root root    26  7月 21  2014 librxtxParallel.so -> librxtxParallel-2.2pre1.so
-rw-r--r--   1 root root 22704  7月 21  2014 librxtxRaw-2.2pre1.so
lrwxrwxrwx   1 root root    21  7月 21  2014 librxtxRaw.so -> librxtxRaw-2.2pre1.so
-rw-r--r--   1 root root 22720  7月 21  2014 librxtxRS485-2.2pre1.so
lrwxrwxrwx   1 root root    23  7月 21  2014 librxtxRS485.so -> librxtxRS485-2.2pre1.so
-rw-r--r--   1 root root 59856  7月 21  2014 librxtxSerial-2.2pre1.so
lrwxrwxrwx   1 root root    24  7月 21  2014 librxtxSerial.so -> librxtxSerial-2.2pre1.so

ls -al /usr/share/java/
total 580
drwxr-xr-x   2 root root   4096  9月 23 13:10 .
drwxr-xr-x 308 root root  12288  9月 23 09:50 ..
-rw-r--r--   1 root root   5057  2月 10  2016 gettext.jar
-rw-r--r--   1 root root   2627  2月 25  2016 java_defaults.mk
-rw-r--r--   1 root root   5876  4月 29 00:28 java_uno.jar
-rw-r--r--   1 root root   2209  3月 29  2016 jayatanaag.jar
-rw-r--r--   1 root root  29647  3月 29  2016 jayatana.jar
-rw-r--r--   1 root root  61022  4月 29 04:34 juh-5.1.6.jar
lrwxrwxrwx   1 root root     13  9月 12 20:43 juh.jar -> juh-5.1.6.jar
-rw-r--r--   1 root root 119630  4月 29 04:34 jurt-5.1.6.jar
lrwxrwxrwx   1 root root     14  9月 12 20:43 jurt.jar -> jurt-5.1.6.jar
-rw-r--r--   1 root root   2627  2月 10  2016 libintl.jar
-rw-r--r--   1 root root 258904  4月 29 04:34 ridl-5.1.6.jar
lrwxrwxrwx   1 root root     14  9月 12 20:43 ridl.jar -> ridl-5.1.6.jar
-rw-r--r--   1 root root  61087  7月 21  2014 RXTXcomm-2.2pre2.jar
lrwxrwxrwx   1 root root     20  7月 21  2014 RXTXcomm.jar -> RXTXcomm-2.2pre2.jar
-rw-r--r--   1 root root   4779  4月 29 04:34 unoloader-5.1.6.jar
lrwxrwxrwx   1 root root     19  9月 12 20:43 unoloader.jar -> unoloader-5.1.6.jar

Raspbian Stretch の場合、

ls -al /usr/lib/jni/
total 136
drwxr-xr-x  2 root root  4096 Sep 23 16:34 .
drwxr-xr-x 86 root root  4096 Sep 23 16:34 ..
-rw-r--r--  1 root root 17908 Jul 26  2014 librxtxI2C-2.2pre1.so
lrwxrwxrwx  1 root root    21 Jul 26  2014 librxtxI2C.so -> librxtxI2C-2.2pre1.so
-rw-r--r--  1 root root 13764 Jul 26  2014 librxtxParallel-2.2pre1.so
lrwxrwxrwx  1 root root    26 Jul 26  2014 librxtxParallel.so -> librxtxParallel-2.2pre1.so
-rw-r--r--  1 root root 17912 Jul 26  2014 librxtxRS485-2.2pre1.so
lrwxrwxrwx  1 root root    23 Jul 26  2014 librxtxRS485.so -> librxtxRS485-2.2pre1.so
-rw-r--r--  1 root root 17924 Jul 26  2014 librxtxRaw-2.2pre1.so
lrwxrwxrwx  1 root root    21 Jul 26  2014 librxtxRaw.so -> librxtxRaw-2.2pre1.so
-rw-r--r--  1 root root 51052 Jul 26  2014 librxtxSerial-2.2pre1.so
lrwxrwxrwx  1 root root    24 Jul 26  2014 librxtxSerial.so -> librxtxSerial-2.2pre1.so

ls -al /usr/share/java/
total 3548
drwxr-xr-x   2 root root    4096 Sep 23 16:34 .
drwxr-xr-x 204 root root    4096 Sep 22 23:40 ..
-rw-r--r--   1 root root   61087 Jul 26  2014 RXTXcomm-2.2pre2.jar
lrwxrwxrwx   1 root root      20 Jul 26  2014 RXTXcomm.jar -> RXTXcomm-2.2pre2.jar
-rw-r--r--   1 root root   81487 Jun 21 20:36 el-api-3.0.jar
-rw-r--r--   1 root root  702405 Sep  7  2016 hsqldb1.8.0-1.8.0.10+dfsg.jar
lrwxrwxrwx   1 root root      29 Sep  7  2016 hsqldb1.8.0.jar -> hsqldb1.8.0-1.8.0.10+dfsg.jar
-rw-r--r--   1 root root  242816 Sep  7  2016 hsqldbutil1.8.0-1.8.0.10+dfsg.jar
lrwxrwxrwx   1 root root      33 Sep  7  2016 hsqldbutil1.8.0.jar -> hsqldbutil1.8.0-1.8.0.10+dfsg.jar
-rw-r--r--   1 root root    2630 Jan  4  2017 java_defaults.mk
-rw-r--r--   1 root root    5299 Jun  2 05:11 java_uno.jar
-rw-r--r--   1 root root   61896 Jun 21 20:36 jsp-api-2.3.jar
-rw-r--r--   1 root root   52380 Jun  2 05:11 juh-5.2.7.jar
lrwxrwxrwx   1 root root      13 Jun  2 05:11 juh.jar -> juh-5.2.7.jar
-rw-r--r--   1 root root  105941 Jun  2 05:11 jurt-5.2.7.jar
lrwxrwxrwx   1 root root      14 Jun  2 05:11 jurt.jar -> jurt-5.2.7.jar
-rw-r--r--   1 root root    2619 Jan 24  2017 libintl.jar
-rw-r--r--   1 root root  255193 Jun  2 05:11 ridl-5.2.7.jar
lrwxrwxrwx   1 root root      14 Jun  2 05:11 ridl.jar -> ridl-5.2.7.jar
-rw-r--r--   1 root root  243031 Jun 21 20:36 servlet-api-3.1.jar
-rw-r--r--   1 root root 1737642 Jun  2 05:11 unoil-5.2.7.jar
lrwxrwxrwx   1 root root      15 Jun  2 05:11 unoil.jar -> unoil-5.2.7.jar
-rw-r--r--   1 root root    4316 Jun  2 05:11 unoloader-5.2.7.jar
lrwxrwxrwx   1 root root      19 Jun  2 05:11 unoloader.jar -> unoloader-5.2.7.jar
-rw-r--r--   1 root root   36785 Jun 21 20:36 websocket-api-1.0.jar

/usr/share/java に置かれた RXTXcomm.jar を build.gradle の依存性に加えるには、

dependencies {
...
    // sudo apt-get -y install librxtx-java
    compile files('/usr/share/java/RXTXcomm.jar')
...
}

Arduino Uno のデバイス名は /dev/ttyACM0 となりますが、RXTX は ACM は認識してくれないため、USB としてシンボリックリンクを張って誤魔化しておきます。それから dialout グループにユーザーを登録しておきます。

sudo ln -s /dev/ttyACM0 /dev/ttyUSB0
sudo gpasswd -a $USER dialout

OS を再起動してもシンボリックリンクが有効になるように、OS 起動時のスクリプトに仕込んでおきます。/etc/rc.local に下記の 1 行を追加しておきます。

ln -s /dev/ttyACM0 /dev/ttyUSB0

いったんログアウトします。

RXTX でシリアル通信を行うアプリケーションを作成して実行する際に

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

というエラーが出る場合、下記のような 3 通りくらいの対処法があるかと思います。

(1)

Djava.library.path オプションを付けて librxtxSerial.so があるパスを指定する、

java -Djava.library.path=/usr/lib/jni -jar app.jar 

(2)

環境変数 LD_LIBRARY_PATH を設定する、

export LD_LIBRARY_PATH=/usr/lib/jni

OS 起動時にも設定したい場合、/etc/profile.d/jni.sh 等を作成しておき、その中に export 文を書くなど。

(3)

/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64 や /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/arm に librxtxSerial.so のシンボリックリンクを張るなりコピーする、

など。

なお、RXTX のソースはこちらに。

http://rxtx.qbang.org/wiki/index.php/Main_Page

広告

Arduino Uno, RXTX

Posted by admin