Raspberry Pi でパソコン電源をInternet上から操作

家の外部からタブレットなりノートパソコンなりを使って自宅のパソコンにリモートアクセスするためのアプリというのは色々ある。Internet経由でアクセスする、というもので、Linuxでは当たり前のように実装されているし、 WindowsでもRemote Desktopというアプリケーションが同梱されているし、ファイアウオールでRemote Desktopが使えない環境でもWebベースのTeamViewer とかlogmeinというサードパーティの製品を使えばセキュアな接続がいとも簡単にできてしまう。 Chromeをブラウザとして使用しているのならChrome remote desktopというアプリが今の旬である。

 なぜそんなことが必要か、という疑問が湧くかもしれないが自分の場合、外部からお気に入りの開発環境にログインし、コード開発を一つのマシン上で行う、という使い方がメインになっている。 もちろん将来的にすべての作業がブラウザ上でできる、という環境が構築されればそんな必要はなくなるわけだが、

問題はパソコンにアクセスするには当然のことながら当該パソコンの電源が入っていなくてはならない、という事。
 エコの観点からみると年がら年中つけっぱなしになっているパソコン、というのはエネルギーの浪費に見える。 WEBサーバーを自宅のパソコンを使って構成していた時には電源をつけっぱなしにするしかなかったのだが、アイドル状態でも常に80Wくらいの消費電力が発生していた。
 現在はCubieboardという、手のひらに収まるサイズのArmcortexの開発ボードをサーバーとして使って賄っており、消費電力は3W以下だ。

で、パソコンの電源を使うときだけ遠隔操作でオンする方法がないか調べてみた。

 InstructableにElectric Impというモジュールを使って電源のオンオフをする方法が紹介されている
このモジュール、SDカードと同じform factorだが、内部にWifiモジュールとArm Coretex M3を内臓したれっきとした開発ボードであって、クラウドサービスに接続してパソコンやタブレット上から専用のコントロールパネルアプリを使って接続されたデバイスのリモートコントロールができるようになっている。

InstructableではこのElectric Impに簡単なトランジスタを追加して、PCのPower switch lineを瞬間的にショート状態にする。(つまりパソコンのスイッチを押したのと同じ状態にする)ことによってPCを起動する方法が述べられている。 Electric Impの値段は25ドル程度だが、サポート用の部品(Imp用のブレークアウトなど)を買い足すと40ドルくらいの出費になりそうだ。
自宅でcubieboardのWEBサーバーを随時動かしているのであえてアカウントを作ってクラウドを使ってコントロールする必要はないわけで、 そうすると似たようなことはArduinoでもできるはずと思うわけだが、これまたArduino本体にWifi、あるいはEthernetシールドを追加すると40ドルくらいの出費になる。 CubieBoardのGPIOをパソコンのスイッチに接続して操作することも可能だろうが、部屋が2階と地下室に分かれているし、メインサーバーになっているカードのGPIOで他のデバイスをハードウエアコントロールというのは安全性の面から心理的抵抗がある。

そこで遊び終わって引出しに眠っていたRaspberry Piを使うことにした。Desktop用のLinuxが走るほどのグラフィック性能を持つボードをただの電源スイッチとして使う、というといかにももったいない感じがするのではあるが Piの値段も含めて40ドルくらいで済んでしまうのでコストパーフォマンスの面から考えると他の方法に比べても高くはない、というか他の手間を考えるとこちらのほうが安上がりの感じ。

調べてみるとデバイス制御をPythonベースのhttp サーバーから実行できるWEBIOPIというPi用のライブラリーを発見した。 これをインストールするとGETとかPOSTのHTTP用のプロトコルを使ったRESTという手法でハードウエアのコントロールができるようになる。 つまりWEBサーバー上にページを作り、そのページ上にボタンを描画して、WEBIOPIで提供されているRESTコールを紐つけるという方法でPiのGPIOピンの遠隔操作ができるようになる。 このRESTという手法、非常に単純で、urlのパスに模してパラメーターをサーバーに送ってあげるというもの。GETはアドレスをブラウザで指定するだけで実行できるのでたとえば APIですべてのGPIOの状況を取得するAPIを使うには webiopiをバックグラウンドで走らせている状態で、

https://example.com/GPIO/*

とアドレスをブラウザに打ち込むだけで、Jason書式でGPIOの各ピンの状況が返ってくる。 ただし、これではページの表示自体がJasonのレスポンスになるので実用的ではなく、実際にはJavaScriptでコードを書くことになるが、webiopiにはうwebiopi.jsというヘルパーファイルが同梱されているので、使う難易度は低くなっている。

GPIOの使い方だが、
出力用に設定したGPIOピンをトランジスタを介してパソコンの電源スイッチとパラレルに接続し、パルス上の信号を出力してやるとパワースイッチを押したのと同様のことになり電源が立ち上がる。(電源が入っているときには逆に電源が落ちる)。電源スイッチへ接続されるピンはパソコンのマザーボード上のフロントパネルコネクター部分(パソコンケースのケーブル類を接続するコネクタ部分)に接続ピンがあるのでワイヤーをスプライスしてつなげてやればよい。。
また信号を出す前にパソコンの電源が入っているかどうかをわかっている必要があるのだが、フロントパネルコネクターには電源表示用のLEDへ接続されるピンも存在している。 そこでこのピンをGPIOでモニターすることによってパソコンに電源が入っているかどうかの判定をすることにした。

実際に組んだ回路。使ったGPIOピンは25をパワースイッチ用の出力に、24をLED電圧モニター用の入力にそれぞれ使用。 IntelのPC Interface 仕様(下に抜粋を載せます)を読む限り、パワースイッチ端子はトランジスタに直接接続(PWR+をコレクタ側に、PWR-をEmitter側に)しても大丈夫と思うが、5Vの小型リレーがたまたま手元にあったので使ってみた。NPNトランジスタのかわりに2N7000のようなFETを使えば、R1は必要ない。入力ピンのほうはLEDのVfでクランプされる電圧になるので規定の3.3V以下。万が一LEDがオープンとなっ場合5Vかかってしまうが、GPIOには保護用のクランプダイオードくらいはいっているのだろうと勝手に思い込んでいるので,保険は電流制限のR2のみ。

Table 5. Switch/LED Front Panel Electrical Connection

Pin Signal Description
2 FP PWR/SLP MSG LED pull-up (330 ohm) to +5 V
6 PWR_SW_P Power Switch high reference pull-up (10000 ohm) to +5 V
8 PWR_SW_N Power Switch Low reference pull-down (100 ohm) to GND

贅沢の極み?
贅沢の極み?

html pageの記述


<!DOCTYPE html>
<html lang="en">
<head>
<base href="https://example.com/" />
<title>PC power </title>
<!--[if IE]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>

<body>
    <h2>Turn On Basement PC</h2>
    
