Java IoT 開発準備〜BlueJの使い方+Eclipseインストール(RPi)〜

IoTをJavaでやる

JavaでのIoT開発をやるのに、色々と考え、試しましたが、結局はPC上に仮想マシンを立てて実行、テスト、デプロイの順でやるのがやりやすいといところに至りました。

BlueJを使う

VMBoxにインストールしたRPiにデフォルトでインストールされているJavaのIDE(開発ツール)としてBlueJというものがあります。

ちょっと動かしてみました。

Eclipseを使う

参考サイトをみてセットアップを行い開発を進めるのも1つの手段です。

インストール手順

  1. ラズパイでターミナルを開き、以下のコマンドで「dhcpcd5パッケージ」を削除する(互換性がないため)
    sudo apt-get purge dhcpcd5

  2. そして、ラズパイでのネットワーク設定はこちらを参照してやってみる

  3. gdebiコマンドラインツールをインストールします。
    sudo apt-get update
    sudo apt-get install gdebi-core

  4. Java 8がインストールされていることを確認してください。ターミナルを起動してから下のコマンドを叩きます。
    java -version

Javaのバージョンが11なので8をインストールします。
sudo apt-get install openjdk-8-jre-headless

ラズパイのネットワーク

そして、いよいよEclipseをダウンロードしようと思いますが、自分の環境ではネットワークが繋がらない事件が起きてしまい。。。
ネットワークの設定をサイド行いました。が結局繋がらなかったので、実物をダウンロードしてインストールする方向に切り替えました。。。こちらのサイトから落とします

ダウンロードしている最中に、(終わるかは別)VMBoxの共有フォルダを作成します。
VMBoxの設定を開き、共有フォルダを選択します。

緑色のプラスボタンを押下して下のように入力しました。

そして、ゲストOS(ラズパイ)を起動して共有フォルダを探してもありませんでした。。。

VBoxAdditionインストール

結論から言うとアプリが足りないのです。。。
と言うわけで、VBoxAddtion〜をインストールします。
VBoxのメニューから「Device」を選択します。VMBoxからゲストOSを起動した状態で行うのでキャプチャが取れませんでした。。。
「Insert Guest Additions CD image」と言う文字が見えるのでそれをクリックします。
するとゲストOS上にCDが見えるようになりますので、それを確認します。さらに以下の手順を行います、

Guest Additions〜のインストール

ターミナルを起動して以下のコマンドを叩き、CDをマウントします、これをやらないとファイルを起動できません。

  1. ディレクトリの移動
    cd /mnt
  2. CD用のディレクトリの作成と
    mkdir cdrom
  3. CDをマウント
    mount -r /media/cdrom /mnt/cdrom/
    ちなみに、CDは/media/cdromにありました。
  4. そしてインストールを行います。
    sudo sh /mnt/cdrom/VBoxLinuxAdditions.run
  5. 共有フォルダをマウント、ファイルパーミッションの変更します。
    sudo mount -t vboxsf 共有フォルダの名前 /mnt/マウントするフォルダ名
    自分の場合は下のようなコマンドになりました。
    sudo mount -t vboxsf VMBox_Fld /mnt/vmbox_fld

そして、パーミッションの変更(誰でもアクセスできるようにします)以下のコマンドを叩きます。
chomod 777 マウントしたフォルダ
自分の場合は、以下のコマンドを叩きました。
sudo chomod 777 /mnt/vmbox_fld

パーミッションの詳細に関しては、こちらを参考にしました。さらに、グループ権限の登録も行います。
sudo gpasswd --add pi vboxsf

しかし、うまくいかず。。。他の人はこれでだいたいうまくいっているようです。

Macのやり方があるようだ

こちらのサイトを見ると<VMBox.app/XXX>のファイルを何かしら、しないといけないようです。

でわでわ。。。



ラズパイ RPi 〜(成功)PC(Mac)からSSH接続〜

