2014年10月25日

2014年10月24日

2014年10月23日


35ドルPC“Raspberry Pi”でUnix流LEDチカチカ!



 「Raspberry Pi」(ラズベリーパイ)は、イギリスのRaspberry Pi財団が開発した名刺サイズのシングルボードコンピュータ。ARMプロセッサと豊富なインターフェイスを搭載しながら、わずか35ドルで発売され、世界的に大人気です。品薄状態が続いていて、我々は受注開始直後の3月に申し込んだのですが、届いたのは7月でした。ずいぶん待ちました。

 今回のプロトタイパーズは、Raspberry Piの概要を紹介し、電子工作に役立ちそうな機能を探ってみます。届いたばかりで、まだまだ使いこなせているとはいえない状況ですが、この段階で1度情報共有しておきましょう。

申し込みから4カ月ほどたった暑い日に突然海外から届いたRaspberry Piは可愛い箱に入っていました。現在も、注文はRSオンラインで受付中です

 我々が購入したときの送料等を含む支払額は43.02ドルでした。1ドル80円換算で約3,440円。この金額で、下記のようなスペックのコンピュータが手に入ります。

Raspberry Piの仕様
プロセッサ Broadcom BCM2835(ARM11/700MHzコア、FPU、GPU搭載)
メモリ 256MB
ストレージ SDカード
映像出力 HDMI、コンポジット
オーディオ出力 HDMI、3.5mmステレオ
ポート USB×2、Ethernet(RJ45)
大きさ 86×54mm
OS Debian、Fedora、Arch Linux

 これがModel Bと呼ばれる、35ドル版の仕様です。将来的には、RJ45を省略し、USBポートを1つだけ搭載する、より安いModel Aが登場する予定です。Model Aの目標価格はなんと25ドル。

 Raspberry Pi財団の目標は、35ドルあるいは25ドルの低価格コンピュータを大量に供給することで、子供たちにプログラミングの楽しさを再認識してもらうことにあります。現在のコンピュータは高性能で、その性能の割に廉価ですが、おもに大人が仕事で使うためのもので、子供たちが気軽に触れるようにはできていません。プログラミング環境を用意するには知識と手間が必要です。起動するとすぐにプログラミングが始められた昔のコンピュータを復活させることが、Raspberry Piに託されたテーマといえるでしょう。財団のページを見ると、過去に子供たちが親しんだマシンとして、「Amiga」、「Spectrum ZX」、「Commodore 64」といった名前があげられています。Raspberry Piには、そうした過去の名器を、より低いコストで再現したいという開発者の思いが込められているようです。

上から見たRaspberry Pi Model B。箱に入っているのはこのボード1枚だけなので、電源やケーブル類は自分で用意します
裏面はこんな感じ。SDカードスロットがあります。自分で用意したSDカードに、開発者コミュニティーが提供するOSのイメージを書き込むのが最初の準備作業です
側面を見ていきましょう。この面には、HDMI端子があります。最高1,920×1,200ドットの画像を表示でき、オーディオもここから出力可能です
Model Bは2つのUSBポートとEthernetのジャックを持っています。まだ発売時期がアナウンスされていないModel Aは、USBを1ポートにし、ネットワークインターフェイスを省略することで、25ドルにまとめる計画のようです
こちらにアナログ出力がまとめられています。サウンドはHDMIか3.5mm端子から出力されます。黄色いRCA端子は、PALとNTSCに対応するコンポジットビデオ出力です。その隣に、13ピン×2列のピンヘッダがありますね。「低レベル・ペリフェラル」と呼ばれるこの端子が、我々にとっては重要です

 Raspberry PiをホームPC的に使う場合、HDMIにデジタルテレビ、USBポートにキーボードとマウスをつないで使うことになるでしょう。LANにもつなげば、完璧です。ただし、そうすると、HDMIケーブル、キーボード、マウスのコストが上乗せされて、もう数十ドル必要になってしまいます。ACアダプタとSDカードは必須ですから、全部で100ドルくらいの出費になりそうです。Raspberry Piを“パソコン”として見る場合は、35ドルではなく、100ドルパソコンと捉えたほうが良さそうですね。

電源としてUSB MicroBプラグのACアダプタが必要です。最大出力700mAのものが推奨されていて、それより低出力のものではUSBポート等を使用したときに動作が不安定になるようです。我々は550mAのものを試しましたが、LANとUSBマウスを併用したときにハングアップしました(原因が電源かどうかは確認できていません)。SDカードの容量は4GBあれば十分なようです
OSイメージはraspberrypi.orgのダウンロードページからゲットします。DebianをベースにRaspberry Pi用に最適化されたwheezyと呼ばれるディストリビューションが初心者には推薦されていて、我々はその2012-07-15版をMac OS X上でSDカードに書き込み、使用しました。写真は起動直後のデスクトップ。インストール方法はこちらにあります

 我々もRaspberry Piのパソコン的使用法に興味はありますが、まず調べてみたかったのは電子工作における高機能マイコンボード的使用法です。

 Raspberry Piには、自作回路とつなぐためのピンヘッダがあって、IOポートやシリアルポートとして自由に使えるようになっています。つまり、Arduinoのように、電子部品を直接つないで、コントロールすることができるわけです。

