2015年12月7日月曜日

Raspberry Pi Zero シリーズで本書の演習は実行できるか

はじめに

2015年11月26日、Raspberry Piの新型であるRaspberry Pi Zeroが発表され、その価格が5ドルということでで大きな話題となりました。長らく海外のみでの販売でしたが、2017年2月に日本でも発売されることが報じられました。さらに、2017年2月28日にはWifiとBluetooth機能のついたRaspberry Pi Zero Wが発表されました。

このRaspberry Pi Zero シリーズで本書の演習を実行できるのか、本ページで解説したいと思います。まずはRaspberry Pi Zero シリーズについて整理してみましょう。下記のバージョンがあります。

製品名 海外での価格 特徴 販売店
Raspberry Pi Zero V1.2 5ドル カメラ利用不可・Wifi/Bluetoothなし 現在は入手困難
Raspberry Pi Zero V1.3 5ドル カメラ利用可(要専用ケーブル)・Wifi/Bluetoothなし KSYスイッチサイエンス
Raspberry Pi Zero W 10ドル カメラ利用可(要専用ケーブル)・Wifi/Bluetoothつき KSYスイッチサイエンス

下図において、左から、V1.2、V1.3、W です。V1.2にのみピンヘッダがついていますが、後述するようにこれは自分で半田づけしたものです。


結論を述べますと、Raspberry Pi Zero シリーズを使う場合、本書のようにRaspberry Piにディスプレイ、マウス、キーボードを接続して電子工作用のプログラムを書く、というような利用スタイルはあまり適していません。

それでは、どのような使用法に向いているでしょうか。本書の演習の例で言えば、キャタピラ式模型に搭載し、模型をコントロールするような用途(10章)に向いています。それにより、小型化、省電力化が図れる、というわけです。

これは、Raspberry Pi Zero シリーズに限らず、下図(右)のRaspberry Pi Model A+にも同じことが言えます。

Raspberry Pi Zero V1.2(左)とRaspberry Pi Model A+ (右)

それを理解した上で、敢えて本書のスタイルでRaspberry Pi Zeroを用いるとどうなるかを以下に簡単に記します。

接続方法

接続は下図のようになります(図はZero V1.2)。本書で主なターゲットとするRapsberry Pi Model B/B+/Raspberry Pi 2 Model B/Raspberry Pi 3 Model Bと異なり、以下の3つのものが必須となります。
  • HDMI(メス)-ミニHDMI(オス)変換アダプタ
  • USB OTGケーブル
  • Zero V1.2/V1.3の場合:USBハブ(ACアダプターつきのセルフパワータイプ)
    マウス、キーボード、Wifiアダプタなどを接続します。ACアダプターのないバスパワータイプを用いると、Wifiが不安定になり途中で接続が切れることがあります
  • Zero Wの場合:USBハブ(ACアダプターなしのバスパワータイプでOK)
    マウス、キーボードを接続します。Wifiデバイスは基板上に実装されているので、Wifiアダプタは不要です。

図を見てわかる通り、Rapsberry Pi Model B/B+/Raspberry Pi 2 Model B/Raspberry Pi 3 Model Bでは必要なかった物品が必要となり、Raspberry Pi Zeroの低価格性、省スペース性があまりいかされていませんね。これが、本書のスタイルでのRaspberry Pi Zeroの利用をお勧めできない理由です。

なお、上級者向けとなりますが、Raspberry Pi Zeroを用いるには、「ディスプレイ・マウス・キーボードを接続せずにRaspberry Piを利用する」で解説する方法が適しています。その場合、Wifiデバイスが基板上に実装されているZero Wが適しています。それにより、Raspberry Pi Zeroに接続するのは電源ケーブルのみとできるからです(セットアップ時にはディスプレイ等の接続が必要ですが)。

GPIO ポートの利用

さらに、Raspberry Pi Zero シリーズには、GPIOポートにピンがあらかじめ取りつけられていません(下図)。別途2x20のピンを購入し、自分ではんだ付けする必要があります。
例えば秋月電子通商さんのピンヘッダ 2×20 (40P)などです。


なお、このピンヘッダの半田づけが嫌だという場合、下記のようなテストワイヤをGPIO部の穴に差し込んで使うという方法もあります。ただし、これはあくまでテスト用であり、本書のように何度もGPIOを利用する場合、ピンヘッダを半田付けするのをお勧めします(何度も抜き差しすると接触が悪くなるためです)。

本書の演習の実行について

Raspberry Pi Zero V1.3/Wを用いて本書の演習を行う場合、注意が必要なのは下記となるでしょう。
  • 5.6 カメラのシャッターの演習:カメラモジュールを接続するための専用ケーブルが必要
  • 5.7 MP3ファイルの再生:オーディオジャックがないので、音声はHDMI経由のみでの出力となるでしょう
  • 6.5 音声のボリューム:同様に音声はHDMI経由のみとなるでしょう
  • 10.4 キャタピラ式模型へのカメラの搭載:カメラモジュールを接続するための専用ケーブルが必要
なお下図は、初期バージョンのRaspberry Pi Zero V1.2で、4章のLEDの点滅(Lチカ)を試しているところです。


おわりに

Raspberry Pi Zero シリーズで本書の演習が実行できるか、解説しました。使いはじめるまでにはんだづけが必要であったり、新たな物品を購入しなければならないなど、ハードルはやや高いと言えるでしょう。そのため、冒頭で紹介したような、キャタピラ式模型に搭載するような用途での利用には、Raspberry Pi Model A+を個人的にはお勧めします。

しかし、Raspberry Pi Zeroのサイズの小ささは、アイディア次第で面白く使えそうです。腕に覚えのある方はチャレンジしても良いかもしれません。

2015年11月5日木曜日

Raspberry Pi公式タッチディスプレイで本書の演習を実行する

はじめに

Raspberry Piは名刺サイズの小型コンピュータとして注目を集めましたが、大型のHDMIディスプレイに接続すると、そのメリットをあまり享受できません。机の上をコンパクトにまとめるため、小型のディスプレイが欲しいところでした。

2015年9月、Raspberry Pi財団より公式の7インチタッチディスプレイが発表され注目を集めました。
しばらく入手しにくい時期が続きましたが、私もようやく入手できましたので本書の演習が実行できるかどうか、試してみました。

以下の写真は、このタッチディスプレイにキーボードとマウスを接続し、Lチカの演習を行っている様子です。タッチをマウスの代用にできるのですが、やはり使い慣れたマウスがあると便利なので接続しています。