今回も、ラズパイ(RPi)へのSSH接続に挑戦します。

前回の反省

RPiに接続するのにはLANで接続してやらないとダメな様だ。

反省を活かす

シンプルにLANで接続してやれば良いだけです。できるかどうかはやって見てから。。。
前回、RPiをPC上で探し当てるのに「arp-scan」コマンドをインストールしました。> arp-scan -Vでバージョンの確認をします。つまりインストールされている確認をします。

そして、RPiとMac(PC)を接続します。下の様に接続しました。

なんか、USBとLANで接続しているので無限ループしそうですが、現在の自分の理解としては以下の様に理解しています。

  1. RPiのUSBはあくまで電源を共有するためのUSB
  2. ネットワーク接続に関しては、LANもしくはWifiでの接続になる

これでPCからRPiへの接続を試みます。

いきなり詰まる

先ほどの「arp-scan」はどうやらIPがわからないと使えない様で。。。仕方ないので、他の方法を探します。
「ifconfig」コマンドで調べることにしましたが、出力される内容がわからないので、調べました。参考サイトはこちらです。
そして、理解したのは以下の内容です。

  1. ifconfigコマンドで出力される「lo0」「eth0」などはネットワークインターフェースの名前であること
  2. しかし、ラズパイの情報を持っていないと話にならない

というわけで、ラズパイに改めてログインしてSSHの設定などを行うことにしました。

RPiを見てみる

結局は、ラズパイの設定を見て設定しているIPアドレスを調べました。自分の場合は192.168.4.2なっていたので上のようにLANでPCと接続してから、以下の手順で接続しました。

bluetoothctlを使う

sshで以下のコマンドで接続しました。

$ ssh pi@192.168.4.2
# パスワードなどを聞かれます。。。
$ sudo bluetoothctl

下のような感じで表示されました。

そして、接続したいMACアドレス(上の黒塗りにしている部分)をコマンドに渡します。

そして、Mmicrobitと接続ができました。



ラズパイ RPi 〜(失敗)PC(Mac)からSSH接続〜

今回は自分のPC(Mac)でSSH接続、つまりUSBで接続してMacから操作しようということをしようと思います。

SSH接続

ターミナルからラズパイ(RPi)に接続しようというわけです。
もともと、RPiに画面を使用したアプリを作成しようと色々試したのですが、結局は中途半端になっておりました。
画面作成はどうしてもビデオカードなどを使用したり、小型のディスプレイを使用したりと面倒なことが多いので、保留になっていましたが、今回はシンプルに画面なしのものを作成しようと考えています。

MIDIプレイヤー

これを作成したいのですが、道のりは遠そうなのでJavaの基本ブログ(JAVA学習フロー)を作成しながらのんびりと行こうと思います。

はじめの一歩

まずはラズパイの環境構築などを行うためのセットアップが必要なので、Macから接続してラズパイをコントロールできる様にしようと思います。ほぼ、手順の再確認になります。

SSH接続手順

Macからラズパイを探す必要があります。なのでMacとラズパイをUSBで接続したら、以下の手順を踏みます。

  1. ターミナルを起動
  2. ラズパイをターミナルから探す
  3. ラズパイとSSH接続する

macでは「arp-scan」コマンドが使える様です。
こちらのサイトを参考にしました。

brewコマンド

自分も最近知ったのですが、「brew」コマンドはMacで使用できるコマンドでいろんなアプリをインストールできるコマンドです。Pythonとかrubyとかgitに上がっているものなど色々とインストールできる様です。

今回は「arp-scan」を使用してやろうと思います、がせっかくの機会のなでこのコマンドのGithubをみてみました。いろんな人が色々とやっているのだなぁと感慨深いものがありいました。

失敗1

今回の挑戦は、USBでラズパイに接続することでしたが、USBは電源につい泣いているのもあり、ネットワークを別個に接続する必要があるみたいです。
現状のRPiは何も設定していないので、ネットワークを接続できる様な設定が必要です。

