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の新規プロジェクトを作成します.

RemoteVM01

ここではRXTXWithRemoteVMという名前のプロジェクトを作成します.なお,名前がヘンに感じられるかもしれませんが,RemoteVMによるRXTXの動作でもこの文章を使っているためです.気にしないでください.

RemoteVM02

次に,ライブラリを入れるためのフォルダを作成します.下のようにRXTXWithRemoteVMを右クリックし,新規そしてフォルダを選択します.

RemoteVM03

フォルダ名をlibとします.
RemoteVM04

先ほどダウンロードしたremotevmlauncher-client先ほど作成したlibフォルダに追加します.その結果,下のようになります.
RemoteVM05

次に,Javaのビルド・パスを追加します.RXTXWithRemoteVMを右クリックし,プロパティを選択します.

RemoteVM06

まず,remotevmlauncher-clientを追加します.左側にあるJavaのビルド・パスを選択し,上側にあるライブラリタブを選択し,最後にJar追加ボタンを押します.

RemoteVM07

下のように,remotevmlauncher-clientを選択してください.

RemoteVM08

次に,新たなクラスSampleを追加します.

 RemoteVM11

 

下のように名前をSampleにします.

RemoteVM12

プログラムには下のようにします.このプログラムは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回目の実行では動作しません.

RemoteVM13

 

次に実行構成を選択してください.そして,左側にあるJavaアプリケーションにある「Sample」を選択しましょう.そうするとメインタブ内に「メイン・クラス」がありますので,検索ボタンを押してください.下の図のように,clientを実行するため,LaunchRemoteを選択します.

RemoteVM14

次に,実行時の引数を修正します.「プログラムの引数」タブを選択し,下記のようにプログラムの引数を書いてください.

RaspberryPiのIPアドレス:8999
Sample
--

最後に,ダイアログ下側にある「実行」ボタンを押してください.