パソコンの電源操作ボタンでやんす。!
<form class="buttonBar"></form>

<script type="text/javascript" src="//code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="poweronbutton.js"></script>
</body>
</html>

参照されているJavascriptの記述

/**
 * Created on 5/4/14.
 * poweronbutton.js となっているが、実際にはGPIOのモニターも行う総括的なコード
 * powerbutton element id='pb'
 * html form tag class = buttonBar.
 * GPIO #25 connected to 1n2222 which drives spdp relay to momentariry close power switch.
 * PC power switch is momentary switch.  if PC is off, it will turn on PC.  if PC is on, it will turn off pc
 * relay connected to power connections of PC system panel terminals.
 * GPIO24 connected to Power LED terminal.
 * webiopi (python httms and coap server) installed on target raspberry pi
 *
 */
function setupGPIO(){   // set GPIO25 to out for pc power switch connection.
                        // and  GPIO24 to in  for monitoring PC power LED terminal status
    $.post( 'https://example.com/GPIO/24/function/in',
        function(data) {
            if (data==='IN')setTimeout(monitorPower(),1000);
                  });
    $.post( 'https://example.com/GPIO/25/function/out',
        function(data) {
            data =(data=='OUT')?'PC Power':'setup failed';
            $('#pb').attr("value",data);

        });
}

// }
function turnon(){ // RET command to output pulse
    $.post(
        'https://example.com/GPIO/25/sequence/1000,010',
        function(data) {
            data=(data==0)?'Power switch pushed':'NG';
            $('#pb').attr("value",data); }

    );
}
function monitorPower(){//monitor GPIO 24 status every one second
    $.get('https://example.com/GPIO/24/value',
        function(data){
            data= (data==='0')?'PC is OFF':'PC is ON';
            $('#powerstatus').html(data);
    setTimeout(monitorPower(),1000); //call myself every 1second

})

}
$(function(){
    $('<input type="button" class="power" id="pb" />')
        .appendTo('.buttonBar')
        .attr("value", "Initializing")
        .attr("title", "Turn on Somethin'")
        .click(function () {
            turnon();
        });
    $('<div></div>')
        .appendTo('.buttonBar')
        .attr('id','powerstatus');
      setupGPIO();
    }
);

ターゲットのRaspberry Piにwebiopiが導入され起動されていることが前提になる。 また、上の方法では同梱されてくるwebiopi.jsは使わずに自前のJavaScriptでREST APIを直接アクセスしている。

ページの仕組み:
ブラウザーがページを読み込み終わった時点で、上のjavascriptが以下の作業を実行する。
ボタンを描画し、ボタンのラベルを”Initializing” と表示する。
GPIO25を出力ピンに設定。 ボタンのラベルを”PC Power”と書き換え、ボタンのクリック動作にパルスを送信するRESTコマンドを紐つける。
GPIO24を入力ピンに設定。同時に入力ピンの1秒ごとのモニターをスタート。WEBIOPIからRESTで返された状況に応じてページ上に”Power is ON” または ”Power is OFF”を一秒ごとに更新表示

JavaScriptの部分はRefactoringやnamespacing をやっていないので改善の余地あり。またPower LEDのモニターだけではパソコンがオンしていることはわかっても、実際にWindowsが立ち上がっているかどうかはわからないので、何らかのインターネットサービスをPi側からモニターする手法を併用するほうがよさそうだし、CSSの記述も追加してページの見栄えもよくしたいと思うが、一応初期の目的はこれにて達成。

なお、WEBIOPI自体にログイン形式のセキュリティ機能が実装されており、ページの最初のロード時にログインネームとパスワードを聞いてくる仕組みになっている。ログインとパスワードの初期値がそれぞれ”webiopi” と”raspberry” となっているので、マニュアルの手順に従って変更しておく必要がある。

また、Raspberry Piへの電源だが、パソコンの電源に5V standbyが存在しているため、ここから引き込んでいる。24p/20pコネクタの紫の線だが、マザーボードの電源側への要求スペックが500mAで電源側の仕様が2Aなので余裕のようだ。Raspberry PiもPCの筐体に入れてしまったので見た目もすっきりである。

<後記> 電力消費計を入手したので、実際のところ、どれだけエコになっているのか測定してみた。 パソコンを普通に電源投入すると80Wくらの消費になっていた。 パソコンをオフにすると7Wだ。パソコン用の電源が動いていて5Vのスタンバイ電源からPiとその他に供給しているということだ。 その差73Wだが、電気代で考えるとまったくパソコンをオンしなかった場合、年間約50ドルちょっとの節約になる。パソコンの稼働率が10パーセントくらいと仮定すると45ドルの節約なので1年でもとが取れる計算になる。

Computing is fun, once again

image of zx80
My first “system”

This was my first personal computer, Sinclair ZX-80 from U.K . (BTW, It’s not ZEE-X. It should be pronounced, Zedd-X) for $199. You still needed a TV monitor. So I had to shell out another $70 for portable tube based TV. Membrane keyboard was so primitive it took me 30 minutes to enter a simple basic program. It came with 1k byte of S-RAM and Z80 CPU operated on 1Mhz speed. The screen memory was shared with program memory, so if you enter long program, it starts reducing the displayable screen lines. It did not have dedicated display driver so every time key is pressed, the screen would blink. Still I had a lot of fun from this “system” back in…. 1981.
 
 
 
Fast forward to today. The core of the system is Raspberry Pi , so called $35 computer from UK. It actually cost me $42(plus shipping) from Amazon.com. There is also BeagleBone Black (aka “American” Pi) for $45 that can be used in approximately the same way. The Raspi runs on 700Mhz Arm processor and comes with 512MB of RAM. (BBB runs on a bit more powerful Arm processor@1GHz with 512MB or RAM) You use2GB or larger SDHC card to copy bootable linux image downloaded from the internet and pop into the SD card slot. (BBB has 2GB internal memory that is already prepped) The system will boot up Linux OS.
It connects to USB keyboard and HDMI monitor. Since it has Ehternet connection, one can also use it headless. I ran mine headless and use terminal program from my PC to control it.
 
It has some of I/O pins exposed so you can connect it to electronic components such as LED or motor, or get input from temp sensor or switch or whatever. If you goof up and destroy it, it will cost you mere $42 to replace it, so, have no fear.
 
As said, to make a complete computer out of it, you will need a keyboard and monitor.
USB keyboard is cheap, but HDMI monitor is not. Enter “lapdock” from Motorola. This was sold as a docking station for Motorola smart phones but apparently was a big flop although Lapdock itself appears to be a beautiful device. It looks like a Macbook Air.
One time you could buy this thing for $40 from Amazon. Original price was more than $500. Then somebody “discovered” that the lapdock can be used with the Pi. Now the instruction of how to connect the Pi (or BBB, or whatever the dev board you want to connect) to the Lapdock is everywhere on the Internet. As of today, the cost of “Atrix 4G Motorola Lapdock” is about $120. I got mine for about $80 just a few weeks ago. Economy of scale must be working nicely. Spend another $20 for cables and you really have a real computer for less than $200.
Computing is fun, once again.