RPiの設定を行う

やっぱり、ネットワークの設定だけはやっておかないといけない様です。。。

結果

電源を入れたラズパイにLANケーブルを接続して、改めて上のコマンドで検索してやる必要があるようです。

Install XFCE4 on RPi 〜ラズパイに高速軽量デスクトップインストール〜

イントロダクション

ラズパイに表題のアプリケーションをインストールします。デフォルトインストールされているラズビアンは以下の理由で使用しません。

・起動が遅い

そしてXFCE4を使用する理由を列挙します。

  1. GUIアプリを作成したい
  2. CUIでの画面アプリケーションは動かせない(自分の知る限り)

XFCE4のインストール

参考にするサイトのURLです。

http://www.etcwiki.org/wiki/XFCE_desktop_on_raspberry_pi

そして、以前、XFCE4のインストールを行なっていたのでどこまでやったかを確認します。

インストール

上記のサイトのコマンドを叩いていけばインストールできます。

su
apt-get update
apt-get upgrade
apt-get install vim sudo raspi-config rpi-update  #VIMインストール
raspi-config    (change what you want, do NOT boot to desktop)

ポイントはデスクトップを起動しない設定を最後の行でするところです。

これでXFCE4のインストールは完了で、次はウィンドウマネージャをインストールしてやる必要があります。

このままだと今までと大して変わりません。。。。

今までと同じラズパイ画面がでます(笑)

 








dpkg error processing package default-java-plugin (–configure)

イントロダクション

表題の様なエラーが出た時の対処をやりました。

症状:apt-get ができなくなった。。。

調査

エラーメッセージをとりあえず検索する。。。

それっぽいページを開き、詳細を見ていく。。。

色々と調べていくうちにラズパイの「LAN」を起動していないことに気がつく。。。

解決

ネットワークに接続しているかどうかの確認を行いましょう。

あと環境変数JAVA_HOMEに使っていないJDKを指定していたのでそれを削除して再起動したら治りました。


RPi Java Swing〜ラズパイにJava Swingアプリを起動する〜

イントロダクション

初めは、CUIからJava Swingを起動したかったのですが、ちょいと時間がかかるので保留にして、GUI起動してからSwingを実行する様に変更します。

Introduction

At first I woudl like to execute from CUI to Java Swing(GUI). But I need to more leaning about Swing and X. That's why I will start GUI and execute Java Swing.

Java Swing

最近では「JavaFX」でも画面を作成することができるので「Swing」とどちらを使用するか悩んだのですが、テクノリジー的に歴史の長い「Swing」を使用することにしました。

Swingは大雑把に以下の要素で構成されています。

画面(JFrame, JDialog, JWindow), 画面の部品(JComponent)だいたいこれらのクラスを継承したクラス群を使用して画面の作成を行います。

詳細に関してはこちらをどうぞ。

Java Basic Swing〜オブジェクト指向〜

