Raspberry Pi 日記 (part3)

長嶋 洋一


2013年8月8日(木)

前日は「立秋」だというのに、日本中に猛暑日宣言の出た暑い日である。 とりあえず、昨日の「41虎」を このように 上げてみた。 初音ミクの歌声をWAVにエクスポートしたデータが頭切れになっていたのはご愛嬌である(^_^;)。 また、学生がやってくる前に、顕微鏡スコープのホストPCを、Windows98ノートからDELLのWindowsXPノートに切り換えておいた。 なんせWindows98だと、最近のUSBメモリを挿しても認識せず、いちいちイーサネットを挿してFTPしないといけないのである。

そして上のように、アルスエレクトロニカから今年のフェスティバルに関するニュースが届いた。 いつものようにアレ系のいかにもな画像(^_^;)であるが、「生命を合成する」という、なかなかエキセントリックなテーマである。 今年の欧州ツアーの最後にはアルスエレクトロニカにも行くので、ここも要チェックである。

Raspberry Piはバッテリで動かすには電力食いなので、去年の欧州ツアーの時のPropeller OLEDモジュールのように、持参してあちこちでプログラミング、というのには適しない。 一昨年のイギリスのように、またまた久しぶりにProcessingとSuperColliderの残りのお勉強を発掘する、というのは最後の手として残っている。 あとは、せっかくインストールしたもののまだ全然触っていないPureDataである。 しかしMax歴が20年を越える身としては、ここでMaxと枝分かれしたPdにあまり深入りする気になかなかなれない、というのがネックである。 Raspberry PiではPdだけが動く、というのが唯一のモチベーションなのである。

明日の午後には「しゃみーず」が撮影スタジオで記録ビデオを撮影するのを41虎と手伝う、という予定があるが、今日は41虎だけで何もなく、41虎は学生たちが自主的に進める方向性が見えてきたので、ここはマル1日、Sketching2013以降ノータッチだったRaspberry Piと久しぶりにじっくり取り組んで、モバイルWiFiルータも活用して、あれこれ「apt-get」するチャンスである。

まずは上のように、机に積み上げたままだったRaspberry Piを取り出して、以下のように最後の実験のXBee-WiFi通信のセットアップに並べてみた。 これを見ても何もピンと来ないのが、やや不安である(^_^;)。

途中で止まっていたのは「2013年7月15日(月)」のところだったのを日記を読み返して確認して、メインMacのデスクトップに実験中だった 「RaspberryPi_XBee_01.maxpat」と「test.py」 がある事を確認して、Raspberry Piの63号機にsshして「python ./test.py」を実行してみると、無事にMaxパッチのMaxウインドウに、「先頭に255」「その後の5文字が"hello"」という受信データが表示された。 これで、宿題だったハード障害の可能性は否定されて、ソフトから引き続きやっていける、と確認できた(^_^)。

この状態では、MaxのパッチはずっとXBeeのシリアルポートを叩いてモニタ(ポーリング)しているのに対して、Raspberry PiのPythonプログラムは1メッセージを送ったらもうオシマイになっている。 やはり、リアルタイムに双方向通信するシステムを構築しておきたいので、Maxから刻々とバリューを送って、それをRaspberry Piが返すのをMaxで確認する、という事になるだろう。 この実験に使っていたMaxパッチ「RaspberryPi_XBee_01.maxpat」の以下のサブパッチは、Propeller-OLEDで定義したプロトコルのためのもので、実はまだここでは稼働しておらず、Maxウインドウにはシリアル入力がそのままモニタされている。 つまり、MaxとRaspberry Piの両方から、このプロトコルを改めて定義する必要もある。

そしてMax側の「RaspberryPi_XBee_01.maxpat」を「RaspberryPi_XBee_02.maxpat」にリネームして、Raspberry PiのPythonプログラム「test.py」を、 このページ を参考にして、シリアル送信だけでなくシリアル受信も絡める、という実験をしてみて判明したのは、Raspberry PiはUnixであり、Pythonプログラムの「シリアル受信」のメソッドの部分で実際のシリアルデータを受信しているのでは無い、という事実だった。 Pythonプログラムで「while 1」などでシリアル受信をループさせる、というのは駄目なのである。

リハビリとは言え、ここまで判明するのに3時間ほどかかった(^_^;)が、Raspberry Piが外部からの情報を受けるのはイベントドリブンの記述が必須ということであり、そうなればこれはもう、「2013年7月12日(金)」のところでやったOSC経由、ということになる。 そこで作戦としては、 OSC通信の完成プログラム をベースにして、ここにXBeeのシリアル通信を加える、ということにした。

・・・そして1時間ちょっとで、上のように、「MacからOSCでRaspberry Piに情報伝送」→「Raspberry Piはグラフィカルにその値を表示」→「Raspberry Piは変化のあったデータを16進数としてXBeeからMaxに送信」というルートが無事に確立した。 詳しいフォーマットの整形は、Pythonの書式関係を忘却していたので省略であるが(^_^;)、これで双方向のインターフェースが開通、という意味では、一定の進展である。 ソースコードは「2013年7月12日(金)」とほとんど同じなのでここには再録しないが、 「RaspberryPi_XBee_02.maxpat」と「test.py」 である。

今日の「41虎」は このように 進んだこともあり、まずまずの進展となった。


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