$35(Raspi)+$80(Lapdock)+$20(cable Set)+$8(SD Card) + S&H($12)=$155 system
$35(Raspi)+$80(Lapdock)+$20(cable Set)+$8(SD Card) + S&H($12)=$155 system

NetBeans でクロスプラットフォーム開発環境を作る

BBBやRasPiで使うC/C++のプログラムをWindows上のNetBeans IDE で開発してしまおう、という話。 NetBeansはもともとJavaの開発環境だが、plugin で c/c++ もサポートしている。自分のようにWeekend hoby でプログラミングをやっているものにとってはAutocomplete やSyntax check、変数の使用状況のチェックなどを自動的にやって間違いを指摘してくれるeditor というのは重宝する。
こちらに、Eclipseを使ったアプリケーションの開発及びクロスコンパイルの方法を説明したビデオがあったので、NetBeansを使って同じようなことができないか調べてみた。

リソースの乏しいRasPi上ではなく、普通のデスクトップコンピューターでIDEを使ったアプリケーション開発を行い、コードの生成だけはRasPi上で行う。という環境を作りたかったわけだが、NetBeans.orgにちゃんとやり方の説明が載っていた。

設定は以外と簡単にできた。  Netbeans からLinux BoxにSSHで接続し、さらにLinuxBox からはSambaを使ってLinuxのfile system をWindows側にネットワークドライブとしてシェア、 netbeans のプロジェクトをこのシェアされたフォルダーに書き込んでいき、デバッグはLinuxBox側から行う。 設定さえきちんとできれば、すべてWindows上のnetbeans IDEから処理できる。
この場合、gcc, make, gdbなどのツールはlinuxbox 上に存在するものがsshを使って操作される。よって、こられのツールがLinux側にインストールされている必要があるが、きちんとインストールされていれば、設定の途中でnetbeansがちゃんと検出してくれる。
Linux Box 側からは以下の下準備が必要
1.Sambaのインストール及びsmb.configの設定。(sudo apt-get install samba samba-common-bin)
2.SSH (RasPiもBBBも初期設定でインストール済み)
3.g++, gcc, make, gdb のインストール(sudo apt-get install g++ gcc make gdb)

詳細はこのヘルプページの解説に従えばよい。 Sambaを使ってFolder を Shareする方法のほかにファイルの作成管理はWindows側で行って、コンパイル時にLinux側にすべてコピーするscpを使ったautomatic copy という方法も述べてある(小さなプロジェクトではこちらのほうが早いとある)のだが、自分の環境ではうまくできなかった。

Raspberry Pi に頭をつけてみる。

RasPiにキーボードとモニターを接続しようと思ったとき、キーボードはUSB接続のキーボードで20ドルくらいからあるし、昔のキーボードがどこかに転がっていればそれを転用するので大したことはないが、困るのはモニターである。 RCA入力端子のある中古のTVというのも選択肢としてはあるわけだが、せっかくならHDMIで高解像度を楽しみたいわけである。 AmazonやNewEgg,Tigers Directなどで探してみても100ドルくらいはする。 するとキーボードと合わせると120ドルから150ドルくらいの出費になってしまう。
ところが世の中よくしたもので、RasPiにぴったりのガジェットがある。 Motorola が出しているLapdockというスマートフォーン用のドッキングステーションなのだが、これが液晶モニター、キーボード、タッチパッドとUSBハブ付きで充電バッテリ内蔵なのだが、本来は400ドルくらいするはずのものが、あまりにも売れなかったらしく、安売りになっている。 自分は”Lapdock for AT&T Atrix 4G”というモデルを80ドルでアマゾンから入手。ネットの情報では50ドルくらいで手に入る、ということだったが、みな同じことを考えて購入するらしく、市場の原理が働いたようで、残念ながら50ドルというのは見つけることができなかった。

RasPiとの接続だが、コネクタがやや特殊である。 クレードルにはHDMIのミニコネクタとUSBのマイクロコネクタがついていて、これに接続すればよいのだが、それぞれオスのコネクタなので、ケーブル側にメスのソケットが必要になる。よって、HDMI D-Female からHDMI Maleというケーブルまたはケーブルとアダプタの変換をしないとRasPiにはつながらない。 またUSBのほうだが、これはクライエント側(下流)のコネクタではあるのだが、同時にスマートフォーンをチャージする機能を持っているので、+5Vが供給されている。 本来ならば、パワーライン(4本の心線のうち赤い線)を切断して、データラインだけ、USBホストコネクタ(RasPiの大きいほうのUSBソケット)と接続し、 ラップドックから電源供給を行う場合パワーラインのほうはここからマイクロUSBソケットに赤(5V)と黒(グランド)の心線をスプライスして供給する、あるいはUSBハブからのホストコネクションを使うべきなのだが、実はRasPiに関していえば、全部のラインをホスト側に差し込んでもOK。回路図を見ると、RasPi内部でフューズをかましているだけなので、5Vが保障されればどちらから供給されても問題ない設計になっている。 (きちんとパワーマネジメントICが入っているBeagleBoneでは恐ろしくてできない)
ラップドック自体はHDMIの接続と画面を開けた二つの信号を見て電源をオンする構造になっているようだ。 自分の環境ではHDMIケーブルのソケットの勘合が緩いようで、ショックなどで接触が悪くなると電源が落ちてしまう。 写真では電源を別に取ってあるのはそういうわけである。20130727_122330

参考にしたサイトは以下。
英語

http://rpidock.blogspot.com/
http://www.instructables.com/id/The-Raspberry-Pi-Lapdock-Connection/
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=31416&p=272789
上記3つのサイトは写真が豊富 コネクタ・ケーブルなどの小売サイトへのリンクなどもある。
http://www.element14.com/community/groups/raspberry-pi/blog/2012/09/27/raspberry-pi-lapdock-hdmi-cable-work-around
このサイトはHDMIがRasPiをセンスしないと電源がONにならない、というところから議論をはじめていて、非常に参考になった。またHDMIが接続しっぱなしだと、センス電流が常時流れる状態になる、ということで、これをカットするためのスイッチを組み付ける方法の紹介がある。

Raspberry Pi、SD カードのアクセス速度と, カード破損の原因について

表題の件。自分はなんとなく、SDカードのアクセス速度はハードディスクのアクセス速度よりも早いのだ、と思っていたのだが、これは実は大変な思い違いだった。 思い込んでいた理由は、機械部品に読み書きするより、半導体のほうに読み書きするほうが早いのだろうと単純に考えていたのだが、どうも違うらしい。 SDカードの構造が関係しているようだが、同じカードでも初期のSDカードと現在普通に売っているSDHCでももちろん差がある。 それでもハードディスクのスピードにはかなわないのだ、という。
ちなみに Raspberry Piとlinux のddコマンドを使ってカードのアクセスの速度を簡易的に測ってみた報告が
このサイトに載っていたので、同じ方法で、今回自分のパイに使ったTranscend の8GBカードのアクセス速度を測ってみたら、15.7MB/Sと出た.

