RemoteVMとは,Javaの開発(コードの編集とコンパイル)をパソコンで,実行をRaspberryPiで行うことができるツールです.パソコンにはremotevmlauncher-clientを動作させ,RaspberryPiにはremotevmlauncher-agentを動作させておき,clientに実行したいJavaのクラスファイルを指定することで,RaspberryPi上で動作させることができます.この文書では,RemoteVMの基本的な使い方について述べます.まずは実行環境を下に示します.
- RaspberryPi側
- RaspberryPi Type-B
- Java version 1.8.0
- RemoteVM remotevmlauncher-agent-1.0-20140103.103618-5.jar
- パソコン側
- eclipse 4.4.0
- Java version 1.8.0
- RemoteVM remotevmlauncher-client-1.0-20140103.103630-5.jar
RaspberryPi側の設定
remoteVMのagent(サーバに相当するもの)を自動的に起動するようにするための設定を行います.まずはダウンロードをします.こちらのサイトからダウンロードをしてください.このサイトの中に「Remote Agent」というものがありますので,これをダウンロードしてください.
つぎに,下に示したコマンドを入力すればremoteVMは起動します.
java -jar remotevmlauncher-agent-1.0-20140103.103618-5.jar -d 1
これを毎回起動させるのは大変なのでサービスとしてremoteVMを登録しておきます.こうすれば,Raspberry Piが起動するたびにremoteVMが自動的に動作してくれます.Raspbian Jessie以降ではsystemdを使ったサービス(ここではremoteVM)の自動起動が推奨されています.そのためには/etc/systemd/system/フォルダの下にサービス起動のためのファイルを作成します.ファイル名は任意ですが,ここでは「remotevm.service」という名前にします.下記のようにremovevm.serviceを作成および編集をします.
sudo vi /etc/systemd/system/remotevm.service
ファイルの内容は以下のように記述します.
[Unit] Description=RemoteVM After=syslog.target [Service] Type=simple WorkingDirectory=/tmp ExecStart=/usr/bin/java -jar /usr/local/bin/remotevmlauncher-agent-1.0-20140103.103618-5.jar -d 1 TimeoutStopSec=5 StandardOutput=null [Install] WantedBy = multi-user.target
次に,エージェント(サーバに相当するもの)を所定の場所へ移動します.remotevmlauncher-agent-1.0-20140103.103618-5.jarがあるディレクトリで下のようなコマンドを実行します.
sudo cp remotevmlauncher-agent-1.0-20140103.103618-5.jar /usr/local/bin
最後に,自動でremovevm.serviceが呼び出されるように設定しましょう.
sudo systemctl enable remotevm
これでサービスが実行されるはずです.試しにraspberry piを再起動し,エージェントが立ち上がるか下記のように確認してください.下記のコマンドを実行してみてください.
ps auxw|grep remotevm
うまくエージェントが起動されていると下記のようなメッセージが現れるはずです.当たり前ですがプロセス番号(426)やCPU占有率(0.9)などは場合によって異なります.大事なのはremotevmlauncherが起動していることです.
root 426 0.9 1.6 305168 15488 ? Ssl 18:53 0:01 /usr/bin/java -jar /usr/local/bin/remotevmlauncher-agent-1.0-20140103.103618-5.jar -d 1
パソコン側の設定
まずはクライアントをダウンロードします.前述のサイトから「client」をダウンロードしてください.
つぎに,eclipseでJavaの新規プロジェクトを作成します.
ここではRXTXWithRemoteVMという名前のプロジェクトを作成します.なお,名前がヘンに感じられるかもしれませんが,RemoteVMによるRXTXの動作でもこの文章を使っているためです.気にしないでください.
次に,ライブラリを入れるためのフォルダを作成します.下のようにRXTXWithRemoteVMを右クリックし,新規そしてフォルダを選択します.
フォルダ名をlibとします.
先ほどダウンロードしたremotevmlauncher-client先ほど作成したlibフォルダに追加します.その結果,下のようになります.
次に,Javaのビルド・パスを追加します.RXTXWithRemoteVMを右クリックし,プロパティを選択します.
まず,remotevmlauncher-clientを追加します.左側にあるJavaのビルド・パスを選択し,上側にあるライブラリタブを選択し,最後にJar追加ボタンを押します.
下のように,remotevmlauncher-clientを選択してください.
次に,新たなクラスSampleを追加します.
下のように名前をSampleにします.
プログラムには下のようにします.このプログラムはPi4Jのチュートリアルにあるものとまったく同じです.
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.RaspiPin; public class Sample { public static void main(String[] args) throws Exception { System.out.println("<--Pi4J--> GPIO Control Example ... started."); final GpioController gpio = GpioFactory.getInstance(); final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin( RaspiPin.GPIO_01, "MyLED", PinState.HIGH); System.out.println("--> GPIO state should be: ON"); Thread.sleep(5000); pin.low(); System.out.println("--> GPIO state should be: OFF"); Thread.sleep(5000); pin.toggle(); System.out.println("--> GPIO state should be: ON"); Thread.sleep(5000); pin.toggle(); System.out.println("--> GPIO state should be: OFF"); Thread.sleep(5000); System.out.println("--> GPIO state should be: ON for only 1 second"); pin.pulse(1000, true); gpio.shutdown(); System.out.println(" Finishing"); } }
RemoteVM下での実行
次に下のように実行します.ただし,実行構成を直さなければならないため,1回目の実行では動作しません.
次に実行構成を選択してください.そして,左側にあるJavaアプリケーションにある「Sample」を選択しましょう.そうするとメインタブ内に「メイン・クラス」がありますので,検索ボタンを押してください.下の図のように,clientを実行するため,LaunchRemoteを選択します.
次に,実行時の引数を修正します.「プログラムの引数」タブを選択し,下記のようにプログラムの引数を書いてください.
RaspberryPiのIPアドレス:8999 Sample --
最後に,ダイアログ下側にある「実行」ボタンを押してください.