作ってみよう!(Let's get started!)

シンプルに写経をするのが一番だと思います。

mport javax.swing.*;
import java.awt.*;

public class RpiCtlMain extends JFrame {
    public static void main(String[] args) {
        RpiCtlMain rpi = new RpiCtlMain(args);
    }

    /**
     * コンストラクタ(Constructor)
     * インスタンスを作る処理を行う。(Create instance)
     *
     * 1.プログラム引数を受け取る
     *  [0]:タイトル
     */
    public RpiCtlMain(String[] args) {
        // 親クラスのコンストラクタを呼び出す
        // Call constructor of parent class
        super();

        // JFramewを作成するこのクラスが
        // JFrameを継承しているのでこのクラスを作成する

        // デフォルトの画面タイトル
        this.setTitle("Hello RPi Swing!");
        // プログラム引数がある時
        if (args.length > 0) {
            // 1個目の引数をタイトルにセット
            this.setTitle(args[0]);
        }
        // コンポーネントを追加する
        Container con = this.getContentPane();
        con.add(new Label("Hello Swing ! This is Label"));

        // 画面サイズ
        this.setSize(500, 500);

        // 画面が終了したらプログラムも終了する設定
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // パック(コンポーネントのサイズに合わせる)
        this.pack();
        // 表示設定をする(しないと何もおきずに終了してしまう
        this.setVisible(true);

    }
}

実行結果です。真ん中あたりにあるのは赤字になっているコードを入れた時と入れない時の差分です。※大きい方が赤字コードを入れないケースです。

ちなみにGITリポジトリからPULLできます。

https://github.com/ZenryokuService/RpiSwing

関連ページ

<ラズパイ関連>

  1. ラズパイ SSH接続メモ
  2.  ラズパイ Under-voltage detected! 〜エラー対処〜
  3.  ラズパイ(CUI)セットアップ
  4.  RPi Settingup Wifi in CUI ~ラズパイ CUI Wifi接続~
  5. Memos about Settingup RPi ~使用したコマンドメモ~
  6. RPi and JavaFX sample of deployment 〜ラズパイにサンプルデプロイ〜
  7.  RPi JavaFX execution ~ラズパイ JavaFX自動起動~
  8. RPi Install Git 〜ラズパイにGitのインストール〜
  9. RPi Java Swing〜ラズパイにJava Swingアプリを起動する〜 ※失敗しています。。。」
  10. RPi Install Git 〜ラズパイにGitのインストール〜
  11. RPi Maven Install 〜ラズパイでMeven〜
  12. Install XFCE4 on RPi 〜ラズパイに高速軽量デスクトップインストール〜

 


RPi Install Git 〜ラズパイにGitのインストール〜

イントロダクション

Gitはローカルリポジトリとリモートリポジトリを使用します。

概要としては以下の様になります。「リポジトリ」の意味は作成してみればわかります。(笑)

1: ローカルリポジトリを作成する

2: リモートリポジトリからクローンする

3: ダウンロードできたことを確認する

手順:参考サイト

1: Gitのローカルリポジトリを作る

適当なディレクトリ(フォルダ)を作成します。下はコマンド入力の例です。

「myLocalRepository」は自分で作成するローカルリポジトリになります。

$mkdir ./myLocalRepository
$cd ./myLocalRepository
$git init

実行後に以下の様な文言が出ます。

Initialized empty Git repository in /XXX/myLocalRepository/.git

早い話が「.git」ファイルが作成されます。

Gitからリポジトリをダウンロード(クローン)する

git clone https://github.com/ZenryokuService/rpictl.git

上のコマンドはコピペで自分の作成しているリポジトリをダウンロード(クローン)できます。

そしてJAVA_HOMEにJDKを指定します。

以下のコマンドで「bashrc」or「bash_profile」ファイルを修正します。

#パターン1
nano ~/bashrc
#パターン2
nano ~/bash_profile

開いたら一番下に以下の様なスクリプトを追加します。(書くだけです)

JAVA_HOME=/usr/local/jdk1.8.0_181
PATH=$PATH:$JAVA_HOME/bin:M2_HOME/bin

作成したら以下のコマンドでbashrc(bash_profile)をリロードします。

#パターン1
source ~/.bashrc
#パターン2
source ~/.bash_profile

余談

せっかくクローンしてきたのでMavenビルドをかけてみます。

参考にしたサイトはこちらです。

ぶっちゃけてコピって適当な場所を修正しただけです。

※赤い部分が修正した部分です。

<!-- 実行可能jarファイル用のプラグイン -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <finalName>test</finalName>
        <descriptorRefs>
            <!-- 依存するリソースをすべてjarに同梱する -->
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>main.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <!-- idタグは任意の文字列であれば何でもよい -->
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

これをGitにコミット(PUSH)してからラズパイで「mvn install」で必要なファイルのインストールおよびビルドをかけます。

targetディレクトリ(フォルダ)にJARファイルが出力されているので以下のコマンドで実行します。

java -jar XXXX.jar

実行結果はまた後日!








Java settingup RPi ~ラズパイのJVMを切り替える~

イントロダクション

ラズパイでJavaでの画面を表示したいがラズパイ用のJavaセットアップをしていなかったので改めてセットアップする

ラズパイには、はじめから(デフォルト)でJavaがインストールされているようですがJavaで低レベルな機能を使用しようとすると動きません。

Java言語では、低レベル(C言語に近い)機能~高レベル(リスト、可変長配列など)が使用できるので今回実装しようとしている「Swing」は「高レベルAPIになりますが基盤としているテクノロジーAWTが動かないとSwingもうごかないというわけです。

※上のリンクは「パッケージの説明」部分を参考にしてください。

~低レベル機能について~

「低レベル」というのは、画面表示とか、ファイルの扱いなど物理的な領域に近い部分の処理のことを言います。Networkも低レベルな領域ですが、大体通信用のライブラリが用意されているので「高レベル」に近くなります。

<例>

  1. Rest通信
  2. AMQP通信
  3. EJB

本題~JVMの切り替え~

ラズパイ上でJVMの切り替えを行う手順を示します。

  1. オラクルからARM用のJDKをダウンロードする。
  2. tarファイルを解凍して展開する
  3. 使用するjavaコマンドのJVMを切り替える

「1」にあるリンクのページに手順が記載されています。が英語です。読める人はそちらを呼んでください。

上のリンクからも移動できますが、ダウンロードページからARM用のJDKをダウンロードします。

  • PCからRPiのSDカードにダウンロードする
  • PCでダウンロードしたファイルをSSHで転送する
  • wgetコマンドでダウンロードする(できないかも?)

自分はSSHで転送する手段を使用しました。

コマンドの実行

# 2.tarファイルの解凍
tar zxvf jdk-8u5-linux-i586.tar.gz -C /usr/java

# 3.JVMをjavaコマンドに設定する(JVM切り替える(JDKを切り替える))
sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.7.0_10/bin/java" 1
sudo update-alternatives --set java /opt/java/jdk1.7.0_10/bin/java

# 最後に確認します
sudo update-alternatives --list java
sudo update-alternatives --list javac

#Javaを選択し直す場合は。。。
sudo update-alternatives --config java

最後の「java」の部分は「javac」に変えて確認できます。

こんな感じです。


RPi Maven Install 〜ラズパイでMeven〜

イントロダクション

ラズパイにMavenをインストールする方法を記載いたします。

Introduction

how to install Maven in RPi.

目的

作成したJavaアプリをRPiにMaven InstallでGitから持ってきて起動するため

Goal

To execute apps that mede by java on RPi. using Mavem Install download from Git.

手順

以下のコマンドを叩きます。command as bellow

>apt-get install maven

1.Mavenをwegetコマンドでダウンロード。

・Mavenのサイトで現在のバージョンを確認する

http://maven.apache.org/

※ Date: 2018/09/26

・以下のコマンドでRPiにダウンロードする(RPiにログインしてコマンドを叩く)

weget http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

URLはダウンロードするリンクのアドレスをコピーして取得する

2.ダウンロードファイルを解凍

/optへ解凍するので以下の様なコマンドを叩く

cd /opt
tar -xzvf /downloadPath/apache-mavem3.5.4-bin.tar.gz

シェルを作成

Mavenのパスを環境変数に追加するスクリプトを作成する

sudo nano maven.sh
これでファイルを作成する

export M2_HOME=/opt/apache-maven-3.2.5
export "PATH=$PATH:$M2_HOME/bin"

そして再起動するとMavenが使えるということだが。。。

試したら、この記事を更新します。

失敗でした。

/opt/maven.shが起動できていませんでした。

なので以下のファイルに追記します。

.bashrc

export M2_HOME=/opt/apache-maven-3.2.5
export PATH=$PATH:$M2_HOME/bin