入手方法

下記のように、様々なお店で入手可能です。
購入する際は注意すべきことがあります。

Raspberry Pi用のタッチディスプレイはサードパーティ製も含め様々な種類のものが販売されていますが、ここで紹介するものはRaspberry Pi財団公式のものです。

サードパーティ製のものは設定方法や性能などが全く異なります。購入する際はそれが公式のものであることをよくチェックしましょう(上のリンクは全て公式のものです)。

使用している様子

このタッチディスプレイの解像度は800x480です。ターミナルソフトウェアLXTerminalを起動したときの様子は下図ですが、画面の広さがどの程度かの目安になるのではないでしょうか。


LXTerminalの他、IDLEおよびそのエディタを起動した様子が下図です。各アプリケーションをそれぞれ最大化し、画面上部のタスクバーを用いて(あるいはキーボードショートカットのAlt+Tabで)アプリケーションを切り替えて使うのが現実的でしょう。


組み立て

私が購入した際は、以下の図のような状態で届きました。メス-メスのジャンパーワイヤが4本付属しましたが、実際には2本しか用いません。

説明書などは付属しませんでした。以下のページは説明が英語ですが図が豊富ですので、これを参考にすると迷わずに組み立てられるのではないでしょうか。
ポイントは下記の通りです。
  • リボンケーブルの表裏を間違えないよう注意する
  • ディスプレイ基板の5VピンとGNDピンをRaspberry PiのGPIOの5VピンとGNDピンにメス-メスのジャンパーワイヤで接続する(ピンを間違えないように!
  • microUSBの電源はタッチディスプレイの基板側に接続する。また、電源は2Aの電流を流すことのできるものを用いる。1.2Aしか流せない電源を用いると、スクリーンセーバーからの復帰時(つまり電力を多く消費するとき)にRaspberry Piが落ちるという経験をしました。


タッチディスプレイの裏側にRaspberry Pi 2を固定した様子が下図になります。

付属する物品のままではこのディスプレイを立てることができません。そこで、私は手元にあったタミヤの楽しい工作シリーズのパーツを下図のように取り付けました。


下記のキットのL字パーツが使えるのではないかと思います。
さらに、厚みを出すためにユニバーサルアームの切れ端を挟み、楽しい工作シリーズの3mm径のビスで固定しています。

海外のショップではタッチディスプレイ用のフレームも合わせて購入できるところもあるようで、ちょっとうらやましいところです。日本では下記で同じものが入手できるようです(どちらもケースのみの価格です)
なお、本書のように電子工作を行う場合、Raspberry PiのGPIOポートが手元になければいけません。しかし、上図のようにタッチディスプレイの裏にRaspberry Piを固定するとGPIOを用いるのが難しくなります。

そこで、下図のように、GPIOのピンを引き出し、ブレッドボード上で全てのピンを利用できるようにします。タッチディスプレイに必要な5VとGNDもこのブレッドボードからとるようにしています。


GPIOをブレッドボードに引き出すためには、例えば下記の商品があります。上の写真ではSWITCHSCIENCEさんのものを購入して用いています。

これらの商品は、はんだづけが必要なキットであることが多いと思います。

なお、上図の黒いフラットケーブルの向きは、間違った向きにも取り付けられるようになっています。正しい向きに取り付けないとタッチディスプレイや演習で作成する回路を破損する恐れがありますのでご注意ください。この件も含め、本ページの内容を実行する際は全て自己責任でお願いします。

また、この40ピンフラットケーブル(リボンケーブル)ですが、上の写真のSWITCHSCIENCEさんのものはかろうじて使える長さであるものの、もう少し長いと配置に余裕ができて嬉しいところです。探してみたのですが、なかなか見つかりませんのでしたので、下記のものを購入して自作しました。
RSコンポーネンツですので、個人での利用は若干面倒かもしれないのがネックですね。作成の際はこちらの動画を参考にしました。万力(バイス)が必要ですが、amazonで1000円前後で購入できます。

Raspberry Piの設定

NOOBS 1.4.2以降 (jessie) とNOOBS 1.4.1 (wheezy) に含まれるRaspbianで動作を確認しました。

まず、NOOBSのインストール時にこの公式ディスプレイを使えたのはNOOBS 1.5.0以降のみでした。

NOOBS 1.4.2 (jessie)と1.4.1 (wheezy)では、どちらもインストール時に画面に何も映らず使えませんでした。そのため、NOOBS 1.4.2と1.4.1で公式ディスプレイを使用するには下記のどちらかの方法をとる必要があります。

  • あらかじめ別のディスプレイを用いてインストールしたSDカードを用いて起動する
  • 書籍付録PDF収録の付録Gで解説されている手法で、WindowsなどのPCからRaspbianのイメージを直接SDカードに書き込む。そしてそのSDカードで公式ディスプレイを利用する。この場合、初回起動時に設定アプリケーションでファイルシステムの拡大(Expand Filesystem)を実行することを忘れないこと

2つめの手法は、NOOBSを用いず、Raspbianのイメージを直接SDカードに書き込む手法で、慣れるとこちらの方が楽なのですが、書き込み先のSDカードのドライブを間違えるとPC環境を壊してしまうので、注意しましょう。上記PDFにはどこで注意すべきかも記してあります。

さて、上記のいずれかの方法でRaspbianをセットアップした後、Raspberry Piをタッチディスプレイに接続して電源を入れるとそのまま画面が映ります。ただしNOOBSの各バージョンで注意があります。

NOOBS 1.4.2以降 (jessie) の場合、デフォルトでは752x448となってしまいます。下図のように設定アプリケーションのSystem→OverscanをDisableに設定してから再起動しましょう。以後は800x480の解像度で利用可能になります。(下記の図には、イメージ書き込みでインストールした時に必要な「Expand Filesystem」も一番上に見えますね)


NOOBS 1.4.1 (wheezy) の場合、画面は映るのですが、画面が180度回転して上下逆さになった状態になります。ターミナルを起動して、下記のコマンドを実行してから再起動すると向きが正しくなります。
  • sudo apt-get update
  • sudo apt-get upgrade
2番めのコマンドは、OSの更新を行いますので数十分かかる場合があります(OSがwheezyのまま、カーネルのバージョンが4.1.7や4.1.13になるでしょう)。
さらに、sudo raspi-configで設定アプリケーションを実行し、「8 Advanced Options」→「A1 Overscan」の設定をDisableにして再起動すれば、800x480の解像度でディスプレイを用いることができます。

タッチスクリーン用ケースとともに使う場合

このタッチスクリーンを公式のケース(例えば秋月電子通商さんのこちら)に収めて利用する場合、ディスプレイの上下が逆さな状態で設置して利用するのがデフォルトとなってしまっています。その場合、下記の設定をすることで、映像を180度回転して正しい向きで利用できるようになります。

まず、ターミナルLXTerminalを起動し、下記のコマンドを実行します。
sudo leafpad /boot/config.txt
このコマンドにより、設定ファイル/boot/config.txtが管理者権限のテキストエディタleafpadで開きますので、末尾に下記の1行を追記します。
lcd_rotate=2
追記したら保存してRaspberry Piを再起動します。映像が180度回転され、正しい向きでケース入りのタッチディスプレイを利用できるはずです。

おわりに

というわけで、Raspberry Pi公式タッチディスプレイの利用法を紹介しました。このタッチディスプレイの評価は、800x480という解像度をどうとらえるかで分かれるだろうと思います。

10年くらい前のノートPCには、800x600という解像度のものが多くありました。そのようなノートPCを使った経験のある方なら、このタッチディスプレイをそれほど違和感なく使えるのではないでしょうか。

逆に、広いデスクトップしか使ったことがないという方には厳しいかもしれません。

個人的には、Rapsberry Pi一式がコンパクトにまとまり、机が広く使えるようになるためとても気に入っています。

2015年4月18日土曜日

インストールしておくと便利なアプリケーションなど

はじめに

新しいバージョンのRaspberry Pi が発売されるたびに性能が向上し、Raspberry Piを通常のPCの代替とすることも現実的になってきました。そこで、Raspberry Piを通常のPCのように用いる際、インストールしておくと便利なアプリケーションや設定等をいくつか紹介します。全てのRaspberry Piで動作するはずですが、より快適に動作する環境という意味で、Raspberry Pi 2やPi 3を推奨します。

なお、このページのコマンドを実行する前に、必ず下記のコマンドをターミナルソフトウェアLXTerminal上で実行し、インストール可能なパッケージのリストを更新しておいてください。
$ sudo apt-get update

日本語入力

日本語入力のためのアプリケーションは、用いているRaspbianのバージョンによってお勧めが異なります。

まず、NOOBS 1.4.2以降のRaspbian(Jessie)の場合、Googleが開発した日本語入力システムMozcをインストールするのが良いと思います。
$ sudo apt-get install ibus-mozc
インストール後はまずRaspberry Piを再起動します。その後、下図のように「US」と書かれた部分をマウスでクリックし「日本語 - Mozc」を選択してください。あとは「半角/全角」キーで日本語入力のオンオフを切り替えられます。


一方、NOOBS 1.4.1までのRaspbian(Wheezy)の場合、ターミナルソフトウェアLXTerminal上で下記のコマンドを実行すると、uimとuim-anthyと呼ばれるアプリケーションがインストールされ、日本語入力が行えます。ただし、sudoで起動したアプリケーションには日本語入力できませんのでご注意ください。
$ sudo apt-get install uim uim-anthy
インストール後は一度Xを再起動してください。「半角/全角」キーを押すか、「Shift+スペース」により日本語入力モードのオンオフを切り替えできます。

日本語フォント

NOOBS1.4.2~NOOBS 1.9.2のRaspbian(Jessie)には日本語が含まれておらず、日本語表示の設定をすると全て文字化けしてしまいました(NOOBS 1.9.3以降では解決されています)。
また、 NOOBS1.4.1までのRaspbian(Wheezy)ではそのままでも日本語表示できますが、IDLE上で日本語入力するときに文字化けするなどの現象が時々起こります。

以上のような問題を、日本語フォントを追加インストールすることで解決できます。 まず、Jessie系列のRaspbianにおける文字化けを回避する目的でしたら、下記のフォント一つのみのインスト―ルで構いません。
$ sudo apt-get install fonts-vlgothic
それ以外にも、下記のフォントがインストール可能です。
$ sudo apt-get install ttf-kochi-gothic ttf-kochi-mincho fonts-takao fonts-vlgothic fonts-ipafont xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname 
インストール後はXを再起動すると、メニューなどで用いられるフォントが変わっているはずです。

ブラウザ

RaspbianのデフォルトのブラウザはNOOBS 1.9.2まではepiphanyでしたが、ブックマーク機能がやや貧弱でした。ブックマーク機能の豊富なブラウザを用いるようにすればより便利にブラウジングできるでしょう。ただし、Raspbianのバージョンにより、利用可能なブラウザは異なります。

まず、NOOBS 1.9.3以降のRaspbian(jessie)では、Google ChromeのベースとなったChromiumブラウザがデフォルトブラウザとなっています。最新のNOOBSを利用できる方は、これを用いるのが一番簡単でしょう。GoogleのアカウントでChomiumにログインすると、Google Chromeとブックマークや設定を同期することができます。

ChromiumブラウザがデフォルトではないRaspbian(jessie)でも、Firefoxの長期サポート版であるFirefox ESRが利用できます。ターミナルを起動して下記のコマンドを実行することでインストールできます。
$ sudo apt-get install firefox-esr firefox-esr-l10n-ja
インストール後は、メニューから「インターネット」→「Firefox ESR」で起動できます。


NOOBS 1.4.1以前に含まれるRaspbian(wheezy)ではバージョンの古いChromiumブラウザをインストールできます。 ターミナルを起動して、下記のコマンドを実行してインストールします。
$ sudo apt-get install chromium-browser chromium-l10n
ただし、このChromiumはかなり古いため、Googleアカウントでログインしてブックマークを同期する、というChromiumの大きな特長を利用することができません。ですので、新しいNOOBS (Raspbian)を利用することを検討するのが良いでしょう。

オフィススイートLibreOffice

Microsoft Office互換のオフィススイートとしてOpenOfficeがありますが、そこから派生したのがLibreOfficeです。 LibreOfficeはNOOBS 1.4.2に含まれるRaspbianからはデフォルトでインストールされていますが、それ以前のバージョンのNOOBSでは 下記のコマンドでインストールします。
$ sudo apt-get install libreoffice
インストール後は、メニューから「オフィス」を辿ると各種アプリを起動できます。Base(データベース)、Calc(表計算)、Draw(お絵描き)、Impress(プレゼンテーション)、Writer(ワープロ)があります。Microsoft Officeで作成されたファイルの読み書きもできますが、RaspbianにはWindowsやMac OS Xと同じフォントはインストールされていませんので、互換機能はオマケ程度に考えた方が良いでしょう。

画像編集ソフトgimp

Photoshopのように画像編集を行えるソフトウェアがgimpです。下記のコマンドでインストールします。
$ sudo apt-get install gimp
インストール後は、メニューから「グラフィックス」→「GIMP(GNU Image Manipulation Program)」を選択することで起動できます。

お絵描きソフトinkscape

Illustratorのようにお絵描きを行えるソフトウェアがinkscapeです。下記のコマンドでインストールします。
$ sudo apt-get install inkscape
インストール後は、メニューから「グラフィックス」→「Inkscape」を選択することで起動できます。

テキストエディタgedit

RaspbianにはLeafpadというテキストエディタがデフォルトでインストールされていますが、書籍で触れたようにこれはプログラミングには向きません。プログラムを書くのに適したテキストエディタとしては例えばgeditがあり、下記のコマンドでインストールします。
$ sudo apt-get install gedit
インストール後は、メニューから「アクセサリ」→「gedit」を選択することで起動できます。

ターミナルソフトウェアgnome-terminal

RaspianにはLXTerminalがインストールされており、通常はこれを用います。これでは機能が足りないという場合、gnome-terminalと呼ばれるソフトウェアをインストール用いることができます。私自身は、ターミナルの文字コードをEUC-JPやShift JISに変更したいときにこれを用いています。下記のコマンドでインストールします。
$ sudo apt-get install gnome-terminal
インストール後、メニューには現れませんので、LXTerminalから下記のコマンドで起動します。
$ gnome-terminal
また、本ページの最後で紹介する「アプリケーション・ランチャー」の追加の方法で「アクセサリ」→「端末」を追加すると、アプリケーション・ランチャーからも起動できるようになります。

画像閲覧のデフォルト

ファイルマネージャで画像ファイルをダブルクリックすると、Raspbianのバージョンにより、「NetSurf WebBrowser」か「イメージビューワ」のどちらかで開かれるか、あるいは開くアプリケーションを問われるだろうと思います。イメージビューワが、「起動が高速」、「画面解像度に応じて画像が縮小表示される」という点でおすすめできますので、こちらをデフォルトにすることを推奨します。

方法は、「ファイルマネージャで画像ファイルを右クリック」→「アプリケーションで開く」→「選択したアプリケーションをこのファイルタイプのデフォルトアクションとする、にチェックした上で起動するアプリケーションを選択する」という流れになります。イメージビューワは「アクセサリ」→「イメージビューワ」と辿って選択できます。

画像閲覧以外にもこの方法でデフォルトアプリケーションを選択できますので、覚えておくと良いでしょう。

私の場合、他にはPDF閲覧のデフォルトアプリケーションをgimpからPDF Viewer(xpdf)に変更しました。

アプリケーション・ランチャーやデスクトップへのアイコン追加

最後に、アプリケーション・ランチャーやデスクトップにアプリケーション起動用のアイコンを追加する方法を紹介します。Raspberry Piのデスクトップの画面上部のバーは「パネル」と呼ばれ、デフォルトでは下図のように左から「メニュー」、「アプリケーション・ランチャー」、「タスクバー」などで構成されます。

なお、パネルがどのような要素で構成されているかは、パネル上で右クリックし「パネルのアイテムの追加・削除」を選択すると、下図のような画面が現れますので、そちらで知ることができます。


まずはアプリケーション・ランチャーにアイコンを追加する方法です。

デフォルトでアプリケーション・ランチャーにいくつか存在するアイコンの上で右クリックし、「アプリケーション・ランチャーSettings」を選択します。


すると、下図のようにアプリケーション・ランチャーの設定画面が現れます。

右側にインストールされているアプリケーションの一覧が現れますので、どれか一つを選択肢、「追加」ボタンを押すと左側にコピーされ、アプリケーション・ランチャー上に表示されます。さらに「上へ」ボタンで好みの位置に移動します。

ランチャのアイコンのどれかを削除したい場合もこの設定画面を用います。


実際に、上でインストールしたChromiumブラウザのアイコンを追加した様子が下図です。


次に、デスクトップ上にアイコンを追加する方法です。下図のように、追加したいアプリケーションをメニューからたどります。そして、アプリケーション名の上で右クリックし、「デスクトップに追加」を選択します。



以上で、デスクトップ上にアプリケーション起動用のアイコンが現れます。


2015年4月16日木曜日

ブラウザepiphanyの検索エンジンを変更する

Raspberry Pi 2が発売されましたが、これまでのRaspberry Piに比べ、
  • プロセッサの動作周波数が約1.3倍に(700MHz→900MHz)
  • CPUがシングルコア(1コア)からクアッドコア(4コア)に
などの変更が行われたため、動作が快適になっています。

特に、ブラウザepiphanyでのインターネット閲覧はデータ量の多くないページならば快適に閲覧することができます。

このepiphanyブラウザのアドレス欄に文字列を入力すると、DuckDuckGoというサイトでの検索が行われます。これをGoogle、Yahoo、Bingなどの検索エンジンに変更できると便利です。ここではその方法を紹介します(参考にしたサイト)。

まず、ターミナルソフトウェアLXTerminal上で下記のコマンドを実行し、設定ファイルをテキストエディタleafpadで開きます。
$ sudo leafpad /usr/share/glib-2.0/schemas/org.gnome.epiphany.gschema.xml
この設定ファイルは長いファイルになっていますので、内容を破壊しないよう注意してください。そして、12行目に下記のように検索サイトを設定している箇所がありますので見つけます。
<key type="s" name="keyword-search-url">
         <default>'https://duckduckgo.com/?q=%s&t=raspberrypi'</default>
         <summary>URL Search</summary>
         <description>Search string for keywords entered in the URL bar.</descri
ption>
</key>
太字で示した、一重引用符(')で囲われた部分が検索エンジンを示しています。この部分を下記の3つのうちお好みの1つに差し替えてください。上から順にGoogle、Yahoo、Bingとなっています。一重引用符(')を消さないよう注意しましょう。
https://www.google.co.jp/search?q=%s
http://search.yahoo.co.jp/search?p=%s
http://www.bing.com/search?q=%s
変更が終わったら保存してleafpadを閉じます。

次に、その変更を反映する作業です。まず、必要なソフトウェアパッケージを下記のコマンドでインストールします。これは一度実行すれば以後必要ありませんし、既にインストールされている、という方もいるでしょう。
$ sudo apt-get update
$ sudo apt-get install libglib2.0-bin
インストールが終わったら、ターミナルで下記のコマンドを実行します。
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas
それが終わったらepiphanyを再起動し、アドレス欄に何か文字列を入力してみてください。検索サイトが変更されていると思います。

なお、ブラウザなどに日本語を入力する方法は「インストールしておくと便利なアプリケーションなど」に記されています。

2015年4月6日月曜日

プロキシ(Proxy)環境下での本書の演習の実行

はじめに

職場や学校などでは、ネットワークに接続するためにプロキシ(Proxy)サーバーと呼ばれるものを介する場合が多いと思います。そのような環境下では、本書でネットワーク接続を必要とする演習をそのままでは実行できません。

下記の設定を行えば、全ての演習を実行できるようになりますが、上級者向けの内容ですので、職場や学校のネットワーク管理者など、ネットワークに詳しい方と一緒に作業することをお勧めします。

apt-getコマンド

ソフトウェアのインストールの際などに実行するapt-getコマンドを用いるための方法です。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル/etc/apt/apt.confを作成します。
$ sudo leafpad /etc/apt/apt.conf
このファイルに下記の内容を記述します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
Acquire::http::proxy "http://プロキシサーバー名:ポート番号/";
Acquire::https::proxy "https://プロキシサーバー名:ポート番号/";
Acquire::ftp::proxy "ftp://プロキシサーバー名:ポート番号/";
Acquire::socks::proxy "socks://プロキシサーバー名:ポート番号/";
記述が終わったら、ファイルを保存してからleafpadを閉じてかまいません。

以上で、「sudo apt-get install (パッケージ名)」、「sudo apt-get update」、「sudo apt-get upgrade」などのコマンドが実行できるようになります。

wgetコマンドやブラウザなど

次に、ファイルのダウンロードなどで用いるwgetコマンドや、ブラウザを利用するための方法です。ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル.bashrcを編集用に開きます。
$ leafpad .bashrc
.bashrcファイルは既存のファイルなので様々な内容が書かれています。この内容を壊さないように注意しながら、ファイルの末尾に下記の内容を追記します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。(2015/12/10追記:以前の記述、太字部が間違っていたので訂正しました)
export http_proxy=http://プロキシサーバー名:ポート番号/
export https_proxy=http://プロキシサーバー名:ポート番号/
export ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述した後、この設定を読み込む必要がありますが、そのためにはRaspberry Piを再起動してしまうのが簡単です。再起動後、ブラウザepiphanyでインターネット上のウェブサイトを閲覧できるようになっているはずです。

なお、NOOBS 1.4.2(Jessie)以降に含まれるRaspbianのようにデフォルトでGUI環境で起動させた場合、ブラウザでProxyを有効にするにはターミナルからコマンドでブラウザを起動しなければなりませんでした。ご注意ください。
Chromiumブラウザの場合
chromium-browser &
epiphanyブラウザの場合
epiphany &

gitプロトコルに対するgitコマンド

以上で本書の内容のほとんどを実行できるようになりましたが、wiringPiをインストールするために本書213ページで紹介したコマンド「git clone git://git.drogon.net/wiringPi」だけはまだ実行できません。それを可能にする方法を記します。なお、NOOBS 1.4.2(Jessie)以降に含まれるRaspbianには、wiringPiはデフォルトでインストールされていますので、上記コマンドの実行の必要はありませんのでご注意ください。

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにcorkscrewというコマンドをインストールします。
$ sudo apt-get install corkscrew
次に、以下のようにテキストエディタleafpadでホームディレクトリ上にgit-proxy.shという名前のファイルを作成します。
$ leafpad git-proxy.sh
この中に、下記のような3行を記します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
#/bin/bash
CORKSCREW=`which corkscrew`
$CORKSCREW プロキシサーバー名 ポート番号 $1 $2
記述したら保存してからleafpadを閉じて構いません。次に、そのままLXTerminal上で下記のコマンドを実行し、git-proxy.shを実行可能ファイルにします。
$ chmod a+x git-proxy.sh
最後に、leafpadで設定ファイル.bashrcを開きます。
$ leafpad .bashrc
このファイルの末尾まで移動し、下記の1行を追記します。
export GIT_PROXY_COMMAND=/home/pi/git-proxy.sh
記述したら保存してleafpadを終了します。その後、Raspberry Piを再起動して設定を再読み込みすれば、 wiringPiのダウンロード用のコマンド
$ git clone git://git.drogon.net/wiringPi
が実行できるようになっているはずです。

時刻合わせ

プロキシ環境下ではRaspberry Piの時刻合わせが機能しない場合が多いと思います。そのような場合、もし職場や学校内に時刻合わせサーバーが存在すれば、下記の方法で時刻を合わせることができます。

まず、leafpadで設定ファイル/etc/ntp.confを開きます。
$ sudo leafpad /etc/ntp.conf
ファイル内で下記のような箇所を見つけ、編集します。時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
(略)
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server その環境の時刻合わせサーバ  ←時刻合わせサーバが存在すれば記す

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#server 0.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 1.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 2.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
#server 3.debian.pool.ntp.org iburst  ←ここは#でコメントアウト
(略)
記述後、Raspberry Piを再起動し、数分待てば時刻が合うようになります。

カーネルやファームウェアのアップデートに用いるrpi-updateコマンド

Raspberry Piのカーネルやファームウェアのアップデートにはrpi-updateと呼ばれるコマンドを用いますが、やはりプロキシ環境下では実行できません。 本書内ではこのコマンドを使いませんが、参考のためにその方法を記しておきます。

ターミナルソフトウェアLXTerminalを起動し、ホームディレクトリで以下のコマンドを順に実行します。
$ rm rpi-update
$ wget https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update
$ sed -e "s/curl/curl -x プロキシサーバー名:ポート番号/" rpi-update > rpi-update-proxy
$ chmod a+x rpi-update-proxy
$ sudo UPDATE_SELF=0 ./rpi-update-proxy
補足すると、rpi-updateはcurlというコマンドでファイルをダウンロードするのですが、curl実行の際にプロキシを経由するようなオプションをつけて呼び出すrpi-update-proxyというコマンドを3行目で生成しています。さらに、rpi-updateは起動時に自分自身を最新版に置き換えようとするので、「UPDATE_SELF=0」によりそれを無効化して実行しています。

プロキシ(Proxy)環境下での本書9章と10章の実行

さて、以上で本書の内容をプロキシ環境下で学べるようになりましたが、9章と10章を学ぶ際にはもう一点、注意すべきことがあります。

これらの章では、PCやスマートフォンのブラウザを通して、同一ネットワーク内のRaspberry Piにアクセスし、回路を制御します。この際の模式図が下図です。このPCやスマートフォンでは、通常のインターネットへのアクセスの際にプロキシサーバを経由しなければなりませんが、同一ネットワーク内のRaspberry Piへアクセスする場合は、プロキシサーバーを経由せず直接アクセスせねばなりません。

そのために、Raspberry PiのIPアドレス(ここでは192.168.1.3とします)を「プロキシの例外サイト」としてあらかじめ登録しておく必要があります。


Windowsの場合の例外サイトの設定法を示したのが下図です。「インターネットオプション」から「LANの設定」を辿るとプロキシサーバーを設定できます。さらに「詳細設定」ボタンをクリックすることで、例外サイトを設定できます。図では192.168.1.3が登録されていることがわかるでしょう。


この「例外サイト」の設定はMac OSXにも存在します。「システム環境設定」→「ネットワーク」
→「詳細」→「プロキシ」です。

しかし、iOS(iPhoneやiPad)の場合、この例外サイトの設定は存在しないため、iOSでプロキシの設定自体を無効にする(すなわち、上の図でインターネットへのアクセスができない状態にする)しかありません(pacファイルと呼ばれるものをサーバーに設置してこの問題を回避する方法もありますが、ここでは割愛します)。

androidの場合、Wifiの設定に例外サイトの設定があるのですが、この設定が機能しないことも多く、やはりプロキシの設定を無効にしてRaspberry Piにアクセスせざるを得ない場合があります。

2015年1月28日水曜日

読者の方々の声

発売以来、たくさんの方にご愛読頂きありがとうございます。
ここでは、読者の方々のレビューなどをご紹介したいと思います。

ご利用に感謝

         AD変換やI2Cの演習を試されています。

         電子工作の参考書としてご利用頂いております。

         電子工作セミナーの教材としてご利用頂いています。

         ロボット制作教室の教材としてご利用頂いています。

         参考書としてご紹介頂いています。

          AD変換のプログラムをErlang環境に移植されています。

          手作り目覚まし時計を作る際にタクトスイッチを利用されています。

          本書をベースに様々な電子工作の例を試されており、解説も充実しています。

          遠隔操作できるカメラを作成する際、10章や追加コンテンツの内容の一部を
          参考にして頂いております。

          人感センサーを利用する際に6章のA/D変換の章を参考にして頂いております。

          Raspberry Pi 2で本書の内容を順に試されています。
          動作確認がとれている範囲は問題なく動いているようで安心しました。

          フィッシャーテクニックのブロックキットで作成した自走ロボットに
          10章のカメラつき回路を搭載してブラウザ経由で操作されています。

          LED点滅から順にプログラムの改造を加えながら試されていて参考になります。

レビュー

2015年1月7日水曜日

(追加コンテンツ)サーボモーターをPCやスマートフォンから角度制御する

はじめに

(注)WebIOPiをRaspberry Pi 2やRaspberry Pi 3で用いる場合、必ず「本書発売後の追加情報」の手法でインストールしてください。

本書ではサーボモーターを
  • 8.6 PWM信号によるサーボモーターの角度制御
という節で取り扱いました。

その際「入力部」として
  • 半固定抵抗のつまみ→AD変換→Raspberry Pi
という構成を用い、つまみの角度を読み取りました。そしてその角度に応じて
  • Raspberry Pi上のwiringPiライブラリ→サーボモーター(1個)
という流れの「出力部」により、サーボモーターを精度の良いPWM信号で制御しました。

その様子は公式のYoutube動画「ブルーバックス『RaspberryPiで学ぶ電子工作』」でも見ることができます。

この「入力部」のかわりに、9章で学んだ「WebIOPiを用いたPCやスマートフォンとの連携」の手法を用いると、サーボモーターをPCやスマートフォンから操作することができます。

ページの都合で本書内では紹介できなかった内容ですが、この補足ページではその方法を紹介します。

なお、このページではサーボモーター1個のみの制御を行いますが、Raspberry Pi Model B+以降(Raspberry Pi 2 Model Bを含む)ではサーボモーター2個までを精度の良いハードウェアPWM信号で制御できます。それらを出力できるピンの情報は「本書発売後の追加情報」を御覧ください。

さて、この方法を身につけると、例えば10章で体験した「カメラつきキャタピラ式模型」を改造することで、
  • カメラの上下の向きのサーボモーターによる制御
がブラウザを通して可能になります。具体的には、以下の動画のような動作が可能になります。まずは御覧ください。


以下、実現方法を順に紹介します。

なお、本ページの内容を学ぶ前に「8.6 PWM信号によるサーボモーターの角度制御」および「9章 WebIOPiを用いたPCやスマートフォンとの連携」をあらかじめ学び、必要なライブラリやソフトウェアをインストールしておく必要があります。

さらに、「カメラつきキャタピラ式模型」の改造まで行う場合は「10.4 キャタピラ式模型にカメラを搭載しよう」まで学んでおく必要があります。

必要な物品

必要な物品は下記のようになります。
  • ブレッドボード
  • ジャンパーワイヤ(オス-メス、オス-オス)
  • 電池ボックス(単3×4)
  • サーボモーター1個
さらに、「カメラつきキャタピラ式模型」の改造まで行う場合は「10.4 キャタピラ式模型にカメラを搭載しよう」で作成した模型が必要になります。


準備

ブラウザからサーボモーターを制御するためには、WebIOPiからwiringPiのPythonモジュールWiringPi2-Pythonを呼び出す必要があります。その際、WebIOPiはPython3で動いていますので、WiringPi2-PythonをPython3用にインストールする必要があります。

8.6節でwiringPiライブラリと、Python2用のWiringPi2-Pythonのインストールが済んでいますので、その続きとしてPython3用のWiringPi2-Pythonのインストールを実行します。ターミナルを開き、下記を実行します。
$ cd WiringPi2-Python
$ sudo python3 setup.py install
以上でPython3用WiringPi2-Pythonのインストールが完了しました。なお、9.2.2節で解説したWebIOPiのインストールも終わっていないと、上記のインストール時にエラーがでますのでご注意ください。

なお、2016/2/12以降にWiringPi2-Pythonをダウンロードした方は、エラーが出てWiringPi2-Pythonを読み込んだWebIOPiの起動に失敗します。その場合、下記の手順でエラーの起きないWiringPi2-Pythonをダウンロードし、インストールし直してください。

まず、ターミナルで下記のコマンドを実行し、古いWiringPi2-Pythonを削除します。
$ sudo rm -rf WiringPi2-Python
そして、下記の手順でインストールします。
$ git clone https://github.com/neuralassembly/WiringPi2-Python.git
$ cd WiringPi2-Python
$ sudo python3 setup.py install

 次に、サーボモーターをブラウザから操作するためのサンプルプログラムを、ダウンロードします。webiopi-servo.zipを304ページの図B-1と同じ方法で、ホームディレクトリに移動します。その後、308ページの図B-3と同様に、この圧縮ファイルを展開します。すると、ディレクトリ07と08が現れます。これらを下記のコマンドによりWebIOPi用のフォルダにコピーします。
$ cd
$ cp –r 07 08 /usr/share/webiopi/htdocs/bb/
なお、このコマンドは9.2.5節で解説した本書のWebIOPi用サンプルのコピーを行っていないと失敗しますのでご注意ください。

これが済んだ後、下記のコマンドにより、WebIOPi用のフォルダにあるフォルダを確認すると、下記のように01から08までのディレクトリ名が表示されるはずです。
$ ls /usr/share/webiopi/htdocs/bb/
01 02 03 04 05 06 07 08
これは、 /usr/share/webiopi/htdocs/bb/ ディレクトリにあるファイルやディレクトリを表示する命令です。01~06が本書で用いたサンプルファイルを含むディレクトリ群であり、07がこれから用いるサーボモーター制御用プログラムを含むディレクトリ、08がキャタピラ式模型のカメラを操作するためのプログラムを含むディレクトリです。

以上が確認できたら準備は終了です。

サーボモーターをPCやスマートフォンから角度制御する

まずはサーボモーターを制御する例です。必要な回路は下図のようになります。


これは、本書の図8-13から「入力部」に相当するADコンバータと半固定抵抗を取り除いたものです。

準備ができたらWebIOPiを起動する準備に移ります。

まずは、Raspberry PiでWebIOPiが起動していないことをあらかじめ確認しておきます。その方法の詳細は本書に記述されていますが、Raspberry Piを再起動してしまうのが最も簡単です。

もし、キャタピラ式模型用の設定のように、Raspberry Pi起動時にWebIOPiが自動起動する設定になっている場合、下記のコマンドで自動起動を無効にした後、Raspberry Piを再起動します。
(jessieの場合)$ sudo systemctl disable webiopi
(wheezyの場合)$ sudo update-rc.d webiopi remove
さて、WebIOPiが起動されていない状態になったら、管理者権限で設定ファイル /etc/webiopi/config を開き、編集します。leafpadを用いるならば下記のコマンドを実行するのでした。
$ sudo leafpad /etc/webiopi/config
このファイルのなかで[SCRIPTS]セクションを見つけ、起動するマクロを下記のように記述し、保存します。その後leafpadは閉じて構いません。
myscript = /usr/share/webiopi/htdocs/bb/07/script.py
それが済んだら、下記のコマンドでWebIOPiを起動します。
$ sudo /etc/init.d/webiopi start
そして、起動が済んだら、PCやスマートフォンのブラウザから下記のアドレスにアクセスします。
http://(Raspberry PiのIPアドレス):8000/bb/07/
「http://」や末尾の「/」の記述を忘れないよう注意するのでした。

ここまでの流れが上手く行けば、ブラウザ上にスライダーが1つ現れます。iPad miniの場合のスクリーンショットは下図のようになります。このスライダーをスライドすることで、冒頭で紹介した動画のようにサーボモーターの角度が変化するはずです。


なお、このプログラムはArduino Sidekick Basic Kit付属のサーボモーターを対象に記述しました。その他のサーボモーターを用いると、スライダの向きとサーボモーターの回転の向きが逆になる場合があります。

そのような場合、/usr/share/webiopi/htdocs/bb/07/javascript.js にて、下記の2行を見つけます。そして、この2行目の行頭に「//」を追記して無効化してください。
// サーボの回転の向きを逆にしたい場合次の行を無効に
        ratio = 1.0 - ratio;
無効化後、ブラウザでページを再読み込みすると、サーボモーターの向きが逆転しているはずです。

エッセンスの解説

このプログラムのエッセンスを書籍と同様に解説します。他の例と同様、関連するのは、 /usr/share/webiopi/htdocs/bb/07/ ディレクトリにある下記の4ファイルです。
  • index.html
  • javascript.js
  • styles.css
  • script.py

HTMLファイルindex.html

9.5節と同様、jQuery UIのスライダを配置しています。9.5節ではRGBフルカラーLEDの三色を変更するためにスライダが3つ必要でしたが、本ページの例では下記の1つだけです。
<div id="slider_servo"></div>

JavaScriptファイルjavascript.js

スライダの配置はやはり9.5節と同様です。スライダは下記にあるように、0から20の1刻みの値を持ちます。
var sliderMin = 0;
var sliderMax = 20;
var sliderStep = 1;
スライダを動かした時、下記の関数が実行されます。
    var sliderHandler = function(e, ui){
        var ratio = ui.value/sliderMax;
        // サーボの回転の向きを逆にしたい場合次の行を無効に
        ratio = 1.0 - ratio;
        webiopi().callMacro("setHwPWM", [ratio, commandID++]);
    };
関数の最後のあるように、Pythonスクリプト内にあるsetHwPWMマクロが、0.0~1.0に変換されたスライダの位置ratioと、何番目の命令送信かを示すcommandIDという引数付きで送られます。commandIDが必要な理由は、本書269ページを御覧ください。

Pythonスクリプトscript.py

Pythonスクリプト内では、wiringPiの手法でPWMを生成する記述をしています。周波数やデューティ比の設定方法を知るには8.6節の解説が役に立つでしょう。JavaScriptから呼ばれるsetHwPWMマクロは下記のように定義されています。
@webiopi.macro
def setHwPWM(duty, commandID):
    wiringpi.pwmWrite(18, getServoDutyForWebIOPi(float(duty)))
getServoDutyForWebIOPi関数はこのファイル内部で下記のように定義されています。wiringPi用のデューティー比の計算は219~220ページを参考にしてください。
def getServoDutyForWebIOPi(val):
    val_min = 0.0
    val_max = 1.0
    servo_min = 36   # 50Hzで, 0.7ms
    servo_max = 102  # 50Hzで, 2.0ms

    duty = int((servo_max-servo_min)*(val-val_min)/(val_max-val_min) + servo_min)
    return duty

カメラ付きキャタピラ式模型のカメラをサーボモーターで動かす(機体編)

以上でサーボモーターをブラウザから角度制御できるようになりました。その応用として、本書10章の最後に作成した「カメラ付きキャタピラ式模型」のカメラを上下方向に動かせるようにしてみましょう。どのような動作が可能になるのかは本ページ冒頭の動画でご覧頂けます。

模型の概観は下図のようになります。


書籍で紹介したように、この模型は
  • 機体に用いるパーツとして可能な限りTAMIYAの模型キットのものを用いる
  • 搭載する回路は半田付けではなく、ブレッドボードで実現する
  • 用いる工具はニッパとドライバ程度とする
という方針で作成していますので、サーボモーターの取り付けもその方針に従いました。

今回新たに取り付けたサーボモーター部のみを拡大したものが下図です。サーボモーターはArduino Sidekick Basic Kit付属のものを用いました。他のサーボモーターでももちろん可能ですが、サーボモーターの取り付け法は用いるモーターによって変更が必要になるかもしれません。


図中、赤字はTAMIYAの工作キットのパーツ、青字はサーボモーター付属のパーツを表しています。軸受け材からサーボモーターを吊り下げているサーボホーンは、長いものをニッパーで半分に切って用いました。

サーボモーターのサーボホーンをL型アームに取り付ける箇所には2mm径(M2)ワッシャーを用いました。このパーツのみ、TAMIYAの模型キットにもサーボモーターにも付属しないパーツですが、amazonなどの通販サイトで購入することができます。

このように、カメラとサーボモーターの取り付けは、耐久性やメンテナンス性を考えると全てねじ止めするのが理想です。しかし、試してみるとわかりますが、これは工夫が必要な作業です。どうしても難しい場合は両面テープなどによる仮止めでも良いと思います。

なお、2016年4月、Raspberry Piのカメラモジュールのバージョン2が発売になりました。こちらでもここで紹介するプログラムは動作するのですが、NOOBS1.9.0までのRaspbianでは映像の向きが上下逆転してしまいます。次のRaspbianが出るまで待つことをお勧めします。上級者の方には「sudo rpi-update」でカーネルを最新にすれば正常動作することをお知らせしておきます。

なお、二段構造の上部(Raspberry Piが乗った部分)のプレートですが、カメラと電池ボックスがぶつからないよう、少し前にずらして取り付けなおしています。

カメラ付きキャタピラ式模型のカメラをサーボモーターで動かす(回路編)

カメラを動かせるよう変更したキャタピラ式模型を動かすための回路は下図のようになります。本書の図10-6から、サーボモーターを動かすために変更した部分を赤で示しました。


準備ができたらWebIOPiを起動する準備を行います。この作業を行う方は、既に本書の10章まで終えているはずですので、簡単に解説します。

まず、管理者権限で設定ファイル /etc/webiopi/config を開き、編集します。leafpadを用いるならば下記のコマンドを実行するのでした。
$ sudo leafpad /etc/webiopi/config
このファイルのなかで[SCRIPTS]セクションを見つけ、起動するマクロを下記のように記述し、保存します。その後leafpadは閉じて構いません。
myscript = /usr/share/webiopi/htdocs/bb/08/script.py
それが済んだら、WebIOPiを起動します。キャタピラ式模型の場合は、WebIOPiがRaspberry Piの起動とともに自動起動するように設定するのでしたね。

WebIOPiの自動起動が有効になっていない場合、下記コマンドで有効になるのでした。
(jessieの場合)$ sudo systemctl enable webiopi
(wheezyの場合)$ sudo update-rc.d webiopi defaults
その後Raspberry Piを再起動すれば、WebIOPiが自動起動されます。

そして、スマートフォンのブラウザから下記のアドレスにアクセスします。
http://(Raspberry PiのIPアドレス):8000/bb/08/
「http://」や末尾の「/」の記述を忘れないよう注意するのでした。

ここまでの流れが上手く行けば、下図のようにカメラからの映像の右側に、カメラの上下を操作するスライダが現れます。このスライダーをスライドすることでカメラの上下方向の向きが変化します。


なお、このプログラムをディスプレイをつながない状態で自動起動しようとすると、NOOBS 1.9.1以降のRaspbianでは「キャタピラは動作するが、サーボモーターは動作しない」という状態になり得ます。この問題に直面した場合、以下のように「Raspbianがコンソールで起動する」状態にしてください。

まず、Jessieで導入されたGUIの設定アプリケーションを起動し、「システム(System)」タブの「ブート(Boot)」項目にある「CLI(To CLI)」にチェックを入れ、再起動してください。画面が黒い「コンソール」状態でRaspbianが起動し、ここで紹介したプログラムが自動起動で正常動作するようになります。
なお、Raspbianが黒いコンソールで起動する状態から元に戻したい場合、コンソールで「startx 」というコマンドを実行してデスクトップを起動してから、設定アプリケーションの「ブート(Boot)」項目で「デスクトップ(To Desktop)」を選択し、再起動してください。

さて、このプログラムもArduino Sidekick Basic Kit付属のサーボモーターを対象に記述しています。その他のサーボモーターを用いると、スライダの向きとサーボモーターの向きが上下逆になる場合があります。

そのような場合、/usr/share/webiopi/htdocs/bb/08/javascript.js にて、下記の2行を見つけます。そして、この2行目の行頭に「//」を追記して無効化してください。
// サーボの回転の向きを逆にしたい場合次の行を無効に
        ratio = 1.0 - ratio;
無効化後、ブラウザでページを再読み込みすると、サーボモーターの向きが逆転しているはずです。

さて、このプログラムは、10章のプログラムと、本ページで紹介したサーボモーター操作のプログラムを合体させたものです。

ただし、サーボモーターの動く範囲はscript.py内で下記のように設定し、元の範囲(36~102)よりも狭めています(どちらも中心は69)。これは、サーボモーターの動く範囲を広げすぎると、カメラを支えているアームが機体とぶつかるためです。
    servo_min = 48
    servo_max = 90
また、スライダを縦に配置するには、下記の変更を行っています。

1. index.html内でスライダをspan要素に変更
    <span id="slider_servo"></span>
2. styles.css内で下記の設定
#slider_servo{
    display: inline-block;
}
3. javascript.js内でスライダをverticalに設定
$( "#slider_servo" ).slider({
        orientation: "vertical",
(略)
4. javascript.js内でスライダの高さを設定
$( "#slider_servo" ).height(mHeight);

以上です。お疲れ様でした。