Raspberry PiにLEDをつないで、チカチカさせているところ。LEDは青いブレッドボードの上に、1KΩの抵抗器と一緒に載っています。プログラムはキーボードから入力し実行しました

 13×2ピンのヘッダは低レベル・ペリフェラルと呼ばれる汎用入出力(GPIO)端子群です。8bitのGPIOのほかにPWM、シリアル通信、I2C、SPIに対応していて、+3.3Vと+5Vも供給されます。ただし、IOは3.3V専用です(5Vトレラントではありません)。

 ピン配置や詳しい仕様については、次のページを参照してください。

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

 Raspberry PiはUnixマシンなので、LチカもUnix流のプログラミングで実現します。ここが1番面白いところなので、少し詳しく説明しましょう。

 デバイスをファイルとして扱うUnixの流儀に則って、GPIOもファイルとしてアクセスできるように、Raspberry Pi用のDebianはカスタマイズされています。例えば、4番ピンに対応するファイル名は“/sys/class/gpio/gpio4/value”です。このファイルに0か1を書き込むことで、LEDをオンオフできます。ファイルアクセスはどんな言語からも可能ですし、ごく一般的な処理ですから、最低限の予備知識でハードウェアを扱えるわけです。アプリケーションとの連携も、ファイルを経由することで容易になります。たとえば、ファイル検索の結果をLEDの点滅で表示するといった処理もわずかなコードで記述可能でしょう。

 我々はまずシェルスクリプトとして、Lチカを記述してみました。シェルはUnixのもっとも基本的なプログラミング環境です。

#!/bin/sh
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction
echo "1" > /sys/class/gpio/gpio4/value

 このコードに何か名前をつけて保存し、実行すると、LEDが点灯します(LEDのカソードをGNDに接続している場合)。2行目と3行目でGPIO4を出力ポートとして有効化しています。その後、/sys/class/gpio/gpio4/valueに1を書き込むことで、ポートがHIGHになり、LEDが光ります。消灯させるときは0を書き込めばOKです。

 ソースコードの編集もRaspberry Pi上で可能なので、Arduinoのように開発環境を別のコンピュータ上に構築する必要がありません。プログラムを打ち込んで、即実行できます。

 次のスクリプトは、ポートの状態を読み取る例です。GPIO4につながっているスイッチが押されたら、mp3ファイルを再生します。

#!/bin/sh
echo "4" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio4/direction
while [ `cat /sys/class/gpio/gpio4/value` -ne 1 ]
do
: # waiting
done
mpg123 sample.mp3

 最初の3行は、Lチカ編とほぼ同じですね。3行目のout(出力)がin(入力)に変わっているだけです。whileの行でポートの状態を読み取って判定しています。“-ne 1”は「1でなければ」という意味で、このwhile文は全体で「ポートが1になるまで待つ」という処理を行なっています。4番ピンが1(HIGH)になった時点でループは終了し、最後の行が実行されます。mpg123は自分でインストールしたmp3プレイヤー(“apt-get install mpg321”とするだけでインストールできました)、sample.mp3はダウンロードしてSDカードに保存しておいた音源ファイルです。

 このように、わずか10行に満たないコードで、複雑なソフトウェア処理と自作ハードウェアを連動させることができます。mp3の再生だけでなく、HD画質の映像出力や、インターネットとの通信なども、適切なアプリと組み合わせることで簡単に記述できるでしょう。このようにリッチなメディアを最小限の手間で扱える点が、Raspberry Piを電子工作の構成要素として見たときの、最大の魅力であると我々は考えています。

 先ほど、ArduinoのようにRaspberry Piを使うことができると書きましたが、性質がかなり違うので、自然と使い分けが生じるように思えます。Raspberry Piはリッチメディア、GUI、ネットワーク、ストレージなどが必要な用途で対話的にプログラミングしたいときに力を発揮します。ArduinoはLEDやサーボ、アナログセンサなどの部品を直接的に接続し、ソフトウェアをコンパクトにまとめたいときに有効だと思います。その両方をやりたいときは、Raspberry PiとArduinoを組み合わせればいいでしょう。

低レベル・ペリフェラルの一部としてシリアル通信ポートがあります。OSからは“/dev/ttyAMA0”というデバイスとして認識され、Unix的にアクセス可能です。写真はSparkfunのUSBシリアルモジュール(3.3V仕様)を経由して、PCと接続しているところ。もちろんPC以外の機器との接続にも使えます
Raspberry PiのシリアルポートにMac OS Xからアクセス。コマンドプロンプトが表示されました。ここからログインして操作することも可能です

 Raspberry Piはすごいスピードで広まっているようです。2012年6月から7月の出荷量は全世界で75,000台に達し、さらに8月までに10万台が追加される予定とのこと。年内に20万台は超えそうですね。

 ただ、こうしたハードの急速な普及にソフト面が十分追いついていない印象はあります。特にGUIのチューニングは時間がかかりそうです。現状のデスクトップはCPUパワーに対して豪華すぎる印象で、もっさり感がぬぐえません。そのせいかDebian以外の選択肢を提案している人たちもいるようです。

 ユーザーが急増し、未解決の課題がたくさん残っている現状は、マニア的には楽しめる状況かもしれません。オンラインでの情報交換が各所で観察でき、エンクロージャなどの関連製品も登場しつつあります。作例も徐々に増えていくことでしょう。

 届くまでにだいぶ時間がかかって、出鼻をくじかれた感はありますが、これから我々も少し時間をかけてRaspberry Piのおいしい使い方を探していきたいと思います。