Raspberry Pi 日記 (part2)

長嶋 洋一


2013年6月21日(金)

金曜日は2限にゼミの院生と3回生が集合するだけの日ということで、お仕事も稼ぎ時である。 研究室に出て来ると、ふーみんからの「re: Blink(1)」というメイルが3本、届いていた。 送っていたBlink(1)の現物が届き、ゆうべ、やってくれたようで、1本目のメイルから30分で2本目、さらに1時間で3本目、とサクサクと進んだようで、さすがである(^_^)。 今日はこれを順になぞって、Raspberry PiでBlink(1)を点灯させるとともに、Raspberry Piプログラミングのあれこれを勉強していこう。 まず最初のメイルは以下であった。
さきほどblink(1)が届きました.ありがとうございます.

で,手元に来てみて真面目に長嶋さんのログを読みましたが,
blink1-tool を動かすにはroot権限が必要,というだけのことのようです.

> 、実行させると以下のように「no blink(1) devices found」と表示されて、
> デバイスが認識されない
> ./blink1-tool -m 100 --rgb 255,0,255

ではなく,

sudo ./blink1-tool -m 100 --rgb 255,0,255

で普通にサクっと動きました.blink(1)を挿して,blink1-toolをダウンロードして
上記のようにしただけで動きます.特になにかをインストールしなければ
ならないということはありませんでした.

毎回sudoが面倒なら

sudo chown root blink1-tool
sudo chmod 4755 blink1-tool

としておけば,sudoなしで普通に動きます.

PythonやらCやらはこれからちょっとやってみます.
・・・あらら、そうだったのかぁ(^_^;)。 sudoでやっていなかったかなぁ。 さっそくやってみると、以下のようにアッサリとBlink(1)が点灯した。

YouTube

さっそく、上記のふーみんメイルに従って、「sudo chown root blink1-tool」でblink1-toolのオーナーをrootに、「sudo chmod 4755 blink1-tool」で実行権限を変更した。 これはしばらく使うかもしれないからである。 そして2限のゼミでは、M1のリュ君、3回生の土佐谷さんと森川さんの作品制作の進捗確認などを行った。 その後、以下の2本目のメイルに取りかかった。 「PythonでRaspberry Piに挿さったBlink(1)を制御」という事である。

pythonですが,

wget http://goo.gl/N9L4e
mv N9L4e pyusb-1.0.0-a1.tar.gz
tar xzvf pyusb-1.0.0-a1.tar.gz
cd pyusb-1.0.0-a1/
sudo python setup.py install
sudo python blink1-demo.py

で,blink1-demo.py は普通に動きました.
赤から5秒かけて青にフェード,という,コメント通りの動作です.

blink1-ctype.py の方は,Cのライブラリをpythonから
使えるようにするラッパーなので,まずCのライブラリを
ビルドする必要があると思います.
これはこれから試してみます.
上記の「wget」をそのままRaspberry Piで実行するには、「Raspberry Piを固定IPからDCHPに変更」「モバイルWiFiルータを起動して接続し1 day利用を契約」「Raspberry Piからwgetする」「後でRaspberry PiをDHCPから固定IPに戻す」という段取りが必要になる。 しかし、「wget http://goo.gl/N9L4e」でゲットするバイナリは、ホストのMacからアクセスすると、「pyusb-1.0.0-a1.tar.gz」というアーカイブ・バイナリファイルとしてダウンロードできたので、これをRaspberry Piにrcpすれば上記の2行まで終わる、と思われる。 そして、どこかファイル名に見覚えがあったので調べてみると、6月19日のところで、「pyusb-1.0.0a3.zip」という、より新しい?ものを既にゲットしてRaspberry Piに入っていることを発見した。

・・・ところが以下のように(詳細は これ )、「pyusb-1.0.0-a1」と「pyusb-1.0.0a3」の両方で、ふーみんの提示した処理を行ったところ、別にエラーは出ないものの、うまく行かなかった。 まず、ふーみんの言う「blink1-demo.py」が見当たらないのである(^_^;)。 そして、以前にゲットした「blink1hid-demo.py」では、前回と同じエラーが出た。 さて困った。

そこでふーみんに「blink1-demo.pyが見当たらない」とメイルすると、速攻で以下が届いた。 さすがの師匠である。(^_^)

Macに落としていたものをRPiに転送した、という
記述があったので、既にあるのかと思っていました。

RPi上でゲットするのであれば

git clone git://github.com/todbot/blink1.git

で、他のものも含めて全部取ってきます。

