小嶋秀樹 | 授業情報 | 研究室
日本語 | English
Raspberry Pi 準備編

シングルボードコンピュータ Raspberry Pi を活用して,Unix (Linux) が動作する小型パソコンを作ります.この準備編では,Raspberry Pi を無線でリモートログインできるパソコンに仕立てます.(入門編では C 言語 + GTK によるアプリ開発,応用編では LED やスイッチの接続や,文字表示(キャラクタ液晶ディスプレーを利用)やグラフィック表示(OLED やカラー液晶ディスプレーを利用)などにも取り組みます.)

Raspberry Pi (Model A+) Raspberry Pi (Model B) Raspberry Pi (Model B+)

Raspberry Pi には,Model A, Model A+ (上図左), Model B (上図中), Model B+ (上図右) と,最新の Raspberry Pi 2 Model B (以下 Model 2B; 見た目は Model B+ とほぼ同じ) の4種類があります.ここでは例として Model B を扱いますが,他の種類についてもほぼ同じようにプログラミングや配線を行うことができます.なお,Model A+/B+/2B をお使いの方は,SD カードが microSD カードに変更された点,RCA コネクタからのビデオ出力の代わりにヘッドフォン端子(4極)からのビデオ出力となった点,そしてピンヘッダ P1 に新しく 14 本の端子が追加された点(1〜26 番ピンは変更なし)と P5 が削除された点に注意してください.Model A+ は,Model A 同様にメモリが 256MB(Model B/B+ は 512MB)の点と,USB 端子が1つになり,有線イーサネット端子が無くなった点を除けば,Model B+ と同等であると考えてよいでしょう.

これから新しく Raspberry Pi を入手するのであれば,Model 2B (Raspberry Pi 2 Model B) あるいは Model A+ をオススメします.Model 2B は,消費電力は大きめですが,Cortex-A7 クアッドコアと 1GB のメモリは,大きなディスプレー上でデスクトップアプリを快適に動かせます.一方,消費電力を抑えたい組込み用途には,よりコンパクトな Model A+ が適しているでしょう.

必要な素材は,Raspberry Pi (Model B) 本体のほか,SD メモリカード(SDHC Class 10 で 8〜32GB 程度;Model A+/B+ の場合は microSD カード)と電源供給用の USB ケーブル(A〜micro-B),そして無線 LAN の USB アダプタで.全部で 5,000円位で揃うでしょう.また設定作業用として HDMI 接続またはコンポジット信号接続で使えるディスプレーとケーブル,USB 接続のキーボードが必要ですが,LAN 設定後はパソコンからリモートログイン(SSH または画面共有)すれば,これらは不要になります.

SD card USB cable USB Wifi

なお,Raspberry Pi には USB スロットが2つしかありません.Wifi とキーボードとマウスを同時使用したい場合は,USB ハブ(キーボードにハブ機能があればそれ)を利用してください.

準備編(1):起動イメージを SD カードに焼き込む

ここでは Devian ベースの Linux である Rasbian Wheezy をダウンロードして,SD カードに焼き込みます.この SD カードには,Linux オペレーティングシステムだけでなく,ホームディレクトリなども置かれます.いわば「ハードディスク」の代わりです.

Rasbian Wheezy は,Raspberry Pi / Downloads のページにアクセスし,Operating Systems Images の Raspbian の欄にある "Download ZIP" ボタンから最新のイメージをダウンロード・解凍してください."2015-02-16-raspbian-wheezy.img" のようなファイル名になります.

Mac の場合: ターミナルを立ち上げて,以下の手順で焼き込みます.SD カードスロットのない Mac の場合は,適当なアダプタ(USB 接続)を使ってください.なお,くれぐれも,Mac 本体のハードディスク(たぶん /dev/disk0s?)を上書き消去してしまうことのないように気をつけてください.

mac$ df -h
この結果表示を見てから SD カードを挿入する.
mac$ df -h
結果表示の変化を見る.
新しく増えた項目が SD カードである.
mac$ sudo diskutil unmount /dev/disk1s1
SD カードに対応したデバイスをアンマウントする.
mac$ sudo dd if=2015-02-16-raspbian-wheezy.img of=/dev/rdisk1 bs=1m
/dev/disk1s1 ならば /dev/rdisk1 のように指定してイメージを焼き込む.
焼き込みには 2〜5分かかるのでガマン.
mac$ sudo diskutil unmount /dev/disk1s1
焼き込みが終わったらアンマウントして取り出す.

