Raspberry Pi 日記 (part3)
長嶋 洋一
2013年7月11日(木)
唯一、今月の予定表に何も書かれていない日である。 朝、研究室に出てみると、ウイーンでの ISPS2013のスケジュール が届いていた。 来週にはSketching2013だが、いよいよ「その次」も起動してきたようだ。 これは暫定版スケジュールで、正式版は来週にWeb公開されるというが、なんと今回のProceedingsは880ページにもなるのだという。 そんな重たいもの受け取って、ウイーンの後でブダペスト→プラハ→リンツと移動するのだろうか(^_^;)。もうSketchingに行くまで1週間となったので、ぼちぼち持参するMacBookAirでの動作確認を含めて、「何を持参するか」を確定させいく必要がある。 Raspberry Pi日記(part2) の「2013年6月17日(月)」のところで、「これが今後1-2ヶ月、夏までのメインターゲットとなる」として列記していたToDo項目のうち、いくつかは完全に到達(^_^)して、いくつかは手付かずである。 無事に完了してしまったものとしては「Pythonを走らせる」「インブレス本」「Blink(1)の稼働」「SUACboardと接続」「OSCの稼働」などがある。 そこでまず、priorityの高いものを上げて、このToDo項目を以下のように改訂してみた。
このリストの最初にある「3台のRaspberry PiとホストMac、の計4台で相互にOSC通信する環境を作る」についてちょっと考えてみると、これまでの延長で言えばホストのMacに3つのターミナルウインドウを開いて、3台のRaspberry Piにそれぞれsshでログインして、ホストMac上で作ったPython/CプログラムをrcpでそれぞれのRaspberry Piに転送して実行させる・・・という流れである。 しかしこれは、ホストMacと1台のRaspberry Piであればともかく、多数のRaspberry Piがテキスト画面のインターフェースでは、面倒でやってられないのだった。 Maxが便利なのは、マウス操作でパッチ内のスライダーとかボタンを操作して、またメッセージ表示もグラフィックなスライダーやダイヤルや動的グラフなどで、一目瞭然に「見える」のがメリットなのである。
- 3台のRaspberry PiとホストMac、の計4台で相互にOSC通信する環境を作る
- Raspberry Piと他システムとでXBee通信する
- GPIOポートに外部A/Dコンバータを接続する (ふーみん本)
- Raspberry Piと他システムとでMIDI通信する (ふーみん本)
- オーディオインターフェースを稼働させる (ふーみん本)
- Webカメラを稼働させる (ふーみん本/CQ本)
- PureDataを稼働させる (ふーみん本)
- Raspberry PiにWebサーバを稼働させてCGIを提供する
これは過去に、 Processing日記(part4) の「2011年6月12日(日)」のあたりでやった以下の実験や
SuperCollider日記(part6) の「2011年8月18日(木)」のあたりでやった以下の実験でも明らかで、MaxとProcessingとSuperColliderとの連携の実験や動作確認に、グラフィックなインターフェースは不可欠なのだ。
そこで「3台のRaspberry PiとホストMac、の計4台で相互にOSC通信する環境を作る」のための道具立てとして、せっかく既にホストMacから3台のRaspberry PiにVNCで接続できているので、VNC越しのRaspberry Piデスクトップのグラフィクスに表示したりインターフェースを置けないかどうか、調べてみる事にした。 あくまで基本方針として、Raspberry Piにそれぞれ専用のモニタやキーボード/マウスは繋がないで、VNC越しにやりとりしたいのである。
いつものようにYAHOO.COMに行って「graphic Raspberry Pi」で検索すると、 このようなページ があった。 たった35ドルのRaspberry Piではあるが、以下のような枠組みで、グラフィクスのソースコードを提供するのだという。 あくまでオープンソース文化に乗るので、いろいろなオープンソース・ライセンスを活用しまくりである。
またYAHOO.COMに行って「graphics python」で検索すると、多数のヘビの写真が並ぶ(^_^;)だけでなくて、 本命のこのページ が出て来た。 当然ながらPythonでグラフィックは完備しているのであるが、これがパソコンでなくRaspberry Piでどこまで実現されているか、を調べるのが当面の目標となる。 また、同じ「graphics python」の検索では、 こんなページ には、まさにズバリ「Simple Graphics Library: graphics.py」なんていうPythonプログラムもあった。 そして このページ のタイトルも「2D and 3D Graphics in Python」とソソラレルものだが、少なくともこのページに「Raspberry Pi」というタームは存在していなかった。 とりあえずは、この3つのページから探っていこう。
このページ はちょっと教条的で圧倒されたので(^_^;)、まずは このページ からスタートすることにした。 ページのタイトルは「Python Programming: An Introduction to Computer Science」であり、要するにこの研究者はこのタイトルの本も出版しているのだった。 肝心の graphics.py とともに、 PDF版リファレンス、 Web版リファレンス も完備していて、至れり尽くせりである(^_^)。 そこでまず、まったく中身を見ないまま(^_^;)、ゲットした graphics.py をRaspberry Pi63号機に転送して、さらにVNCでウインドウを開けて、「python ./test.py」とやってみると、ちょっと起動に時間がかかったものの、なんと以下のようにちゃんと別ウインドウが現れて、さらにそのウインドウ内をマウスクリックすると表示が変化した。さすがである。
上の状況で、VNCのターミナルから「コントロール+Z」で強制終了させると、動作は止まったが開いたウインドウはそのままであった。 この残骸ウインドウはマウスでつまんで移動できるが、ターミナルウインドウと重ねてから手前に持ってくるとウインドウ内が食われて消えている、という幽霊状態だった(^_^;)。 そしてターミナルで「ps ax」でまだ残っていたプロセスIDを明示的に「kill -9」で殺すと、残骸の幽霊ウインドウも奇麗に消滅した。 また、別に開いていたMacのターミナル画面から無理矢理に起動してみると、以下のようにエラーが出た。 これは当然で、テキスト画面からグラフィックは起動できないのである。
段取りがクリアになったので、当面はこの「Simple Graphics Library: graphics.py」で遊ぶことにした。 上記の このページ の中にあった Flying High: Hobbyist OpenGL from Python というページをチラッと見たら、もの凄く勉強になりそうだったが、ここはグッと堪えていこう。 まずはいつものように、「test.py」を最少限まで簡素化して、必要な要素だけ残し、これまでに動いたものをうまく組み合わせていけば・・・という作業である。Last login: Thu Jul 11 06:59:41 on console nagasm-Mac-mini:~ nagasm$ ssh pi@172.16.65.63 pi@172.16.65.63's password: Linux raspberrypi 3.6.11+ #456 PREEMPT Mon May 20 17:42:15 BST 2013 armv6l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Jun 24 13:28:40 2013 pi@raspberrypi ~ $ rcp nagasm@172.16.65.31:Desktop/test.py . Password: test.py 100% 27KB 27.2KB/s 00:00 pi@raspberrypi ~ $ ls Desktop SimpleOSC blink_autorun pyOSC pyusb-1.0.0a3 GPIO_clear bcm2835-1.25 null python_games test.py RPi.GPIO-0.1.0 blink1-tool ocr_pi.png pyusb-1.0.0-a1 twilight.png pi@raspberrypi ~ $ python ./test.py Traceback (most recent call last): File "./test.py", line 170, in_root = tk.Tk() File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__ self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.TclError: no display name and no $DISPLAY environment variable pi@raspberrypi ~ $ そして夕方まで頑張ったが、あとわずか(体感)というところで完成せずに一日が終わった(^_^;)。 過去にはもう少し頑張ったところだが、自宅で餌やりを待っているハムスターのための帰宅は日課なのである。 マル一日、あれこれ試行錯誤でほぼプログラミングだけ数時間、というのはなかなかに幸せな時間となった。
「Raspberry Pi日記」トップに戻る