上のコマンドで blink1/ というディレクトリに一式落ちてきますが、
その中の python/ にあるはずです。
ということで、これは本来ならモバイルWiFiルータであるが、試しにMacから「http://github.com/todbot/blink1.git」をアクセスすると、 ここ にやってきて、「https://github.com/todbot/blink1.git」のメニューの横には「ZIP」というボタンがある。 たぶんこれでMacで落としても同じなのでは・・・という予想で、まずはこの30MBを落としにかかった。 「blink1/」の中身一式は必要ではなくて(ここにはlinuxもmacもwindowsもprocessingもpythonもrubyもある(^_^;))、その中の「python/」だけ拾えばいいのだろう。 そして、この「python/」の ここ から、さらにもう1本、「Python libraries」の「"bliPi.py" - DPontes wrapper of blink1-tool」というのがあったので、 ここ から、以下の「bliPy.py」もゲットした。
#!/usr/bin/env python
import time, sys, os, subprocess
path = '/home/diogo/i386/blink1/commandline/blink1-tool'
cmd_on = ' --on'
cmd_off = ' --off'
cmd_red = ' --red'
cmd_green = ' --green'
cmd_blue = ' --blue'
cmd_rgb = ' --rgb '
cmd_blink = ' --blink '
cmd_random = ' --random '
cmd_list = ' --list'
cmd_version = ' --version'
opt_fade = ' -m ' # written in milliseconds
opt_timing = ' -t ' # written in milliseconds

def emitCommand(command):
    output = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
    output = output.stdout.read()
    return output

class Blink1:
    def __init__(self):
        output = emitCommand(path + cmd_list)
        if (output[:2] == 'no'):
raise NameError('No blink1 Device Found!')
    def breath(self, interval, rgb = None):
        command = path + opt_fade + str(interval * 1000) + cmd_off
        emitCommand(command)
        time.sleep(interval)
        if(rgb != None):
            color = ','.join(str(x) for x in rgb)
            command = path + opt_fade + str(interval * 1000) + cmd_rgb + color
        else:
command = path + opt_fade + str(interval * 1000) + cmd_on
        emitCommand(command)
        time.sleep(interval)

if __name__ == '__main__':
    bl1 = Blink1()	
    time_interval = 1.75
    while 1:
        bl1.breath(time_interval)
するとここで、さらに以下のふーみん情報が届いた。 これはなかなか悩ましい。(^_^;)
どうも、色々やっているとblink1hid-demo.py が動くようになったりすることが
あるようで、必要なモジュールやデバイスの初期化、終了処理がおろそかな
ところがあるのかもしれない気がしています。

先にblink1-tool で--on とか--off とかしてやるとblink1hid-demo.py が
動くようになることがあるかと思えば、それでもだめな時もあって、
なにか特定の処理をきちんと入れないとだめなのかもしれません。
この意味では、Blink(1)はまだそれ自身にバグがあるカモというものだし、ツール等もまだまだ不完全なのかもしれない。 ・・・とメイルしたら、さらにふーみんから以下が届いた。 チャットに近いトラフィックである(^_^)。
python 関係は、今のところとりあえず動きます、という感じですね。

blink1/commandline/blink1-tool.c の

// get a list of all devices and their paths

あたりから下をみるとblink1-lib.so のAPIの使い方はわかるので、
それを使ってCで書いた方が幸せになれるかもしれません。

Blink(1)自体のバグというよりは、Pythonからデバイスを使いにいくときの
コーディングが枯れてないんじゃないかという印象です。
なるほど、これは決定的である。 「枯れていない」Pythonに付き合うつもりもなく、もともと、Pythonにあまり拘りたくないなぁ・・・と思っていたのであった。 ここは本命として、やはり、Cでやっていけばいいのであろう。

31.9MBの「blink1-master.zip」をダウンロードして解凍して「python/」ディレクトリを見てみると、やはり「blink1-demo.py」でなく「blink1hid-demo.py」しかなくて、エラーも同じだった(^_^;)。 そこでようやく、面倒な手順を再びセットして、「git clone git://github.com/todbot/blink1.git」でRaspberry Piから落とすことにした。 しかし結局、「git clone git://github.com/todbot/blink1.git」に対しては「gitなんていうプロトコルは対応していません」(^_^;)とかで断られて、仕方ないので「wget」の作戦に切り換えて、 このような 感じで、ふーみんメイルにあった

wget http://goo.gl/N9L4e
mv N9L4e pyusb-1.0.0-a1.tar.gz
tar xzvf pyusb-1.0.0-a1.tar.gz
cd pyusb-1.0.0-a1/
sudo python setup.py install
sudo python blink1-demo.py
の通りにやってみたものの、最後の1行はNot Foundで、以下の(1)のように捜しても見つからなかった。 そしてBlink(1)が挿さっている状態で「blink1hid-demo.py」を起動すると(2)のようなエラーが出て、Blink(1)を抜いて「blink1hid-demo.py」を起動すると(3)のようなエラーが出る、という状況は変わらなかった。

夕方には、注文していたちょっと面白いブツが届いたりして、今日の作業はここまでとなった。 朝に届いていたふーみんメイルの3本目、「Cのライブラリについて」という話題は、また明日以降となるが、この週末は作曲に没頭したいので、続きは来週になるかもしれない。


「Raspberry Pi日記」トップに戻る