*

EchonetliteでRaspberryPiをLチカ!RaspberyPiにJDK、Processing、Pi4J、OpenECHOをインストールの巻

公開日: : ガジェット, プロジェクトR

P5060438

はじめに

前回、Pi4JでRaspberryPiのGPIOを使ってLチカもでき、無事、EchonetLiteをすんなりインストールできると思いきや・・・
再インストールとなりましたw

ファクト

Echonetliteを使うため、いろいろネットを調べるうちに、以下のことが判りました

  • EchonetLiteのJava版はOpenECHOというもの
  • OpenECHOはProcessingというJava上のフレームワークが必要なこと
  • ProcessingはopenJavaでなく、OracleJava JDK8が必要なこと、ここ重要!
  • Processing上ではPi4JのGPIOを操作させるのにroot権限が必要なこと
  • Processingのプログラムはsketchbookというもので、OpenECHOにはsketchbook対応モジュールが存在
  • Lチカを操作するにはProcessingのプログラムが必要

ということで、前回、OpenJavaでPi4Jを動かしましたが、OracleJava JDk8をインストールです、ギャー

Due to incompatibilities, OpenJDK is not supported. You’ll need a regular Java release downloaded from Sun/Oracle. The GNU Classpath, GCJ, GIJ combination will not work with Processing. OpenJDK and IcedTea also have problems, particularly with running sketches full screen or with multiple displays or even window sizing. Bottom line: use the version from Oracle.

via: Supported Platforms – Processing

準備するもの

以下のアプリ、プログラムを準備します

  • OracleJava JDK8:Javaプログラムです
  • Processing:Javaのフレームワーク
  • Pi4J:Java上のGPIOアクセス
  • OpenECHO:Processing上のEchonetLiteフレームワーク
  • Sample.pde:LightningクラスのProcessing上のEchonetLiteプログラム

インストール

RaspberryPiにJDK8、Processing、Pi4Jをインストールする手順は、こちらのサイトを参照しました
Processing and GPIOs on Raspberry Pi | /dev/xavier

で、注意するところ、2点

1点目
こちらのプログラムは、このままでは動きませんでした
echo export JAVA_HOME=”/opt/java/jdk1.8.0″ >> .bashrc
echo export PATH=$PATH:$JAVA_HOME/bin >> .bashrc
source .bashrc

修正版はこちら
echoの度に、「source .bashrc」を実行します
echo export JAVA_HOME=”/opt/java/jdk1.8.0″ >> .bashrc
source .bashrc
echo export PATH=$PATH:$JAVA_HOME/bin >> .bashrc
source .bashrc

2点目
Processingのバージョンが古いので最新版を入手します
現状(2014/5/8)は2.1.2で、Linuxの32ビット版をDLします
こちら
その際、フォルダ名を置き換えて実行します

Echonetlite for Processingのインストール

ここがちょっと判りにくいものでした
最終的にはrootフォルダにユーザpiのsketchbookフォルダの内容をコピーします
手順

  1. まずは、こちらのGitHubサイトからデータ丸ごとDLします
    https://github.com/SonyCSL/OpenECHO
    右カラム下のDownLoadZipボタンからZipファイルを入手します(OpenECHO-master.zip)
  2. Zipファイルを解凍します
  3. 解凍したファイルからControlP5、OPENECHOの2つのフォルダ(OPENECHO-master→Processing→liblaries)をroot/sketchbook/liblaries/の下にコピーします
  4. で、sudo ./processingで起動できればOK

EchonetLiteのサンプルプログラム

Processing上で動作するプログラムは、こちら
これをProcessing上で動作させます
といっても、DLしたECHONETLITEのZIPファイル内のチュートリアル(Tutrial4_LightEmulator.pde)を修正したもの
なぜかネットで掲載されているコードのコピペでは動作しなかったw
修正した追加した内容といっても、ほんの数行

  • Pi4Jライブラリの読み込み
  • LEDランプの初期設定(起動時の消灯)
  • EchonetLiteでコマンドが来たときの点灯消灯処理