root@raspi1:/home/pi# time dd if=/dev/zero of=./ddfile bs=8k count=20000 && sync
20000+0 records in
20000+0 records out
163840000 bytes (164 MB) copied, 10.4644 s, 15.7 MB/s

real	0m10.657s
user	0m0.080s
sys	0m2.400s

(ここで使っているddというコマンドはパラメーターの使い方を間違えるとハードディスクの中身が綺麗になくなってしまったり、こわれてしまったりする、というlinux killerとも言われる至極危険なコマンドなので、ご注意を。自分でやってみてファイルシステムの中身が蒸発したと文句を言われても責任を持てません。)
クラス10のカードなので保証最低速度が10MB/Sだからこんなものか。 上記のサイトの結果と比較しても同じくらいのスピードだ。
サイトの情報を眺めていると、SDカードが破損する、という報告が多数見られるのは、SDカードのメモリー構造が激しい書き換えで摩耗してしまう結果だから、一度SDカードからブートしたら、OSはUSBスティックのメモリー上で動作したほうがよい、というように書いてあるブログが結構ある。 SDカードでダメならUSBのフラッシュカードだって同じだろうと思うのだが真偽のほどは分からない。上のサイトでもUSBのサムドライブで動作させた場合のアクセス速度を測っているが、SDカードの約半分以下のスピード。測ったメモリースティックがSandisk 16GB Cruiser、一部のサイトで言っているようなスピードが改善した、というような結果にはなっていない。 他にも個人のブログでやはりスピードに改善はない、という報告がある一方、 早くなり、かつ動作が安定した、と言っているサイトには具体的な数値が出ていない。 一方、USB経由でHDDに接続した場合は速度向上の効果が得られそうだ。。 

ただ、興味をそそられる部分があって、それはOSのカーネルの立ち上がりからの処理は、USBに接続されたデバイスから実行することができる、SDカード上に必要なのは/bootフォルダに置かれたファイルのみ、と説明されているところで、つまりはSDカードに展開される2GBの実装イメージのうち、本当にSDカード側において置かなければならない部分はFATのパティションの部分のみ、ファイルサイズで言うと20メガバイトにも満たない、ということが判った。オリジナルの2GBのイメージはパティションが二つあり、一つは56メガバイトのFAT、もうひとつは(2GB-56MBの)Linuxのファイルシステムになっている。 この起動の途中からUSBデバイスを使う方法の説明はこのサイトに載っている記事がわかりやすいが、自分の場合、キーボードがダメになって放ってあったHPmini というネットブックに16GBのSSDが入っていたのでこれを取り出し、昔notebookのハードディスクのゴースティングをするために買ってあったUSBのSATA/PATA Enclosure に入れ込んで、Raspbian のイメージをコピーし、gpartedを使ってパティションをディスク容量分まで拡大。 SDカードのほうは、昔のカメラかなにかに使っていたと思われる東芝の256MBのSDカードを普通のPCでフォーマットしたのちにSSDのFATpatition の部分のファイルをすべてコピーし、 その中からcmdline.txt に書かれている /dev/blk0p2というブートデバイス指示を/dev/sda2と書き換え それぞれRPiに接続して準備完了。電源を入れてみれば256MBのSDカードから 見事に立ち上がった。

この状態で、SSDの読み書き速度を調べて見れば、
16GB SSD salvaged from HP mini notebook (ca. 2009) connected through SATA-USB enclosure.

root@raspi1:~# time dd if=/dev/zero of=./ddfile bs=8k count=20000 && sync
20000+0 records in
20000+0 records out
163840000 bytes (164 MB) copied, 3.83869 s, 42.7 MB/s

real	0m3.858s
user	0m0.050s
sys	0m2.380s

この42.7MB/S というのは、上記のサイトで報告されている、HDDの読み書き速度とほぼ同程度。 それでもSDHCのほぼ3倍の早さがでている。 SSDも半導体ドライブだが、こちらはHDDよりも早い、という宣伝文句で高くても皆文句を言わず買っているわけなので、もっと早くてもよさそうなものだが、290ドルのネットブックに付属してきたものなので、高性能を期待するのが無理か。 そもそもUSB2 の公称最高速が60MB/Sで、そのうち10~15%はオーバーヘッドというこどなので、50MB/SくらいでUSBのほうが飽和するから、そちらの影響かも。 どちらにしても消費電力は低いはず。

ちなみに256MB のSDカードのほうは、さすがに古いだけあって、 ご覧のとおり、たったの2MB/S。 つまりクラス2のカードで、RPiの要求仕様であるクラス4をも満たしていないが問題なく起動する。この使い方では書き込むことはなく読み込み専用. すぐにコントロールがUSB側のstorageに移るのでよしとしておく。
256BM SD card from old digital camera

root@raspi1:/boot# time dd if=/dev/zero of=./ddfile bs=8k count=20000 && sync
20000+0 records in0
20000+0 records out
163840000 bytes (164 MB) copied, 77.1608 s, 2.1 MB/s

real	1m17.178s
user	0m0.030s
sys	0m2.620s

SDカードの破損の原因だが、
1)電源のパワーが足りない。必要とされる700ミリアンペア以上を供給できない電源を使っていてうまく書き込むことができない。
2)SDカードが書き込まれている最中にカードを抜いてしまう。
などが、主原因であり、read/writeの回数が許容回数を上回ってしまうのだ、という議論は説得力が薄い、と個人的には感じている。 (今のセットアップで問題が起きれば考え直すかもしれない)
(追記:どうも初期のファームウエアにも問題があったようだ。firmware-update、raspberry piでググってみてほしい。)
RPiにパワースイッチがあれば2の問題は防げるのだが、コストカットの観点からスイッチはついていない。American Piとも揶揄されるbeaglebone black($45)にはしっかりついており、確実にパワーダウンできるのに比べると見劣りする。 ただ単に電源を接続するだけではなく、まずはシステムをシャットダウンしてのちに電源を落とす必要があるのだが、これを実現させるためのRPi用のパワースイッチは3rd Partyからいくつか発売されており(1)(2)、これを買い求めれば良いだけの話ではある。

Rpi , 256MB SD card and USB/Sata I/F with 16GB SDD.  8GBSD is now retired
Rpi , 256MB SD card and USB/Sata I/F with 16GB SDD.  8GBSD is now retired

NGINX ん、じんくす? 違わい、エンジンXだい!