Windows の場合: Windows での焼き込みには Win32 Disk Imager を使うとよいでしょう.作業の仕方は,Win32 Disk Imager の解説を参照してください.PC に SD カードのスロットがあれば,新しい SD カードを差し込むだけで,Win32 Disk Imager が認識するはずです.くれぐれも焼き込み先が SD カードであることを確かめてから "Write" ボタンを押してください.やはり 2〜5分かかります.

Win32 Disk Imager
準備編(2):動作確認と初期設定

準備編(1)で用意した SD カードを挿入し,ディスプレー(HDMI またはコンポジット),キーボード(USB)を接続します.(HDMI を利用する場合は,Raspberry Pi の電源を入れる前にディスプレーと接続しておいてください.)

【電源投入】

電源は micro-USB 端子に与えます.パソコンの USB 端子から電源供給してもよいし,適当な AC アダプタを使っても構いません.Raspberry Pi に接続した USB 機器にもよりますが,700〜1,000mA 程度の電流が流れますので,AC アダプタの利用をおすすめします.なお,Raspberry Pi に電源スイッチはありません.micro-USB 端子に電源(パソコンまたは AC アダプタ)を接続することで起動します.

【初期設定】

起動時にはディスプレーにさまざまな情報が表示されます.起動フェーズが終わると,raspi-config という初期設定画面(背景がブルー)が現れます.カーソルキー・タブキー・エンターキーを使って操作してください.

推奨する設定は以下のとおりです.(raspi-config のバージョンによっては,メニュー項目などが若干変わるようです.)

これらの設定が終了(Finish)したら,再起動(リブート)することを促されますので,再起動してください.これが2回目の起動となりますが,これ以降,以下のようにユーザ名とパスワードを入力してログインすることになります.

kozPi login: pi
Password: raspberry (初期設定で入力したパスワードを入れること)
pi@kozPi ~ $ _

ユーザ名 pi でログインすると,pi@raspberry:~$ のようなプロンプトが表示され,コマンド入力待ちになります.デフォルトのプロンプトは「ユーザ名@ホスト名 ワーキングディレクトリ $」です."~" はホームディレクトリを意味します.なお,初期設定をやり直したい場合は,sudo raspi-config と打ち込むことで初期設定画面を呼び出すことができます.

ここまで確認できたら,Raspberry Pi を一度シャットダウンしてみましょう.

pi@kozPi ~ $ sudo halt 

あるいは sudo shutdown -h now と入力しても同じ効果が得られます.コマンド入力後,Raspberry Pi 上の ACT と書かれた緑の LED が(しばらく点滅した後)消灯します.これで電源ケーブル(micro-USB)を抜いてください.なお,Raspberry Pi に電源スイッチはありません.

準備編(3):無線 LAN とリモートログインの設定

無線 LAN で別のパソコンから Raspberry Pi にリモートログインできるようになれば,ディスプレーも不要になります.ここでは,そのための設定作業をします.

【USB 無線 LAN の利用】
USB Wifi

使用する USB 無線 LAN アダプタは,右の写真にあるような小さな「ドングル」です.1,000円程度で手に入ります.Bluetooth ではなく Wifi (IEEE802.11n/g/b) 対応のものであれば,たいてい動作すると思われます.

まず,Raspberry Pi の電源を落とした状態で,USB 無線 LAN アダプタとキーボードを USB コネクタに差し込み,電源ケーブルを接続して起動します.

つぎに,エディタ vi あるいは nano を使って,つぎの2つのファイルを編集します.vi の使い方については「vi を使い倒そう」の第3章を参考にしてください.nano は画面下段に制御コマンドの一覧(一部)が表示されます.(より高機能な vim というエディタもあります.sudo apt-get install vim でインストールできます.さらに高機能な emacs というエディタもあり,同じようにインストールできます.)

pi@kozPi ~ $ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
pi@kozPi ~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="MyNetwork"
    psk="MyPassPhrase"
}

ここでは,dhcp による自動割当アドレスを Raspberry Pi の無線 LAN アダプタに与えるようにしています.多くの場合,無線 LAN に接続するにはパスフレーズ(パスワード)が必要です.それを与えるのが wpa_supplicant.conf というファイルです.学校と自宅など2カ所以上のネットワークを設定するには,wpa_supplicant.conf の中で network={...} を必要な数だけ並べ,その中に SSID とパスフレーズを記述してください

パスフレーズの記述には,上にあげたように平文でベタ書きするのが簡単ですが,セキュリティ上は問題がありそうです.その場合は,以下の手順で暗号化したものを使います.引用符が付かないことに注意してください.

