トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Raspberry Pi

Linuxdebian)が動いて安価に購入できる基盤むき出しのコンピュータ。
教育用に開発されたものでI/O端子があり、電子工作とか面白そう。

ハードの準備

LANポートのあるType BをAmazonで購入。
CPUはARM 700MHz、メモリは512MBという構成で、ストレージ(PCでいうところのHD)はSDカード、USB電源(スマホとかの1A電源)を別途用意する必要がある。
SDカードは相性があるようで、Transcendが無難な模様。本家のオンラインマニュアルによると最低でClass4 4GBの容量が必要となっている。
自分は本体とケース、SDカード32GBを購入。

  • Raspberry Pi Type B 512MB(本体) ・・・ 4,230円
  • Pi Tin for the Raspberry Pi - Pink(ケース) ・・・ 1,580円
  • Transcend SDHCカード 32GB Class10 UHS-I対応 ・・・ 2,300円

電源はauスマートフォン用で済ませる(700mA-3.5W以上あればOK 1A以上)。モバイルバッテリーの充電しながら給電できるタイプを使えば、UPSみたいに使えるかも(バッテリーの寿命は怪しいが)。

あと、手っ取り早く電子工作気分を味わうため

  • ハック!Raspberry Pi電子工作入門キット(ピンの抜き差しで配線可) ・・・ 1,640円
  • 格安PCボードで始める電子工作超入門(日経BP書籍) ・・・ 2,310円

も購入。追々試してみる。

金額的には1〜2万円で揃えられるわけだが、ただ単に「サーバーにして遊ぶ」ならヤフオクで旧タイプの中古Mac miniを購入したほうが良い(性能的、価格的にも)。

SDカードの準備

ここではRaspberry Pi用にモニターを用意せず、PCからLAN経由のSSH接続で操作することを前提に準備を進める。

Downloads | Raspberry Pi
http://www.raspberrypi.org/downloads

まずPCに

  • formatting tool(SDカード初期化ソフト)
  • RaspbianRaspberry Pi用のカスタムdebianのイメージ)
  • Win32DiskImager(RaspbianイメージをSDカードに書き込むソフト)

をダウンロードしておく。
※NOOBSはRaspberry Piにモニターやキーボードを接続しないと使えないので、ここでは無視。

  1. PCにformatting toolを解凍し、インストール。
  2. 同じくPCにSDカードを接続(カードリーダーが必要)。
  3. formatting toolを起動し、SDカードをフォーマット(ドライブを間違えないように)
  4. Raspbianを解凍し、.imgファイルを用意。
  5. Win32DiskImagerを解凍しWin32DiskImager.exeを実行、先に解凍した.imgファイルをSDカードに書き込む。

これだけで準備完了。
※別の.imgに変えたい場合、再フォーマットする必要はない。Win32DiskImagerで書き込み直すだけ。

本家からのraspbianダウンロードが目茶遅でイラッっと来た人は、JAISTからもダウンロードできる。

北陸先端科学技術大学院大学 | raspbian images
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/

なお、Fedora系が使いたい場合はPidoraになるが、ベースは現時点でfc18と古い。のちのちのupdateを考えるとRaspbianのほうが良さげ。

Raspbianへの接続

  1. Raspberry Piに先に用意したSDカードを挿入。
  2. PCのLANにRaspberry PiをLANケーブルで接続。
  3. Raspberry PiにUSB電源を接続(Raspbianが起動する)。

DHCPがRaspberry Piに割り振ったIPアドレスを調べて、PCのSSHクライアントから接続。
初期ユーザ、パスワードは

login as: pi
pi@192.168.0.x's password: raspberry

でログインできたらとりあえず一安心。
あとはRaspbian特有の設定と、debianLinux)の設定を行う。

Raspbianの設定

イメージを書き込んだばかりの初期状態、起動直後のリソースを確認。

$ free -m
             total       used       free     shared    buffers     cached
Mem:           437         53        383          0          9         23
-/+ buffers/cache:         20        416
Swap:           99          0         99

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          2.6G  2.0G  469M  82% /
/dev/root       2.6G  2.0G  469M  82% /
devtmpfs        211M     0  211M   0% /dev
tmpfs            44M  204K   44M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            88M     0   88M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  34% /boot

つづいて設定をいじる。

$ sudo raspi-config

1 Expand Filesystem
2 Change User Password
3 Enable Boot to Desktop/Scratch
4 Internationalisation Options
5 Enable Camera
6 Add to Rastrack
7 Overclock
8 Advanced Options
9 About raspi-config

初期設定でSDカード2.6GB分しか使わない設定になっているので、1番のExpand Filesystemを実行しておく。再起動すると、SDカードの容量まで使用領域を拡張してくれる。
ちなみに初期状態の拡張後(32GB)はこんな感じ。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           29G  2.0G   26G   8% /
/dev/root        29G  2.0G   26G   8% /
devtmpfs        211M     0  211M   0% /dev
tmpfs            44M  204K   44M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            88M     0   88M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  34% /boot