nginxと書いてエンジンエックスと読むそうである。webサーバーとして動くことは勿論だが、その他, リバースプロキシとしてはWEBのみならず、mailも扱えるということなので、 今回raspberry piにインストールしてみた。 徐々に使い方を覚えていき、他のサーバーからの移行を画策していこうと思う(狙いは省電力化)が、とりあえずはPHPおよびmysql を一緒に実装し Lamp ではなく、LNMPとして動かすことをやってみる。 Wikipediaの解説によれば非同期のイベント駆動モデルを使っており、プロセス・スレッド駆動のapacheなどのサーバーに比べると高負荷になっても動きが鈍くならない、という利点があるらしい。なんとなくraspberry pi にぴったりのサーバーのような気がしてきたが、実際は如何に。

実装後のテスト画面は以下。ごらんのとおり、PHPが実装でき、phpmyadminが動いている、という証拠スナップ。

phpinfo()をRPi上で実行。
phpinfo()をRPi上で実行。クリックすると拡大画面になり、raspberry piのバージョン情報などが見える。
以下のconfig file を参照。
以下のconfig file を参照。

いくつかネット上の記事を参照したが、メインはこちらの記述に従った。 上記サイトのコピー記述になるのでどうかとも思うが、とりあえず実行したコマンドだけ羅列すると以下になる。
なお、ヘッドレスでアクセスをしているので、入力はすべてsshによるリモートターミナル経由だ。

mysql-server をまずインストール

sudo apg-get install mysql-server [Enter]

mysql のルートパスワードを要求されるので入力したパスワードは忘れないようにしよう。

次にnginx本体をインストール。 ところで、サイトによっては、「ディストロについてくるnginxは0.6とえらく古いのでソースを落としてきてコンパイルしよう、」とその方法を詳しく説明してるところがあったが、apt-get update; apt-get upgrade 後にインストールしたバージョンは1.2.1であった。 ソースをみるとすでに1.51がリリースされているが、ものすごく古い、というわけでもなかったので、パッケージ品をそのまま使うことにする。 自分も齢60歳。いちいち凝っている時間はもうないので次に次にと進むのである。

sudo apt-get install nginx [Enter]
sudo service nginx start [Enter]
sudo apt-get install php5-fpm [Enter]
sudo apt-get install php5-imagick [Enter]
sudo apt-get install php5-curl [Enter]
sudo nano /etc/php5/fpm/php.ini [Enter]

最後のコマンドではnano editor が起動するので、Ctl-W で、以下の部分を探し、修正。
“upload_max_filesize=2M” => “upload_max_filesize=10M”
Dynamic Extentions のセクションに 以下を追加

extension = imagick.so

あとはCtrl-O でセーブし、Ctrl-x で終了。

phpmyadminをインストール

sudo apt-get install phpmyadmin [Enter]

Web-server selection の画面でApache か lighttpdかどちらのサーバーかと、と聞いてくるが、どちらでもないので、チェックを外しておく。 次の画面でパスワードを設定。

sudo service php5-fpm restart

以上すべてsudo で暫定ルート権限で実行しているが、面倒であれば、sudo su でルートになれば、sudoは省ける。

ここまでで必要なサービス(nginx,mysql,PHP5)はすべて導入された。 ちなみにこの状態でRPiのIPアドレスをブラウザで見ると”Welcome to NGinx”という簡単なメッセージが出て、nginxが無事動いているということがわかる。

ただし、この状態では静的なファイルしか表示しない。 PHPファイルを認識させるにはconfig file をいじる必要があるが、その前にサイト用のダイレクトリを設定しておく。
ルートフォルダにある/srvにフォルダーツリーを作っていく.

sudo mkdir /srv/www [Enter]
sudo chown -R USER1:www-data /srv/www [Enter]
sudo chmod -R 755 /srv/www [Enter]
mkdir /srv/www/site1 [Enter]
cd /srv/www/site1 [Enter]
mkdir logs [Enter]
nano logs/access.log (ファイルを作るだけなので、カラのファイルをセーブして即クローズ)
nano logs/error.log (ファイルを作るだけなので、カラのファイルをセーブして即クローズ)

上でやっているのは、nano で空のファイルを二つ作るということだが、空のファイルを作る技としてはほかに

touch filename

さらには

> filename

なんてのもある。最後のコマンドは無入力をfilenameにリダイレクトする、という技で、20年前に感心して覚えたのをすっかり忘れてた(爆)


mkdir public [Enter]

上の例では自分はUSER1というユーザー名でログインしてると仮定し, /srv/www/というフォルダーにsite1というフォルダーを作成する。 srv/www/site1/pulicを、作ろうとしているサイトのルートとしてここにWeb 構造を展開して使う魂胆である。ホストできるサイトは一つだけではないので、その場合はsite2, site3など、任意名のフォルダーを作って割り当てていけばよい。
次にCONFIG FILE で上の情報をつなぎ合わせるわけだ.
デフォルトのCONFIG FILE は /etc/nginx/nginx.conf というファイルで、これはすでに存在している。 ネット上の多くの説明では、このファイルを直接いじるような印象だが、 今回インストールされたnginx.conf を見てみると、ほとんどコメントアウトされていてコメントを抜くと、フレームワークがあるだけで、ほとんど何も実際のコマンドになっていない。 ただ、webサーバーを指定しているhttpブロックをよく見てみると 以下の記述があることに気付く。

include /etc/nginx/sites-enabled/

で、このsites-enabled のフォルダーを眺めてみると、default というファイルを見つけたわけだが、このファイルは実体のないソフトリンクされているポインタであり、実際のファイルは/etc/nginx/sites-available/default というファイルだったりする。

このsites-available, sites-enabled というフォルダーはapache2 でもおなじみで、サイトの構成ファイルをsites-available のほうに、one site= one file 単位でセーブしておき、 有効にしたいサイトのみ、ソフトリンクでsites-enabledにソフトリンクする、という仕組みになっているようだ。 ”welcome to nginx”というメッセージはこのdefault の中に以下の記述がある。

root /usr/share/nginx/www;
index index.html index.htm;

これは「このサイトのルートページはローカルマシンの/usr/share/nginx/www フォルダーですよ、html とhtmのエクステンションを探して表示しましょうね、」と言っている。 ちなみに、このフォルダーをみてみると、index.htmlというファイルがおいてあるので、その中身をみると、やはり”welcom to nginx”とhtml で書いてあるわけだ。
今回は/srv/www/site1/public/をルートにしようとおもっているので、別のconfig ファイルをつくり、そのファイルをsites-availableにセーブし、ソフトリンクでsites-enableに登録するという作業を行う。 ファイルの名前をsite1として話を進める。

sudo nano /etc/nginx/sites-available/site1 [Enter]

実際のファイルの中身は以下のようになる。

server {
access_log /srv/www/site1/logs/access.log;
error_log /srv/www/site1/logs/error.log;
root /srv/www/site1/public/;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/site1/public$fastcgi_script_name;
}
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
}