pi@kozPi ~ $ wpa_passphrase MyNetwork MyPassPhrase
network={
        ssid="MyNetwork"
        #psk="MyPassPhrase"
        psk=7fe51e03a7ee3e0036d1aed3b53521caf80d1e21409589bcdbffa5470573b647
}

これを wpa_supplicant.conf に追加します.そのためには以下のような手順に従うとよいでしょう.(">>" は「出力結果をファイル末尾に追加する」という意味をもちます.)

pi@kozPi ~ $ sudo bash
root@kozPi:~# wpa_passphrase MyNetwork MyPassPhrase >> /etc/wpa_supplicant/wpa_supplicant.conf
root@kozPi:~# exit
pi@kozPi ~ $ _

これができたら,wpa_supplicant.conf をエディタで開き,パスフレーズ情報が追加されたことを確認し,またセキュリティ向上のため平文のパスフレーズ(#psk="..." の行)を削除しておきましょう.

pi@kozPi ~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="MyNetwork"
        psk=7fe51e03a7ee3e0036d1aed3b53521caf80d1e21409589bcdbffa5470573b647
}

設定が済んだら Raspberry Pi を再起動(sudo reboot)してください.いま見えているネットワークに自動接続されるはずです.

以後,この Raspberry Pi には IP アドレスが与えられ,そのアドレスを使って他のコンピュータからアクセスすることが可能になります.自分の IP アドレスを調べるには,"ifconfig" を使うとよいでしょう.

pi@kozPi ~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:03:8e:e1
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1104 (1.0 KiB)  TX bytes:1104 (1.0 KiB)

wlan0     Link encap:Ethernet  HWaddr 34:76:c5:32:0f:b6
          inet addr:10.0.1.102  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33540 errors:0 dropped:319 overruns:0 frame:0
          TX packets:5084 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:49243190 (46.9 MiB)  TX bytes:537625 (525.0 KiB)

pi@kozPi ~ $ _

上の例では,10.0.1.102 という IP アドレスが,この Raspberry Pi に与えられていることがわかります.ためしに,パソコン(ターミナル)からこのアドレスに ping を打ってみましょう.以下のように打ち込んでみてください.接続を確かめることができます.(適当なところで Control-C を打って止めてください.)

mac$ ping 10.0.1.102
PING 10.0.1.102 (10.0.1.102) 56(84) bytes of data.
64 bytes from 10.0.1.102: icmp_req=1 ttl=64 time=0.193 ms
64 bytes from 10.0.1.102: icmp_req=2 ttl=64 time=0.162 ms
64 bytes from 10.0.1.102: icmp_req=3 ttl=64 time=0.157 ms
64 bytes from 10.0.1.102: icmp_req=4 ttl=64 time=0.158 ms
64 bytes from 10.0.1.102: icmp_req=5 ttl=64 time=0.158 ms
^C
--- 10.0.1.102 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
mac$ _
【Avahi デーモンのインストール】

自分のパソコン(Mac・Windows など)から無線 LAN 経由で Raspberry Pi にリモートログインします.このとき,"kozPi" のような Raspberry Pi につけたホスト名を使ってアクセスできると便利です.それを可能にするのが Zeroconf という仕組みで,ここでは,それを実装したデーモン(常駐プログラム)のひとつである Avahi を Raspberry Pi にインストールします.

pi@kozPi ~ $ sudo apt-get update
pi@kozPi ~ $ sudo apt-get install avahi-daemon

インストールが終了すれば,avahi-daemon はすぐに動作を始め,これ以降,リブート後も avahi-daemon は自動的に実行されるようになるはずです.

同じ SSID をもつ無線 LAN 内であれば,「ホスト名.local」という名前で,この Raspberry Pi にアクセスできます.たとえば kozPi.local という名前です.

Mac の場合: Mac には Zeroconf を実装した Bonjour が標準で組み込まれていますので,何も作業する必要はありません.コンソールから ping して,接続可能であることを確かめてみてください.

mac$ ping kozPi.local
PING kozpi.local (10.0.1.102): 56 data bytes
64 bytes from 10.0.1.102: icmp_seq=0 ttl=64 time=9.318 ms
64 bytes from 10.0.1.102: icmp_seq=1 ttl=64 time=189.618 ms
64 bytes from 10.0.1.102: icmp_seq=2 ttl=64 time=620.329 ms
64 bytes from 10.0.1.102: icmp_seq=3 ttl=64 time=132.339 ms
64 bytes from 10.0.1.102: icmp_seq=4 ttl=64 time=156.149 ms
^C
--- kozpi.local ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.318/221.551/620.329/208.481 ms
mac$ _

