Raspberry Pi 日記 (part2)

長嶋 洋一


2013年6月14日(金)

この日は2-3限に、4回生の「メディア造形総合演習」の中間進捗報告会があったが、それを挟んで1限と3限で、遂に「しゃみーず」のためのシステムの部分が完成してしまった(^_^)。 写真だけでなく、今後の活用のために、技術的な情報を全てまとめて、わざわざこのために、何もなく作っていた回路図も描いてスキャンした。 これである

そしてYouTube動画まで上げた後でまだ5限の時間が余っていたので、昨日到着した これ を開梱してみることにした。 以下のようにアッサリとした基板とコネクタだけだが、これによってRaspberry Piは現実世界と結びつく、まさに「Raspberry Pi物理コンピューティング」のインターフェースなのである。

まぁ、Raspberry Pi用の汎用インターフェース基板というだけでこの基板だけでは何もしないのだが、いきなりコネクタをはんだ付けする前に、せっかくなので このサイト のリンクをチェックする事にした。 とりあえずこの拡張基板は「Slice_Pi基板」と呼ぶことにしよう。

するとさっそく、ページの下の方の「Documentation」のところから、 Slice_Piマニュアル(PDF) をゲットしたので印刷した。 さらにリンクとして、以下ようなページがある事が判明した。

長期的な展望としては、Raspberry Piで物理コンピューティングをするのに、Pythonだけでプログラミングするつもりは無いが、とりあえずはPythonでやることになるのだろう、とここまで(山口往復の新幹線内とかで)Pythonを勉強してきたので、まさに絶好のタイミングである(^_^)。 とりあえず、今日はあと1時間ほどなので、上記の5つのリンク先をざっと眺めてメモとして残すことにした。 重要そうなところを後回しにしているので、順不動である。

Build document のページは、単に「Slice_Pi基板」のアップ写真が並び、あとは 回路図 が置かれているだけのPRページだった。 ちゃんとDIP間隔のユニバーサル基板パターンだけでなくて、XBeeの2mm間隔のパターンも載っているので、ここは「Raspberry PiでXBee」が超カンタンに実現できるのだ。

review of the board のページは、「Slice_Pi基板」にXBeeを載せて、ここからRaspberry PiのファームウェアをWiFiでアップロードする、という流れを紹介していた。 しかし、既に研究室のRaspberry Piは固定IPアドレスを割り振り、VNC経由で自在にファームウェアを吸い上げることも出来るので、ここでの記事で参考になるとすれば、XBeeとのやりとり部分ぐらいになるだろう。

review of the board のページはこのメーカのWebではなくて、Raspberry Piの拡張基板のいろいろを紹介しているプログであり、その最初の例として「Slice_Pi基板」が挙げられている、というだけである。 以下の写真でコネクタの取り付け方向が判る、という以外にメリットは無いので、今後ここをアクセスする事は無いだろう。

そして残りの2つのWebページは重要である。 Getting started with Raspberry Pi GPIO and Python ではまず、「Installing RPi.GPIO」で、「apt-get」でなく、Unixのtar.gzファイルをゲットして、これを解凍して、「sudo python setup.py install」ということでPythonで記述されたセットアッププログラムでRPi.GPIOがインストールできるらしい。 これはなかなか楽しそうである。(^_^)

Raspberry Pi GPIO Inputs in Python のページはその続きのようで、PythonでLEDを点滅させ、入力について解説して、入出力のPythonサンプルまで行くようである。 しかし、既にPythonを見慣れているので(まだ全くプログラミングしていないが(^_^;))、最後にあった以下のプログラムはとても良く読める。 この程度のプログラムではまだ何も出来ないのだが、入口としてはこれでほぼ完備、ということのようだ。

#!/usr/bin/env python
from time import sleep
# get the GPIO Library
import RPi.GPIO as GPIO
 
# setup some names references to the LED's and buttons
# red     = pin 18
# yellow  = pin 16
# green   = pin 15
# blue    = pin 13
 
# using an list to hold the led numbers
leds = [13, 15, 16, 18]
# the input buttons
up = 12
down = 11
 
# setup the pins as output and input as needed
# looping over the list 
for n in leds:
    GPIO.setup(n, GPIO.OUT)
 
GPIO.setup(up, GPIO.IN)
GPIO.setup(down, GPIO.IN)
# turn off all but the blue LED
GPIO.output(leds[3], True)
GPIO.output(leds[2], True)
GPIO.output(leds[1], True)
GPIO.output(leds[0], False)
 
#state trackers
level = 0
oldlevel = level
 
while 1:
    if GPIO.input(up):
        #up button pressed
        if level < 3:
            level += 1
    elif GPIO.input(down):
        #down button pressed
        if level > 0:
            level -= 1
    if oldlevel != level:
        # turn off last led and turn on next one
        GPIO.output(leds[oldlevel], True)
        GPIO.output(leds[level], False)
        # update state tracker
        oldlevel = level
        # sleep for a bit so button press is counted only once
        sleep(1)
この週末は、明日はいよいよ「40虎」(オープンキャンパスに向けた新入生プロジェクト)の勉強会「SUAC探検」などがあり、晩にもお楽しみの予定があるので進めないが、来週から、ぼちぼちRaspberry Piに戻ることにしよう。

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