このファイルをソフトリンクするついでにdefaultをsites-enabled から削除(リンクを解除) さらにサービスを再スタート

sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/site1
sudo rm /etc/nginx/sites-enabled/default
sudo nginx restart

まだルートフォルダにはページをつくっていないので、このままでは何も表示しない。 phpinfo() というphp関数を実行するだけのファイルを作成してルートフォルダーにセーブする。

nano /srv/www/site1/public/index.php

以下の一行を記述

<php? phpinfo(); ?>

ctl-o で書き込み、ctl-x でクローズ

キーボード、モニター付きのRPiなら、あとは”localhost”とブラウザに打ち込むわけだが、外部のマシンからのブラウザアクセスをする場合にはIPアドレスを入力してやる必要がある。自分の環境ではローカルマシンでbind9というDNSをうごかしている。ここに192.168.1.97というローカル固定IPをraspberrypi.home.lanというドメインネームとして登録した。早速これを使って http://raspberrypi.home.lanと入力すると一番上の画面が出てきた。 さらに http://raspberrypi.homel.lan/phpmyadmin と入力してphpMyadminのログイン画面が出た。 このアプリはPHPで動くので、PHPの作動確認OK. さらに ログインしてmysql のデータベースもちゃんと使えることを確認して本日のところは終了。 config の部分についてはnginx.org/document/ のビギナーズガイドが非常に参考になった。
外部からのアクセスができるようにするにはserver_name などのパラメータを追加していく必要があるはずなので、今後ぼちぼち試行錯誤していこうと思う。理屈としてはこれでWordPress などのCMSも導入可能になったはずだ。

Laspberry pi とLinuxの調理

今回のRPiは電子機器とのインターフェースというよりもサーバーとして使おうとしているので、少しLinuxが使いやすくできるように調整しておく。
まずは新規ユーザー名を追加する。Piと同じグループアクセスを行えるように、まずはpiの所属するグループ名をチェック

groups pi

自分の環境では以下が出力された

pi : pi adm dialout cdrom sudo audio video plugdev games users netdev input

これを参考にしてuser1というユーザーを追加するには

sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input user1

次に以下のコマンドを入力し、入力を即されたらパスワードを入力(2回)

sudo passwd user1

sshを使ってコマンドラインのみでヘッドレスで動かしているわけだが、ターミナルモードからRaspbianのGUIにアクセスすることもできる。 このためにはTightvncというパッケージを使う。英語のHowtoはここに詳しいが、いかに簡単に手続きだけを述べておくと

sudo apt-get install tightvncserver //vnc server をインストール
tightvncserver //vncserverを起動 password設定を催促されるので8文字以下で入力
vncserver :0 -geometry 1440x900 -depth 24 //画面精度に合わせて適宜調整

これをいちいち入力するのは面倒なので、上記のサイトではConfig fileの書き方などが書いてある。
これでxウィンドウがセットされるので、Windows あるいはLinuxが動いているパソコンからVNC準拠のViewerでIPアドレス、パスワードを入力すればGUI画面がアクセスできる。
tightvnc-pi

インストールされているアプリケーションは左下のスタートメニュー(?)をクリックすればカテゴリーごとに選択できるようになっている。いつも使うアプリケーションについては項目を右クリックし、add to desktopを選べばデスクトップ上にアイコンを置くことができる。

手間をかけてGUIを実現させた理由はWifi-adapterの設定をコマンドラインでやった経験がないからで、(爆) GUI上だとwpa_guiというwifi network への接続設定ツールが使える。 まあほかにもScratchとかRaspberry PiのGUI体験を実感したいという理由も無きにしも非ず。

デスクトップ画面をパソコン上に出した状態で、 作動が確認されている、ということでRPiと一緒に購入したEdimixのEW-7811UNというWireless nano USB Adapterをusbポートに差し込み、internetカテゴリーからwpa_guiを起動する。アダプタはあっさりwlan0と認識されているので、あとはscanを実行し、自宅のRouter のwifi networkをみつけてパスワード等を入力し接続すればよい。 これはシステム上に記憶されるので一度の設定であとはリブートするごとに自動接続される。 これでEthernetケーブルをはずしてもネットワークに接続できるようになった。

電源プラグ、SDカードおよびusb wifi mini adapter で一丁前のコンピューター
物理的につながっているのは電源プラグのみ、SDカードおよびusb wifi mini adapter装備 で一丁前のheadlessコンピューター

現在使っているCISCOのWifi Router にはネットアダプターのMACアドレスに固定IPアドレスを割りつける機能がある。 router のBasicセットアップのページからDCHP Reserveというボタンをクリックすると 現在割り当てらているIPアドレスの一覧が出るので、それでraspberry piを選び、固定アドレスを指定するという作業になる。 raspberry piの電源を一度落としてから再度起動すると新しい固定アドレスが割り当てられた状態でネットワークに接続される。

ここまでできたら、あとはApache, PHP, MYsqlをインストールすればdynamic web server が完成するわけで、そういうチュートリアルもネットを探せばいくらでもあるわけだが、それでは面白くないので、apacheの代わりに近頃勢いを得つつあるnginxを導入してみることにする。 説明を読んでいるとReverse proxyにも使えるということなので、現在NASで構築してるsquidを使ったreverse proxy をついでに置き換えることができないかとも思っているわけである。 その顛末は次回。

Raspberry Pi を 頭を使わずに食べてみる(Eating Raspberry Pi Headless)

旅行から帰ってきたらRPi が届いていたので早速食べてみた。本来ならば、キーボードとモニターを接続して初期設定することになるのだが、最初から小規模のhtmlサーバーとして使おうと考えているのでモニターやキーボードは接続せず (いわゆるheadless)、EtherNetへの接続だけでの設定を試みた。 ネット上から拾ってくるオフィシャルOSであるRaspbian ”wheezy” (Debian LinuxのRPiポート)のイメージではsshが最初から組み込まれているのでこのイメージを展開したSDカードをスロットに挿入し、ネットワークケーブルを接続しておいてから電源を接続する。 RPiのLEDが華やかに点滅を始めるので、これが一段落したのちに、ラウターのDHCPテーブルを眺めてみるとRaspberrypiの名前でIPが設定されているのでこのIPに対してSSH接続を行う。自分の環境では192.168.1.122 に設定されていたので

 ssh pi@192.168.1.122

これをcygwin ターミナルから入力する。

最初の設定ではuser がpi, password がRaspberry と設定されている。
なお、母艦はWindows 8なのだが、巷で人気のあるPutty ではaptitude や、raspi-configなどAscii Codeでグラフィック表示を行うアプリでは表示が崩れるようなので、ここではcygwin からオプションでインストールしたSSHクライアントを使ってアクセスしている。

Putty terminal でrapsi-configを実行。
Putty terminal でrapsi-configを実行。