import java.io.IOException;
import processing.net.*;
import controlP5.*;

import com.sonycsl.echo.Echo;
import com.sonycsl.echo.node.EchoNode;
import com.sonycsl.echo.eoj.profile.NodeProfile;
import com.sonycsl.echo.eoj.device.DeviceObject;

import com.sonycsl.echo.processing.defaults.DefaultNodeProfile;
import com.sonycsl.echo.eoj.device.housingfacilities.GeneralLighting;

//
//ここから追加
//
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;

GpioController gpio;
GpioPinDigitalOutput pin;
//
//ここまで追加
//

color backgroundLightOnColor = color(255, 204, 0);
color backgroundLightOffColor = color(0, 0, 0);
color backgroundNow = backgroundLightOffColor;

// 照明クラスを実装します。
public class LightEmulator extends GeneralLighting {
byte[] mStatus = {0x31}; // 電源状態を格納する変数です。デフォルトはOFFと仮定します。
byte[] mLocation = {0x00}; // 機器の置き場所を格納する変数です。
byte[] mFaultStatus = {0x42}; // 機器に問題が発生した時に、そのコードを格納します。
byte[] mManufacturerCode = {0, 0, 0}; // ベンダー固有のメーカーコードです。
byte[] mLightingMode = {0x42}; // 照明のモードです。

protected boolean setOperationStatus(byte[] edt) {
mStatus[0] = edt[0] ;
//背景色を変更
if(mStatus[0] == 0x30){
backgroundNow = backgroundLightOnColor;
//
//この行追加
//
pin.high();
}else{
backgroundNow = backgroundLightOffColor;
//
//この行追加
//
pin.low();
}
//電源状態が変化したことを他のノードに通知します
try {
inform().reqInformOperationStatus().send();
}
catch (IOException e) {
e.printStackTrace();
}
return true;
}

protected byte[] getOperationStatus() {
return mStatus;
}

protected boolean setInstallationLocation(byte[] edt) {
mLocation[0] = edt[0];
try {
inform().reqInformInstallationLocation().send();
}
catch (IOException e) {
e.printStackTrace();
}
return true;
}

protected byte[] getInstallationLocation() {
return mLocation;
}

protected byte[] getFaultStatus() {
return mFaultStatus;
}

protected byte[] getManufacturerCode() {
return mManufacturerCode;
}

protected byte[] getLightingModeSetting() {
return mLightingMode;
}

protected boolean setLightingModeSetting(byte[] edt) {
mLightingMode[0] = edt[0];
return true;
}

public String toString() {
if (mStatus[0] == 0x31) {
return "Light Emulator(Off)";
}
else {
return "Light Emulator(On)";
}
}

}

ControlP5 cp5 ;
LightEmulator light ;
String[] btnStrs = {
"SWITCH_ON", "SWITCH_OFF"
};

void setup() {
size(210, (btnStrs.length)*30);
frameRate(30);

// 次に、学習と再生のユーザーインターフェースを作成します。
cp5 = new ControlP5(this) ;
// 送信用のボタンを左に、学習用のボタンを右に表示します。
for ( int bi=0;bi<btnStrs.length;++bi ) {
cp5.addButton(btnStrs[bi], 0, 0, (bi)*30, 100, 25) ;
}

// System.outにログを表示するようにします。
//Echo.addEventListener( new Echo.Logger(System.out) ) ;

// 自分自身がLightEmulatorを含むノードになることにしましょう。
try {
light = new LightEmulator() ;
Echo.start( new DefaultNodeProfile(), new DeviceObject[] {
light
}
);
}
catch( IOException e) {
e.printStackTrace();
}
//
//この2行追加
//
gpio = GpioFactory.getInstance();
pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLed", PinState.LOW);
}

void draw() {
background(backgroundNow);
}