4番のInternationalisation OptionsよりChange TimezoneでAsiaのTokyoを選択。個人的には英語設定で十分なので、その他はそのまま。

7番のOverclockは700MHzから1000MHzが選べる模様。寿命がうんたらと表示されるので、長く遊びたいなら700MHzのままがよさげ。

最後に最新版にしておく。
そのまえにraspbianのリポジトリを近場に切り替え。

$ sudo vi /etc/apt/sources.list

#deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian/ wheezy main contrib non-free rpi
$ sudo aptitude clean
$ sudo aptitude update
$ sudo aptitude upgrade

リポジトリを近場にしてもwolfram-engineだけは本家にしかないようで、メッチャ遅い(汗)。

Get: x http://archive.raspberrypi.org/debian/ wheezy/main wolfram-engine armhf 10.0.0+2014012903 [219 MB]
:
20% [1 wolfram-engine 43.6 MB/219 MB 20%]             15.5 kB/s 3h 8min 46s

ちなみにwolfram-engineはWolfram Researchの教育用言語でWolfram Languageを走らせるためのエンジンらしい。
もしupgradeから除外したいなら

watanet Personal Side-C - パッケージのバージョンを固定する
http://wps.watanet.mydns.jp/2009/06/16/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B-ubuntu-pinning-etcaptpreferences

SDカードを長持ちさせるため、一時ファイルの保存先をRAMDISKにする設定を見つけた。

ロードバイクときどきiPad/Airなblog - Raspberry PiのSDカード書き込み回数抑制対策を行なってみた
http://blogs.yahoo.co.jp/beachinside/11965303.html

元々Raspberry PiのRAMは512MBしか無いこととSDカードも安価なので、常時接続のサーバーとして運用しても、2〜3年毎にSDカードを交換するなら気にする必要ないかも。

debianの設定

debian(raspbian)のバージョンを確認。

$ cat /etc/debian_version
7.2

rootパスワードの変更。

$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:

初期ユーザpiはsudo(パスワード無し)でroot権限のコマンドを実行できる。本来、特定のユーザにroot権限(別のユーザ権限)を与えるコマンドだが、ひとりでいじってるだけの環境なら対象ユーザのパスワードを求めさせたほうが安全。

$ sudo visudo

Defaults targetpw

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
#pi ALL=(ALL) NOPASSWD: ALL

これでrootのパスワードが必須になる。

$ sudo aptitude update
[sudo] password for root:

Pidoraへの接続

PidoraのイメージをSDカードに書き込んでいる場合のユーザ、パスワードは

login as: root
root@192.168.0.3's password: raspberrypi

一般ユーザはひとつも作られていないので、必要ならば自分で作成のこと。

Pidoraの設定

イメージを書き込んだばかりの初期状態、起動直後のリソースを確認。

# free -m
             total       used       free     shared    buffers     cached
Mem:           436        166        269          0         11         80
-/+ buffers/cache:         74        361
Swap:            0          0          0

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          1.6G  1.5G   54M  97% /
/dev/root       1.6G  1.5G   54M  97% /
devtmpfs        219M     0  219M   0% /dev
tmpfs           219M     0  219M   0% /dev/shm
tmpfs           219M  748K  218M   1% /run
tmpfs           219M     0  219M   0% /sys/fs/cgroup
tmpfs           219M  4.0K  219M   1% /tmp
/dev/mmcblk0p1   50M   18M   33M  35% /boot

Raspbianと比べると、初期状態でメモリが3倍ほど使用されている。

raspi-configは無くて、GUIのfirstbootか自力で設定をいじる模様。

Perform tasks like raspi-config in Pidora
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=45357&p=389328

GPIO

外部入出力端子はPiのリビジョンで割り振りが多少違うようなので注意。

raspberry-gpio-python - RPi.GPIO Python Module
http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/

RPi.GPIO - Python

Raspbianに最初からインストールされている、Python用のGPIO制御ライブラリ。