cygwin TerminalからのSSH アクセスで raspi-configを実行
cygwin TerminalからのSSH アクセスで raspi-configを実行

最初のログインでは「まずRaspi-configを起動して設定を行ってください」というような意味のメッセージが出る。 モニターとキーボードを使っていれば、自動的に起動するようだが、headlessではマニュアルで進めることになる。
sudo raspi-config

このraspi-config の設定画面、インターネットなどで見る設定画面とはメニュー構成が異なっている。バージョンが上がっているのだろう。 去年の今頃から発売開始になって以来、環境は日々進化しているようなのでネット上の情報は十分吟味する必要がありそうだ。ネットでみると大変そうな作業がツール側の対応が進んでいて実は簡単にできるようになっていました、というような事例が多々ありそうだ。

例えば、最初に使うOSのイメージは2GBなので、サイズの大きなSDカードを使っている場合、このRaspi-configの最初のオプションexpand rootfsを実行することにより、ファイルシステムのサイズをSDカードのサイズいっぱいまで拡大する作業、 は必須項目なのだが最初のころはこれも手作業でやっていたようなのだ。

次の項目、Change Password は、後々別のユーザーを追加するにしても、やっぱりやっておいた方がよい。
Boot to desktopは、モニターを使っていた場合、いちいちstartxとコマンドラインから立ち上げるのではなく、直接GUIを立ち上げてしまおう、というオプションだが、今回の使用目的とは関係ないのでスキップ。

Internationalized option ではkeyboard、locale,time zoneなどが変更できる。 Default ではUKのキーボード配列、使用場所英国になっているため、適宜変更。
Advanced option ではメモリースプリットやhostnameなどが変更できる。モデルBの512MBバージョンではGPUに64MBが振り分けられている。headless で使うということであまりグラフィック関係にメモリーは必要ない、と考えられるのでメモリースプリットにかんしては16MBに変更しておく、
OverClock は興味のある分野ではあるが、とりあえずはパス。 ちなみにつかうとRPi内部のフューズが切れて例えクロックを元に戻しても履歴がわかるようになって、保証対象外となるそうである。というのは古い情報で、Raspi-configで設定するオーバークロックはターボモードと称し、温度が85度以上になると自動的にステップダウンする仕組みになっているらしい。補償対象内の設定だそうだが、チップのばらつきにより、設定によってはブートしなくなる可能性あり。この場合、シフトキーを押しながらリブートしろ、とあるが、こちらはヘッドレスで動かしているので、復帰の仕様がない。
Enable Camera というのはそのうち出てくるPI カメラモジュールに関した設定。
Add to RasTrack はRPiのユーザーがそれぞれ自分のPiを登録し、それをマップで確認できるサービスで登録するのは任意だ。日本はまだ100個台の登録状況であるが、隠れユーザーはこの何倍もいるはず。 街のレベルまで登録するので、ご近所さんで食べてる人が何人いるか確認できてそれなりに楽しい。

Finish を選択するとリブートするか聞いてくるのでYESを選択。

ファイルシステムのサイズ変更にしばらくかかるので他の仕事をやりながら気楽に待ち、LEDの点滅が落ち着いたら、もう一度sshでログイン。 このタイミングでraspbianのアップデートも行っておく。

sudo apt-get update
sudo apt-get upgrade

(Update でデータベースのアップデートをおこない、upgradeで最新のモジュールに更新する。)

自分はDebian Base のUbuntuをデスクトップで使ったり、使っているNAS(Wester ditigal 製 Mybooklive)がDebian で動いているなどの経緯からDebian Linuxはある程度馴染みがあるのででほとんどストレスがなく設定できた。

ところでRPiには電源スイッチがない。電源を落とすにはプラグを抜くことになるのだが、その前にシステムをシャットダウンしておくのが利口なようだ。プラグを引っこ抜いてSDカード上のイメージが破損してしまった、というような報告がネット上に散見される。

sudo shutdown -h now

五個あるLEDのうち電源表示の赤いLEDだけの点灯になったら多分安全。 ここでプラグを抜くのだが、機械的ストレスをPRi本体に与えない、という観点からRPi側ではなく、電源プラグ側のコードを抜く。

電源だが、700mA以上必要、となっている。 携帯の充電器では 400mA定格が多いという記述もネット上で見ていたので、手持ちのスマホ携帯の定格を調べてみたがいずれも1Aとなっており、問題なさそうだ。

裸のままのRPiではケーブルをいくつも接続すると非常に不安定になる、のでケースは必須に思われる。ネット上では厚紙で作るケースの設計図なども落ちてはいるのだが 自分は見栄えに引かれてアクリルの透明なケースを買った。が、電源を入れっぱなしにしておくと、結構暖かくなる。 オーバークロックなどヘビーな使い方をするのであればヒートシンクを追加するか、最初からアルミのケースのほうがよいかもしれない。

次回は母艦からのGUIアクセスのためのTightVNCの導入、Wifi モジュールのインストールおよびIPアドレスの固定をおこなった後、nginx, php, mysqlの導入の顛末を述べる。

Raspberry Pi を注文してみた

去年の初めころからRaspberry Pi というクレジットカードサイズの電子モジュールのプロジェクトがMakerサイトなどで話題になっており、Arduinoと同じようなものかなあとぼんやり思いつつも、あまり趣味の幅を広めてもしょうがないので手つかずになっていた。

今年の初めに久々に手にした手作りPCの雑誌に80ドルでパソコンを作成、という記事があり、興味をもって読んでみれば、Raspberry Piを使ってLinux machine を作りましょうという記事であり、 これで初めてRaspberry Piのなんたるかを知ることとなった。(以下、Raspberry Piといちいち書くのが大変なのでRPiと略します)

さらにYoutubeでもこのRPiを32台クラスタ化してミニスーパーコンピューターをつくりました、ちなみに機械構造はレゴブロックです、という、なんともおいしそうな話がアップされていた。

で、ネットで調べてみると、ヘッダーでIOピンを直接接続できるということはさておいて、HMDI,SDカードソケット、USBソケットx2、EtherNetソケットX1と最初からコンピューターの周辺機器への接続が可能なようになっている。
それでもすでに自宅には3台のデスクトップパソコン、2台のノートブックとと2台のNASが稼働しているわけで、これ以上コンピューターを増やしてもしょうがないのでほおっておいたのだが…

昨日、他の方のBlogを見ていたら、RPiにWeb Serverを実装する云々、という記述を見つけた。 考えてみれば、 使われているハードの能力が初代のXBoxと同等または若干上、 実装されているRAMが512MB。 SDカードスロットから使うLinuxのImageが2GB程度ということなので、8GBくらいのSDカードを使えば WEBサーバーとして十分いけそうである。 電減が5V700ミリA以上の携帯用チャージャー(パワープラグがミニUSBなのだ)ということなので、520W電源のPCをサーバーとして常時つけっぱなしにしておくのに比べれば、電気代の節約になりそうだ。 ということで言い訳ができたので、さっそくAmazonを眺めてみれば現在主力で売られているmodel Bという機種は42ドルである。 従来見ていた雑誌などの記述では35ドルとあるが、最近ドルは弱いからねえ。

