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プログラミングのあれこれを勉強していこう。 まず最初のメイルは以下であった。・・・あらら、そうだったのかぁ(^_^;)。 sudoでやっていなかったかなぁ。 さっそくやってみると、以下のようにアッサリとBlink(1)が点灯した。さきほど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 chown root blink1-tool」でblink1-toolのオーナーをrootに、「sudo chmod 4755 blink1-tool」で実行権限を変更した。 これはしばらく使うかもしれないからである。 そして2限のゼミでは、M1のリュ君、3回生の土佐谷さんと森川さんの作品制作の進捗確認などを行った。 その後、以下の2本目のメイルに取りかかった。 「PythonでRaspberry Piに挿さったBlink(1)を制御」という事である。
上記の「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に入っていることを発見した。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のライブラリを ビルドする必要があると思います. これはこれから試してみます.・・・ところが以下のように(詳細は これ )、「pyusb-1.0.0-a1」と「pyusb-1.0.0a3」の両方で、ふーみんの提示した処理を行ったところ、別にエラーは出ないものの、うまく行かなかった。 まず、ふーみんの言う「blink1-demo.py」が見当たらないのである(^_^;)。 そして、以前にゲットした「blink1hid-demo.py」では、前回と同じエラーが出た。 さて困った。
そこでふーみんに「blink1-demo.pyが見当たらない」とメイルすると、速攻で以下が届いた。 さすがの師匠である。(^_^)
ということで、これは本来ならモバイル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」もゲットした。Macに落としていたものをRPiに転送した、という 記述があったので、既にあるのかと思っていました。 RPi上でゲットするのであれば git clone git://github.com/todbot/blink1.git で、他のものも含めて全部取ってきます。 上のコマンドで blink1/ というディレクトリに一式落ちてきますが、 その中の python/ にあるはずです。するとここで、さらに以下のふーみん情報が届いた。 これはなかなか悩ましい。(^_^;)#!/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)この意味では、Blink(1)はまだそれ自身にバグがあるカモというものだし、ツール等もまだまだ不完全なのかもしれない。 ・・・とメイルしたら、さらにふーみんから以下が届いた。 チャットに近いトラフィックである(^_^)。どうも、色々やっているとblink1hid-demo.py が動くようになったりすることが あるようで、必要なモジュールやデバイスの初期化、終了処理がおろそかな ところがあるのかもしれない気がしています。 先にblink1-tool で--on とか--off とかしてやるとblink1hid-demo.py が 動くようになることがあるかと思えば、それでもだめな時もあって、 なにか特定の処理をきちんと入れないとだめなのかもしれません。なるほど、これは決定的である。 「枯れていない」Pythonに付き合うつもりもなく、もともと、Pythonにあまり拘りたくないなぁ・・・と思っていたのであった。 ここは本命として、やはり、Cでやっていけばいいのであろう。python 関係は、今のところとりあえず動きます、という感じですね。 blink1/commandline/blink1-tool.c の // get a list of all devices and their paths あたりから下をみるとblink1-lib.so のAPIの使い方はわかるので、 それを使ってCで書いた方が幸せになれるかもしれません。 Blink(1)自体のバグというよりは、Pythonからデバイスを使いにいくときの コーディングが枯れてないんじゃないかという印象です。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」の作戦に切り換えて、 このような 感じで、ふーみんメイルにあった
の通りにやってみたものの、最後の1行はNot Foundで、以下の(1)のように捜しても見つからなかった。 そしてBlink(1)が挿さっている状態で「blink1hid-demo.py」を起動すると(2)のようなエラーが出て、Blink(1)を抜いて「blink1hid-demo.py」を起動すると(3)のようなエラーが出る、という状況は変わらなかった。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
夕方には、注文していたちょっと面白いブツが届いたりして、今日の作業はここまでとなった。 朝に届いていたふーみんメイルの3本目、「Cのライブラリについて」という話題は、また明日以降となるが、この週末は作曲に没頭したいので、続きは来週になるかもしれない。
「Raspberry Pi日記」トップに戻る