Raspberry Pi + Processing (+pi4j) 〜OpenECHOの下準備〜

Raspberry PiでOpenECHOを動作させる前準備として、Raspberry PiへのProcessingのインストールにチャレンジ。といっても、今回も基本的に先駆者の後を追うだけなのですが。

JavaでRaspberry PiのGPIOを制御する

こちらを参考に、と思ったら、さらにこちらも参考にされているところがあったので、以下、下記を参照しながら進めることにする。

Processing and GPIOs on Raspberry Pi

基本的には書いているとおりに進めるだけなのだけれど、違ったのは以下の箇所。

・手順通りにJDK8をインストールしたつもりでjava -versionをチェックしたら、なぜか1.8.0ではなく1.7.0_40が入っていた。でも動作には問題なし。

・echo export PATH=$PATH:$JAVA_HOME/bin >> .bashrcで、なぜかPATHに/opt/java/jdk1.8.0/binが入ってくれなかったので、$JAVA_HOMEをベタ書きで対処。

・Processingのソースのパスが古かったので、新しいところからインストール。これで正しく動作する。

wget https://processing.googlecode.com/files/processing-2.1.1-linux32.tgz

あとは記載の手順どおりで、同じページに記載されているサンプルプログラムをProcessingで動かしてみると…GPIOのアクセス権限云々でエラーになる。

wiringPiSetup: Unable to open /dev/mem: 許可がありません
Unable to change ownership of /sys/class/gpio/gpio27/value: 許可されていない操作です
Unable to change ownership of /sys/class/gpio/gpio27/edge: 許可されていない操作です

どうやら、Raspberry Piでは仮想ファイルにアクセスすることでGPIOを制御するとのことなので、スーパーユーザ権限が必要なよう。

ということで、sudo suでスーパーユーザになってProcessingを起動し、サンプルプログラムを実行すると…今度はpi4jのライブラリがないと怒られる。どうやら、Processingでは、プログラムの実行ユーザの持つsketchbookディレクトリの中のlibrariesを参照する模様。ということで、サンプルプログラムのディレクトリとpi4jライブラリのディレクトリを、それぞれ/root/sketchbookと/root/sketchbook/librariesにコピーして、再度スーパーユーザで実行すると、ようやく起動成功。

サンプルプログラムの回路の実装。

th_samplecircuit

Processingの画面。タクトスイッチを押すと、ランダムで円が現れる。

th_snapshot1

とりあえずはこれでOK…ではあるのだけれど、いちいちスーパーユーザになったりrootフォルダに放り込むのは面倒なので、できればノーマルユーザのままで実行できるようにしたい。ということで、WiringPiをインストール。インストール方法はこのあたりを参照のこと。これにくっついてくるgpioユーティリティを使えば、スーパーユーザにならずにGPIOを制御できるらしい。

今回のサンプルで使用したGPIOの番号はWiringPiでの2番、すなわちGPIO27なので、Processingの実行前にコマンドラインで以下を実行。

$ gpio -g mode 27 in
$ gpio export 27 in

ls -l /sys/class/gpio/gpio27/ でチェックすると、確かにedgeとvalueのファイルオーナーがrootからpiに変わっていたので、これでいけるかな…と思いきや、確かにGPIO27について怒られることはなくなったものの、まだ

wiringPiSetup: Unable to open /dev/mem: 許可がありません

のエラーが残る。うーん、もう少し原因を突き詰めた方が良い気もするけれど、一旦はここまで。とりあえず、スーパーユーザでまかなう。