さっそく注文すると同時に、Raspberry PI User Guide というebookを購入した。 ebookのほうは即Nexus 7 Tabletにdownload できたので、現物が到着するのを待ちながら、こちらをぼちぼち読みだしている。

この書籍は2012年の6月頃に出版されており、実際のLinuxの導入などについてはすでに情報が古いと思われるが、この本を書いているEben Uptonという人がRaspberry Pi 産みの親であり、RPiを開発し、販売に至る経緯が詳しく載っていて非常に面白い。

この本を読んでわかったのだが、筆者の思い描くRPiの第一の使用用途は子供たちのコンピューター教育だ。 プログラミングができる若い世代が育っていないことへの危惧、それは現状を眺めてみればゲームを開発したいという希望を述べる高校生がいても実際に聞いてみれば学校”IT class”で習っているのは特定のOSのGUIをエンドユーザーとしてどう使うか、エクセルやワードの使い方や簡単なWEBページの書き方ぐらいで、肝心のプログラミングについては全く知らない。 自宅にある”コンピューター”と言えばxBox とかWiiで実際にプログラミングを勉強できる環境はなく、 例えパソコンが自宅にあったとしても、親が実用として使っていれば、パソコンを壊してしまう可能性が無きにしも非ずのプログラミング学習に避けるような状況でもない。

いわゆるデジタルデバイスの類は用途が固まりすぎていて、子供たちの創造意欲を掻き立てるようなツールにはなりえない。

筆者はプログラミングを教えることによって個人の能力がコンピューターばかりではなく、ほかの分野でも問題解決の思考に役立つという信念を持っていて 大学で教えた経験、そして実際の企業の開発部門の長としての経験から このような(英国の)現状を嘆いていた、ということが文面からひしひしと伝わってくる。

そんな状況で、実質25ドルくらいで10代の子供でも作れるようなプログラミング可能なコンピューターボードを作ってしまおう、という思いからこのプロジェクトは育っていった。 本人に言わせれば”25ドル”と言った覚えはなく、”教科書1冊くらいの値段で購入できる”ということをインタビューで述べたのが、レポーターが親切にドルに置き換えてくれたようで、本人は教科書はもっと高価だと思っていた節がある。
この「子供のために、裕福な家族でなくても出費がかさまないで、個人のパソコンが作れる」いう設計思想が、実機の仕様を決めている。
1)HDMIの出力のほかに古いTVにも接続できるようにRCA出力を備えている。
2)マイクロやミニのSDでは小さすぎて子供たちが扱えないので、普通サイズのSDカード。←古いカメラ類からリサイクルすればよい。
3)電源は巷にあふれているはずの携帯電話の充電器が使えるようにする。
などなど。
OSはフリーのLinux, 最初の試作機の時点ではハードの能力が低かったため、プログラミング言語はPythonに限定。(Raspberry PiのPIはPythonからきている)

ところで 筆者は最初RPi を ABCMicroと呼んでいたらしい。 これと現在発売されている機種がmodel A (Ethernetなし、USBx1)とModel B(Ethernetあり、USBx2) と命名されていることにピンとくる人は英国のパソコン事情に相当通じた人だ。 80年代にBBCが英国の子供たちのコンピューター教育を推進するためにBBCマイクロという構想を立ち上げ、これにコンペで参加したAcorn社のパソコンがその後大量に英国の学校で採用されたという経緯がある。 model A, Model B はその時のBBCMicroのモデル名なのだ。 さすがに英国人である。 茶目っ気がある。

筆者たちが最初にRPiを持って行ったのもBBCだったという。 ところが30年前とは環境が変わっていた。 法律が変わり、テキストブックの販売、教育番組のプロモーションと一緒にハードウエアをうるような以前のような行為は独占禁止の制限からBBCとしてはできない、ということがわかる。

そのかわり、テックジャーナリストが自分のブログに紹介ビデオを掲載してくれることになって、このプロジェクトの存在が知られるようになる(2011年5月)。 最初は数千個のバッチ生産で終わらせることになっていた計画が2011年のクリスマス時点でそれではすまないことが認識されはじめ、購入の意思表示をした人たちが2月29日の発売前にすでに10万人に達した。出荷までに10万台の部品を収集できるめどはなんとか立てたものの、オンラインオーダーの処理、梱包出荷の手間を考えるとプロジェクトの有志だけではいかんともしがたいことを悟り、英国のマイクロ専門業者2社が販売を代行するという合意をとりつけ、2月29日の発売にこぎつけた。
この2社(RS Components, Element14)のWEBサイトは両社とも発売当日注文が殺到したためにクラッシュしてしまい、接続できない状況が続いたという。 一人につき1台という制限がついていたのにもかかわらず、Element14のサイトではピーク時1秒間に7台のRPiが注文された。 この日のグーグルでは”Raspberry Pi”の検索数が”Lady Gaga”を上回った。

ではRPiで実際に何ができるか? 前述したようにIOピンが出ている(GPIO=>,SPI,I2C)ので、直接ハードウエアをたたけるようになっており、Pythonを使ってほかの機器の制御が可能。
メディアセンターとして使用。もともとメディアセンター用に設計されたワンチッププロセッサなのでビデオデコーディングなどに最適。
3Dグラフィックとマルチメディア機能があるので自作ゲームのプラットフォームに使える。
などなど。

実は30年以上前、自分が最初に手にしたコンピューターは英国Sinclair社のZX-80というものである。パーソナルコンピューターとして初めて200ドルを割ったものだった。当時日本から米国に駐在となった自分は日本でNECのTK-80がほしいなあと思いながら手が出せずにいた。米国ではほかにもタンディとかAtariとか売り出しはじめていたのだが、通信販売でSinclairを買った。箱を開けてみたら、何とも小さいおもちゃのような代物がでてきたのを覚えている。しかしながら、Z80のプログラミング、Basicの基本はこれで覚えた。多くのユーザーと同じように(RFIがあまりにもひどかったので)DIYでアルミの箱に基盤を移し、メモリを亀の子はんだ付けで2倍に増やし、メンブレーンのキーボードもフルキーボードに移植した記憶がある。 その後、フロッピー付きのTRS-80 に移行したが、Sinclairにはかなりの思い入れがある。 上記のユーザーガイドでもSinclairのZX-81 やspectrumに触れるくだりがあり、非常に懐かしかった。

今回購入したRPiについてはサーバーにしてしまうつもりだが、なんといっても30~40ドルの品物である。 もう一台買って少し遊んでみようか、と最初の一台が到着する前からいろいろ妄想を膨らませている。