$ aptitude search '~i python'
i A idle-python2.7                  - IDE for Python (v2.7) using Tkinter
i A idle-python3.2                  - IDE for Python (v3.2) using Tkinter
i A libpython2.7                    - Shared Python runtime library (version 2.7
i   python                          - interactive high-level object-oriented lan
i A python-dbus                     - simple interprocess messaging system (Pyth
i A python-dbus-dev                 - main loop integration development files fo
i A python-gi                       - Python 2.x bindings for gobject-introspect
i A python-minimal                  - minimal subset of the Python language (def
i A python-numpy                    - Numerical Python adds a fast array facilit
i   python-pifacecommon             - The PiFace common functions module.
i   python-pifacedigitalio          - The PiFace Digital I/O module.
i   python-pygame                   - SDL bindings for games development in Pyth
i   python-rpi.gpio                 - Python GPIO module for Raspberry Pi
i A python-support                  - automated rebuilding support for Python mo
i   python-tk                       - Tkinter - Writing Tk applications with Pyt
i A python2.7                       - Interactive high-level object-oriented lan
i A python2.7-minimal               - Minimal subset of the Python language (ver
i   python3                         - interactive high-level object-oriented lan
i A python3-minimal                 - minimal subset of the Python language (def
i   python3-numpy                   - Numerical Python adds a fast array facilit
i   python3-pifacecommon            - The PiFace common functions module.
i   python3-pifacedigital-scratch-h - The PiFace Digital Scratch Handler.
i   python3-pifacedigitalio         - The PiFace Digital I/O module.
i   python3-rpi.gpio                - Python 3 GPIO module for Raspberry Pi
i   python3-tk                      - Tkinter - Writing Tk applications with Pyt
i A python3.2                       - Interactive high-level object-oriented lan
i A python3.2-minimal               - Minimal subset of the Python language (ver

python-rpi.gpioとpython3-rpi.gpioがそれ。

日経ソフトウエアのサンプルコード。

$ vim led.py
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

state = False

while 1:
        GPIO.output(12, state)
        command = input("Enter:Switch the port / Q:Quit ")
        if command.upper() == ("Q"):
                break
        state = not state

GPIO.cleanup()

Python3で実行。

$ sudo python3 led.py

Enterの度にLEDが点灯・消灯し、qで実行終了。

その他、CでGPIOが割り当てられたメモリを直接操作したり、いろいろな言語でのサンプル、コンソールからの操作とか。

RPi Low-level peripherals
http://elinux.org/RPi_Low-level_peripherals

WiringPi - C

WiringPiはC、C++でGPIOを制御するライブラリ。gitで取得してbuildすれば準備OK。

Raspberry Pi | Wiring | Gordons Projects
https://projects.drogon.net/raspberry-pi/wiringpi/
$ cd
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
$ gpio -v
gpio version: 2.13
Copyright (c) 2012-2013 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

This Raspberry Pi is a revision 2 board.

test.cを用意。

#include <wiringPi.h>

int main (void)
{
    // 処理
}

コンパイルと実行。

$ gcc -o test test.c -lwiringPi
$ sudo ./test

WiringPi - Ruby

WiringPi - Java

Raspbianには最初からJavaが入っている模様。

$ java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)

$ javac -version
javac 1.7.0_40

ドキュメントを参考にJavaからWiringPiを使えるように環境を整える。

The Pi4J Project
http://pi4j.com/

Cのライブラリに依存しているようなので、CのWiringPiを先に入れとくこと。
Pi4Jのダウンロードおよびインストール。

$ wget http://pi4j.googlecode.com/files/pi4j-0.0.5.deb
$ sudo dpkg -i pi4j-0.0.5.deb

/opt/pi4jにインストールされるようなので、Sample.javaを作ったら

$ vim Sample.java
import com.pi4j.io.gpio.*;

class Sample {
        public static void main(String args[]) {
                final GpioController gpio = GpioFactory.getInstance();

                GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin(
                        RaspiPin.GPIO_01,
                        "My LED",
                        PinState.LOW);

                myLed.high();
                //myLed.low();
        }
}
$ javac -classpath .:classes:/opt/pi4j/lib/'*' Sample.java
$ sudo java -classpath .:classes:/opt/pi4j/lib/'*' Sample

GPIO_01に接続したLEDが光れば成功。アンインストールは

$ sudo dpkg -r pi4j

ドキュメント

Technical, help and resource documents
http://www.raspberrypi.org/technical-help-and-resource-documents

ハック!Raspberry Pi電子工作入門キットのサイト。購入品にドキュメントは付属しないので、こちらのサイトの説明にしたがって入門キットを試すことになる。内容的には微妙に間違っていたり、説明を端折りすぎな部分もあるので、まったくの初心者だと躓くかも。
Ruby、WiringPi、Sinatraを使い、

  • LEDの点灯・消灯
  • LEDの明るさ調整
  • 明るさの取得とメール送信
  • 温度の取得とWebブラウザにグラフ表示

まで行う。

Raspberry Pi 電子工作
http://lchikaamazon.hatenablog.com/

Raspbianをwheezy(stable)からjessie(testing)に

まずはwheezyの状態で最新版にしておく。

$ sudo aptitude update
$ sudo aptitude upgrade

リポジトリの参照先をwheezyからjessieに変える。

$ sudo vim /etc/apt/sources.list

deb http://ftp.jaist.ac.jp/raspbian/ jessie main contrib non-free rpi

ふたたび更新。

$ sudo aptitude update
$ sudo aptitude upgrade

一度で更新しきれないみたいなので、なんどかupgradeをかましておく。
とりあえず動いてるっぽい。

RaspberryPiが起動しない

最初は問題なかったのに、いつの間にか起動(再起動)できないことが増えた。
何度か試しているうちに起動できたりするが、upgrade中にハングアップする。

どうやらUSB電源(出力700mA)がギリギリだった模様(汗)。CPUやIO処理が嵩んだときに電源供給が不足して不安定になっていたらしい。1A以上の電源を用意されたし。