Windows の場合: Windows には Zeroconf の機能が組み込まれていないため,別途インストールする必要があります.Apple の Bonjour(Zeroconf の元祖)を Windows に導入するとよいでしょう.Bonjour Print Service for Windows(Zeroconf を実装したもの)を Windows にインストールしてください.コンソールから ping すると次のようになります.

C:\Users\myName>ping kozPi.local

kozPi.local [10.0.1.102]に ping を送信しています 32 バイトのデータ:
10.0.1.102 からの応答: バイト数 =32 時間 =5ms TTL=64
10.0.1.102 からの応答: バイト数 =32 時間 =176ms TTL=64
10.0.1.102 からの応答: バイト数 =32 時間 =200ms TTL=64
10.0.1.102 からの応答: バイト数 =32 時間 =428ms TTL=64

10.0.1.102 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 5ms、最大 = 428ms、平均 = 202ms

C:\Users\myName>

もし ping がうまく通らない場合は,Windows ファイアウォールでブロックされていることが考えられます.その場合は, コントロールパネルから Windows ファイアウォールを選択し,UDP 5353 が通るように設定してください.

hostname.local で繋がらない場合: 無線 LAN 環境によっては,avahi-deamon がうまく起動しない場合があるようです.一度 Raspberry Pi を再起動してから "sudo /etc/init.d/avahi-daemon status" と打ち込んでください.これて "Avahi mDNS/DNS-SD Daemon is not running" と表示される場合は,Avahi がうまく起動していません.その場合は以下のように設定ファイルを書き換え,再起動してください.

pi@kozPi ~ $ sudo vi /etc/default/avahi-daemon
# 1 = Try to detect unicast dns servers that serve .local and disable avahi in
# that case, 0 = Don't try to detect .local unicast dns servers, can cause
# troubles on misconfigured networks
AVAHI_DAEMON_DETECT_LOCAL=0
【SSH によるリモートログイン】

自分のパソコン(Mac・Windows など)から無線 LAN 経由で Raspberry Pi にリモートログインします.そのために利用するプロトコルが SSH (secure shell) です.

Mac の場合: ターミナルを立ち上げて,以下の手順で Raspberry Pi に SSH 接続(リモートログイン)することができます.パスワード入力行以降(青字部分)は Raspberry Pi とのやりとりになっています.

mac$ ssh pi@kozPi.local
The authenticity of host 'kozpi.local (10.0.1.102)' can't be established.
RSA key fingerprint is 96:2a:3d:6d:2b:3a:c9:6b:81:61:7b:9a:67:5b:a3:0a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'kozpi.local,172.30.252.51' (RSA) to the list of known hosts.
pi@kozpi.local's password: *******
Linux kozPi 3.18.7+ #755 PREEMPT Thu Feb 12 17:14:31 GMT 2015 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: Sun Feb 22 23:46:57 2015
pi@kozPi ~ $ _

ログアウトするには logout あるいは exit と打ち込んでください.ログアウトしても Raspberry Pi は動作しつづけます.ですから,再度 SSH でログインできます.同じパソコンからであれば,2回目以降のリモートログインは青字部分だけが表示されます.Raspberry Pi をシャットダウンするには,ログインしてから sudo halt または sudo shutdown -h now です.

Windows の場合: いくつかの方法がありますが,Tera TermPuTTY などの端末ソフトを利用するのがよいでしょう.新規の接続として Raspberry Pi のホスト名(あるいは IP アドレス)を登録し,ユーザ名 pi とパスワードを入力することで,リモートログインが可能になります.あとは Mac の場合と同じです.

Pi on TeraTerm
準備編(4):その後の仕上げ
【ソフトウェアの更新】

ログイン後の最初の作業として,オペレーティングシステムを含むインストール済みのソフトウェアを最新版に更新します.いわゆる「アップデート」です.安定した(自宅などの)インターネット接続のもとで,以下の作業をしてください.

pi@kozPi ~ $ sudo apt-get update
pi@kozPi ~ $ sudo apt-get upgrade

ソフトウェアの更新には数分かかります.終了すると,pi@raspberry:~$ のようなプロンプトが表示され,再びコマンド入力待ちになります.

【X Window デスクトップの表示】