// ボタンが押された時の処理です。
// ※ControlP5ではボタンのラベルがそのまま関数名になります。
public void SWITCH_ON(int theValue) {
try {
light.set().reqSetOperationStatus(new byte[]{0x30}).send();
}
catch(IOException e) {
e.printStackTrace();
}
}
public void SWITCH_OFF(int theValue) {
try {
light.set().reqSetOperationStatus(new byte[]{0x31}).send();
}
catch(IOException e) {
e.printStackTrace();
}
}

P5060435

P5060436

起動

Processing上から上のプログラムを起動するとダイアログがでればOK!
ダイアログ上のON・OFFスイッチで、LEDが点灯すれば成功!
P5060437

P5060438

P5060439

やることリスト

  • RaspberryPi購入
  • SDカード購入
  • SDにOSインストール
  • 設定・動作確認【追加】
  • Pi4Jインストール・動作確認
  • LED回路作成・点灯確認
  • EchonetLite for Javaインストール
  • Kadecotでオンオフ操作
  • 有線LANから無線LANにネットワークを変更
  • 100V電源制御確認
  • すべてOKw

まとめ

なぜかネット上のコードでは動作せず、動作させるまで時間を取られましたが、作業自身は簡単なものです

参考にしたサイト

Processing and GPIOs on Raspberry Pi | /dev/xavier


openECHO!ホームネットワーク機器と化したラズパイ:何かができたらとりあえずまとめるブログ – ブロマガ
Tutrial4_LightEmulator …

Supported Platforms – Processing

Raspberry Pi + OpenECHOでLチカ | MUDAなことをしよう。

情報

PC

関連記事

アキバにLet’s note CF-S8のノート用メモリ2GB(DDR2-800 PC-6400)をジャンク市で買ってきたの巻

はじめに Let's note用のメモリを買いました 古い機種なので探すのに苦労しましたが、

記事を読む

手動と電動(NSE-307BK:ナカバヤシ)、シュレッダーの裁断時間を比較してみたの巻

はじめに 先日、パーソナルシュレダーのNSE-307BK:ナカバヤシを購入しました 便利なん

記事を読む

ファンのホコリを掃除して無事復活! DELL vostro A860

ノートPCのファンのホコリを取り除くと、快適にPCが動作しています 熱暴走していたDE

記事を読む

こちらも簡単!RaspberryPiでJavaを動かす!pi4jをインストールしたの巻

はじめに JavaでRaspberryPiのIOを制御できるようにします 参考サイト こち

記事を読む

爪楊枝充填! 銀座 ビクトリノックス・ストア銀座 マルチルール ツースピック S

鍵に付けているビクトリノックスのマルチツール いつの間にか、白い爪楊枝が無くなってしまいま

記事を読む

リーズナブルなノートPCで満足!Lenovo G580 2689MGJを開封

新年早々、Lenovo G580 2689MGJを購入しました 謹賀新年 今年もよろ

記事を読む

iphone6S/6Splus発売記念!Ankerのライトニングケーブル開封の儀【改善版】【Apple認証 (Made for iPhone取得)】 Anker 第2世代 高耐久ナイロン ライトニングUSBケーブル iPhone 6s/iPhone 6s Plus/iPhone 6/5/iPad Air/ iPad mini/ iPod用 絡み防止 耐熱アルミコンパクト端子 (シルバー 0.9m) A7136041

一言 iPhone6S/6Splusの発売記念セールで少しお安くゲットできました はじめに

記事を読む

これでキズにならない! AtermWM3800Rのケース Crystal Case for NEC モバイルWiMAXルータ Aterm WM3800R ブライトンネット

これでキズの心配が、なくなりました 愛用しているAtermWM3800R モバイルと

記事を読む

【動画】キャノンプリンタPIXUS MP490のインクカートリッジBC-310を交換してみたの巻

はじめに キャノンプリンタPIXUS MP490のインクがなくなったのでインクカートリッジBC

記事を読む

簡単掃除でキーボードをきれいに! キーボード掃除 キートップ引抜工具

キーボードを掃除したのは初めて、入手してから10年ぶりぐらいです この記事を見て、キー

記事を読む

PC

PC

PAGE TOP ↑