最近、
ラズベリーパイでのJavaに関する記事がhabrahabr
で公開されました
。その名前には多くの期待が寄せられていました。
実は、私のラズベリーがちょうど私のところに来て、次の質問への答えを得たいと思ったということです。
1.ラズベリーとデスクトップコンピューターでのJavaの速度は同等ですか?
2.ラズベリーでjavaを使用するのはどれほど便利ですか?
3. GPIOを操作するための適切なライブラリはありますか?
この記事では、これらの質問への回答を提供します。
誰が気にします:カットへようこそ(裸のラズベリーのグラフィックと写真はそこにありません)
パスワードなしでSSH経由でRaspberry PIへのアクセスを設定する
私はネイティブのラップトップが大好きで、sshを介して他のLinuxマシンで作業することを好みます。
したがって、まず、便宜上、ラズベリーへのアクセスをキーで構成します。
これを行うには、接続元のコンピューターで、ssh-keygenコマンドを使用してキーペアを生成します。
次に、公開鍵をラズベリーにコピーします
$ scp /home/user1/.ssh/id_rsa.pub pi@raspberry_server:~/ $ ssh pi@raspberry_server $ mkdir .ssh $ cat ~/id_rsa.pub >> ~/. ssh /authorized_keys
Ctrl-Dを押してセッションを終了します。 再び接続しようとしています-利益。 パスワードを要求せずに接続します。
ボンネットの下を見る
まず第一に、私はどのような機器を手に入れたかに興味があります。 もちろん、ドキュメントを見ることができますが、必ずしも完全な真実を伝えるとは限りません。
したがって、接続してコマンドを入力します
$ cat /proc/cpuinfo
次の行に興味があります:
特徴:SWPハーフサムFastMult VFP EDSP Java TLS
すでに興味深い。 ラズベリーが私を幸せにすることを願っています。
JAVA SE Embeddedをインストールする
前の記事では、openJDKのインストール方法について説明しました。 誰が気に-見て。
しかし、Oracleからjavaをインストールすることに興味がありました(とにかく、お気に入りのIDEでお気に入りのラップトップでjavaコードをコンパイルしたい)。
したがって、Oracle Webサイトにアクセスし、java se組み込みパッケージ(ARMv6 / 7 Linux-ヘッドレス-クライアントコンパイラEABI、VFP、HardFP ABI、リトルエンディアン)をダウンロードし、/ home / piフォルダーに入力します。
ラズベリーコンソールに移動し、
1. / optフォルダーにアーカイブを展開します
$ sudo tar -xvf ejre-7u45-fcs-b15-linux-arm-vfp-hflt-client_headless-26_sep_2013.tar.gz -C /opt
2.次に、PATH変数にjavaファイルへのパスを追加し、JAVA_HOME変数を設定します
$ sudo chmod a+w /etc/profile $ echo 'export PATH=/opt/ejre1.7.0_45/bin:$PATH' >> /etc/profile $ echo 'export JAVA_HOME=/opt/ejre1.7.0_45' >> /etc/profile $ sudo chmod aw /etc/profile
sshとコマンドを使用して再起動します
$ java -version
仮想マシンがインストールされていることを確認してください。
作業速度のテスト
ここで、ラズベリーでのJavaの速度がどのくらい遅いかを調べます。 このテストは、包括的な客観性を装うものではなく、単にラズベリーとデスクトップコンピューター上の仮想マシンの速度の差の大まかな順序を示すことを目的としています。
テストでは、クロック周波数1.3 HzのAMD E-300 APUプロセッサー(つまり、ラズベリーのほぼ2倍)を搭載したネットブックを選択しました。
テストでは、エラトステネスのふるいを使用して素数を見つけるためのプログラムを使用します。
興味がある人は誰でもソースコードを見ることができます: public class RaspTest { public static void main(String[] args) { int maxPrimesCount = 40000; int currentPrimesCount = 1; long prevTime, execTime; prevTime = System.currentTimeMillis(); long[] primes = new long[maxPrimesCount]; long currentNumber = 3; boolean isPrime = false; primes[0]=2; while (currentPrimesCount < maxPrimesCount) { isPrime = true; for (int i = 0; i < currentPrimesCount; i++) { if (currentNumber % primes[i] == 0) { isPrime = false; break; } } if (isPrime) { primes[currentPrimesCount] = currentNumber; currentPrimesCount++; } currentNumber++; } execTime = System.currentTimeMillis() - prevTime; System.out.println(execTime); System.out.print(currentNumber-1); } }
合計:
ネットブックの結果は89秒、ラズベリー-444秒でした。
合計:ラズベリーでは、ほぼ5倍遅くなります。 クロック周波数とアーキテクチャの違いを考えると、まあ、かなり期待されています。
数値の種類をlongからintに変更すると、驚きが生じます。
この場合、ネットブックの結果は38秒、ラズベリーは65秒でした。
びっくりしました。
結論: raspberry piの仮想マシンの速度は、デスクトップコンピューター
の速度に匹敵します。
GPIOを使用する
ジョーカー会議の講義の1つで、スピーカーはJava Embedded ME(マイクロエディション)でGPIOをプログラムしました。
残念ながら、Standart Editionには対応するクラスがないため、Googleに目を向けてPi4Jプロジェクト(www.pi4j.com)を見つけました。 安定バージョンは現在0.0.5ですが、プロジェクトは現在開発中で、バージョン1は現在開発中です。
それでも、バージョン1ではすべてがうまくいくわけではないため、安定版を使用することをお勧めします。
また、ポート番号は標準のポート番号とわずかに異なるため、Pi4J Webサイトのドキュメントをよく理解することをお勧めします。
最初のポートのLED、2番目のボタンのLEDをキャッチし、次のコードを記述します。
public class Test1 { public static void main(String[] args) throws InterruptedException { GpioController gpioController = GpioFactory.getInstance(); GpioPinDigitalOutput gpioPinDigitalOutput = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH); GpioPinDigitalInput gpioPinDigitalInput = gpioController.provisionDigitalInputPin(RaspiPin.GPIO_02,PinPullResistance.PULL_DOWN); gpioPinDigitalInput.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent gpioPinDigitalStateChangeEvent) { System.out.println("GPIO Pin changed" + gpioPinDigitalStateChangeEvent.getPin() + gpioPinDigitalStateChangeEvent.getState()); System.out.println("Sleeping 5s"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Unsleep"); } }); while (true) { gpioPinDigitalOutput.toggle(); Thread.sleep(500); } } }
パッケージを収集し、jarファイルとライブラリをraspberry piにコピーして実行すると、...動作しません。
I / Oポートを管理するには管理者権限が必要であることがわかりました。
しかし、チームが機能するためには
$ sudo java
/ binディレクトリに、Javaマシンの実行可能ファイルへのシンボリックリンクがあるはずです。 作成する:
ln -s /opt/ejre1.7.0_45/bin/java /bin/java
もう一度始めます-それは動作します。 ランプが点滅します。ボタンを押してプロセスストリームがスリープ状態になると、ランプは点滅し続けます。 ボタンからのイベント処理は非同期に開始されます。
結論:
1. Raspberry piはおもちゃではなく、多くのタスクに適したパフォーマンスと機能を備えたコンピューターです。
2. Java仮想マシンのパフォーマンスはデスクトップシステムのパフォーマンスに匹敵しますが、やや劣ります。
3. javaとraspberry piを使用した外部機器の管理は、実際に非常に簡単に解決できるタスクです(これは将来行う予定です)。
ご清聴ありがとうございました。