X Window というウィンドウシステムを起動します.マウスが無い場合はこの項目をスキップしてください.X Window を起動するには startx と打ち込みます.

pi@kozPi ~ $ startx

すると下図のように,Windows や Mac OS X と同じようなデスクトップ画面がディスプレーに表示されます.マウスも使えます.背景画像(中央)はラズベリーとなっています.

このデスクトップは LXDE (Lightweight X11 Desktop Environment) とよばれるデスクトップ環境で,X Window System という GUI フレームワークの上で動作し,その X Window は Linux (Rasbian Wheezy) の上で動作しています.画面上端のメニューバーには,Raspberry Pi メニュー,Epiphany ウェブブラウザ,ファイルマネージャ,LXTerminal などのアイコンが並んでいます.

上図は Epiphany ウェブブラウザと LXTerminal を起動した様子です.X Window を終了するには,デスクトップ右下にある赤い「電源ボタン」を押し,「ログアウト」を選択してください.これでキャラクタ端末画面に戻ります.もう一度 startx と打ち込めば,新しく X Window のセッションが開始され,LXDE のデスクトップが表示されます.

【デスクトップ画面の共有】

X Window のデスクトップを無線 LAN 経由で別パソコン(Mac や Windows など)で表示・操作できるようにします.そのために Raspberry Pi 上で動作させるのが,tightvncserver というソフトウェアです.VNC (virtual network computing)という技術標準を使っています.以下の手順で VNC サーバのインストール(無料)と初期設定をしてください.設定するパスワードは別パソコンから画面共有するときに使います.ログインパスワードと同じでよいでしょう.デスクトップのサイズ指定(下線部分)は必要に応じて調整してください.

pi@kozPi ~ $ sudo apt-get install tightvncserver
pi@kozPi ~ $ vncserver :1 -geometry 1024x768 -depth 24
初回のみパスワードを設定する.

別パソコンから Raspberry Pi のデスクトップ画面を表示・操作するには,VNC に準拠したクライアントが必要です.以下の手順で設定し,Raspberry Pi 上で動作している tightvncserver と接続してみてください.

Mac からの画面共有: 標準で VNC クライアントが用意されています.Finder メニューバー(デスクトップ背景をクリックしたときに画面上端に現れるバー)から「移動 (Go)」メニューを引き出し,「サーバに接続 (Connect to server...)」を選択します.下図のようなダイアログが現れるので,プロトコル名 vnc に Raspberry Pi のホスト名(あるいは IP アドレス),そしてポート番号 5901 を加えて(たとえば "vnc://kozPi.local:5901" を入力して)接続してください.サーバ側で設定したパスワードを入力すれば,デスクトップを表示・操作できるようになります.(後述する「Windows から画面共有」と同じ VNC クライアント RealVNC Viewer を使うこともできます.)

VNC client on mac VNC client on win

Windows からの画面共有: RealVNC Viewer(無料)をインストールします.起動すると上図のようなダイアログが現れるので,Raspberry Pi のホスト名(あるいは IP アドレス)にポート番号 5901 を加えて接続してください.サーバ側で設定したパスワードを入力すれば,デスクトップを表示・操作できるようになります.

【デスクトップ端末と日本語入力】

LXTerminal: メニューバーに LXTerminal のアイコンがあります.LXTerminal は端末プログラムで,ちょうど別パソコンから Raspberry Pi に ssh でリモートログインした場合と同じように,キーボードを入力デバイスとして Raspberry Pi を操作したり,プログラミングしたりすることができます.(メニューバーに LXTerminal アイコンがない場合は,画面左上の「Raspberry メニュー」>「アクセサリ」>「LXTerminal」を選択してください.)

日本語入力: 日本語入力には,インプットメソッドをインストールする必要があります.以下の手順で,iBus/Anthy をインストール・設定してください.

pi@kozPi ~ $ sudo apt-get install ibus-anthy

インストールが完了したら,メニューバー左端にある「Raspberry Pi メニュー」から「設定 (Preferences)」>「iBus の設定 (iBus Preferences)」を選択します.「インプットメソッド (Input Method)」のタブを開き,「インプットメソッドの選択 (Select an input method)」というプルダウンメニューから「日本語 / Anthy (Japanese / Anthy)」選択し,「追加 (Add)」します.これで完了です.

日本語の入力には,デフォルト状態では,[Control]+[Space],日本語キーボードであれば「半角/全角」あるいは「漢字」キーを押すことで可能になり,同じキーを押すことで半角英数入力に戻ります.