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 WH 16ドル Pi Zero Wにピンヘッダを取り付けたもの。
カメラ利用可(要専用ケーブル)・Wifi/Bluetoothつき
KSYスイッチサイエンス
Raspberry Pi Zero W 10ドル カメラ利用可(要専用ケーブル)・Wifi/Bluetoothつき KSYスイッチサイエンス
Raspberry Pi Zero v1.3 5ドル カメラ利用可(要専用ケーブル)・Wifi/Bluetoothなし KSYスイッチサイエンス
Raspberry Pi Zero v1.2 5ドル カメラ利用不可・Wifi/Bluetoothなし 現在は入手困難

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


Raspberry Pi Zero シリーズを使う場合、次に述べるように特有な機器がいくつか必要になるので注意が必要です。

接続方法(Raspberry Pi Zero W、Pi Zero WH、Pi Zero v1.3の場合)

Raspberry Pi Zero W、Pi Zero WHおよびPi Zero v1.3の場合、接続は下図のようになります。以下の3つのものが必須となります。
  • HDMI(メス)-ミニHDMI(オス)変換アダプタ。例えばSANWA SUPPLY AD-HD07M
  • USB OTGケーブル。例えば iBUFFALO BSMPC11C01BK
  • USBハブ(ACアダプターなしのバスパワータイプでOK)。 マウス、キーボードを接続します。Pi Zero WおよびPi Zero WHの場合、Wifiデバイスは基板上に実装されているので、Wifiアダプタは不要です。Pi Zero 1.3の場合、ここにさらに無線LAN USBアダプタを接続します

接続方法(Raspberry Pi Zero v1.2の場合)

Pi Zero v1.2の場合、接続は下図のようになります。以下の3つのものが必須となります。
  • HDMI(メス)-ミニHDMI(オス)変換アダプタ。例えばSANWA SUPPLY AD-HD07M
  • USB OTGケーブル。例えば iBUFFALO BSMPC11C01BK
  • USBハブ(ACアダプターつきのセルフパワータイプ)。マウス、キーボード、無線LAN USBアダプタなどを接続します。ACアダプターのないバスパワータイプを用いると、Wifiが不安定になり途中で接続が切れることがあります

GPIO ポートの利用

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


なお、このピンヘッダの半田づけが嫌だという場合、下記のようなテストワイヤをGPIO部の穴に差し込んで使うという方法もあります。ただし、これはあくまでテスト用であり、本書のように何度もGPIOを利用する場合、ピンヘッダを半田付けするのをお勧めします(何度も抜き差しすると接触が悪くなるためです)。
それ以外には、40ピンのピンヘッダをハンマーで打ち込む、という製品もあります。
こちらは私は使用したことがありませんが、商品名で検索すると使用した方の体験記などが見つかるでしょう。

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

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


また、カメラモジュールを使うには、下記のように専用ケーブルが必要です。


ケーブルを取り付ける際、金属が露出した端子面を、どちらも緑色の基板の方を向くようにします。基板上のカバーを引き出し、ケーブルを差し込んだ後でカバーを押し込むことでケーブルが固定されます。

Raspberry Pi Zeroに適した利用方法

接続方法の図を見てわかる通り、どのバージョンにもRaspberry Pi 3などでは必要なかった物品が必要となり、Raspberry Pi Zeroシリーズの低価格性、省スペース性があまりいかされていませんね。そういう意味では、本書のスタイルでRaspberry Piを用いるならば、利用が容易で高性能なRaspberry Pi 3をお勧めします。

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

適した応用例としては、キャタピラ式模型に搭載し模型をコントロールするような用途(10章)があります。それにより、小型化、省電力化が図れる、というわけです。これは、Raspberry Pi Zero シリーズに限らず、下図(右)のRaspberry Pi Model A+にも同じことが言えます。

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

おわりに

Raspberry Pi Zero シリーズで本書の演習を実行するにはどうしたらよいか、解説しました。使いはじめるまでにはんだづけが必要であったり、新たな物品を購入しなければならないなど、ハードルはやや高いと言えるでしょう。

しかし、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の設定

比較的新しいRaspbianでは、インストール時から問題なくディスプレイが映るはずです。

デスクトップが起動した後、デスクトップの描画領域がディスプレイの表示領域より狭い場合、 設定アプリケーションの「システム(System)」→「オーバースキャン(Overscan)」を「無効(Disable)」に設定してから再起動しましょう。以後は800x480の解像度で利用可能になります。


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

まず、ターミナルLXTerminalを起動し、下記のコマンドを実行します。
sudo leafpad /boot/config.txt
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo mousepad /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 update

日本語入力

日本語入力ソフトウェアのインストールについて、これまで本ページでは ibus-mozc のインストールをお勧めしてきましたが、OS の更新に伴い メニューバー上での挙動がおかしい、などの不具合が増えてきましたので、 別のソフトウェアである fcitx-mozc に切り替えた方が良いかもしれません。

まず、インストール済の ibus-mozc を削除するには以下のコマンドを実行します。
$ sudo apt remove ibus-mozc ibus
その後 Raspberry Pi を再起動することで ibus-mozc の削除が完了します。

そして、fcitx-mozc のインストールは下記のコマンドで行います。
$ sudo apt install fcitx-mozc
再起動後、半角/全角キーや Ctrl+スペースキーにより、日本語入力をオンオフできます。

なお、NOOBS 1.4.1までのRaspbian(Wheezy)の場合、ターミナルソフトウェアLXTerminal上で下記のコマンドを実行すると、uimとuim-anthyと呼ばれるアプリケーションがインストールされ、日本語入力が行えます。ただし、sudoで起動したアプリケーションには日本語入力できませんのでご注意ください。
$ sudo apt 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 install fonts-vlgothic
それ以外にも、下記のフォントがインストール可能です。
$ sudo apt 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またはStretch)では、Google ChromeのベースとなったChromiumブラウザがデフォルトブラウザとなっています。最新のNOOBSを利用できる方は、これを用いるのが一番簡単でしょう。GoogleのアカウントでChomiumにログインすると、Google Chromeとブックマークや設定を同期することができます。

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


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

オフィススイートLibreOffice

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

画像編集ソフトgimp

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

お絵描きソフトinkscape

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

テキストエディタgedit

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

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

RaspianにはLXTerminalがインストールされており、通常はこれを用います。これでは機能が足りないという場合、gnome-terminalと呼ばれるソフトウェアをインストール用いることができます。私自身は、ターミナルの文字コードをEUC-JPやShift JISに変更したいときにこれを用いています。下記のコマンドでインストールします。
$ sudo apt install gnome-terminal
インストール後、メニューには現れませんので、LXTerminalから下記のコマンドで起動します。
$ gnome-terminal
デスクトップのメニューから起動したい場合、管理者権限のテキストエディタleafpadで設定ファイルを編集する必要があります。下記のコマンドでそのファイルをleafpadで開きます。
$ sudo leafpad /usr/share/applications/org.gnome.Terminal.desktop
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /usr/share/applications/org.gnome.Terminal.desktop
ファイルの末尾に下記の行がありますので、先頭に「#」を追記し、保存してRaspberry Piを再起動してください。
OnlyShowIn=GNOME;Unity;
つまり、こうですね。
#OnlyShowIn=GNOME;Unity;
以上を実行すると、メニューの「システムツール」→「端末」でgnome-terminalを起動できるようになります。

さらに、本ページの最後で紹介する「アプリケーション・ランチャー」の追加の方法で「アクセサリ」→「端末」を追加すると、アプリケーション・ランチャーからも起動できるようになりますので興味のある方はお試しください。

画像閲覧のデフォルト

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

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

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

私の場合、他にはPDF閲覧のデフォルトアプリケーションをgimpからPDF Viewer(qpdfview、以前は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コマンド

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

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

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

wgetコマンドやブラウザなど (Raspbian Stretch編)

次に、ファイルのダウンロードなどで用いるwgetコマンドや、ブラウザを利用するための方法です。まずは、RaspbianのStretch用の方法を記します。

ターミナルソフトウェアLXTerminalを起動し、以下のように管理者権限のテキストエディタleafpadで設定ファイル/etc/environmentを編集用に開きます。
$ sudo leafpad /etc/environment
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /etc/environment
Raspbianのバージョンにもよりますが多くの場合 /etc/environment は何も書かれていない空のファイルですので、そのまま以下の3行を記入してください。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。もし何かが書かれていた場合も、その内容を壊さないように注意しながら、ファイルの末尾に以下の内容を記します。
http_proxy=http://プロキシサーバー名:ポート番号/
https_proxy=http://プロキシサーバー名:ポート番号/
ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述したらファイルを保存してleafpadを閉じます。この設定を読み込むためにRaspberry Piを再起動してください。再起動後、ブラウザでインターネット上のウェブサイトを閲覧できるようになっているはずです。

wgetコマンドやブラウザなど (Raspbian Jessie および Wheezy編)

同じく wgetコマンドやブラウザを利用するための、 Raspbian Jessie や Wheezy 用の方法を記します。

ターミナルソフトウェアLXTerminalを起動し、以下のようにテキストエディタleafpadで設定ファイル.bashrcを編集用に開きます。
$ leafpad .bashrc
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ mousepad .bashrc
.bashrcファイルは既存のファイルなので様々な内容が書かれています。この内容を壊さないように注意しながら、ファイルの末尾に下記の内容を追記します。「プロキシサーバー名」や「ポート番号」は環境によって異なりますので、ネットワーク管理者にお尋ねください。
export http_proxy=http://プロキシサーバー名:ポート番号/
export https_proxy=http://プロキシサーバー名:ポート番号/
export ftp_proxy=http://プロキシサーバー名:ポート番号/
以上の設定を記述した後、この設定を読み込む必要がありますが、そのためにはRaspberry Piを再起動してしまうのが簡単です。

再起動後、ブラウザでProxyを有効にするにはターミナルからコマンドでブラウザを起動しなければなりません。ご注意ください。
Chromiumブラウザの場合
chromium-browser &
epiphanyブラウザの場合
epiphany &

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

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

まず、ターミナルソフトウェアLXTerminalを起動し、以下のようにcorkscrewというコマンドをインストールします。
$ sudo apt-get install corkscrew
次に、以下のようにテキストエディタleafpadでホームディレクトリ上にgit-proxy.shという名前のファイルを作成します。
$ leafpad git-proxy.sh
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ mousepad 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
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ mousepad .bashrc
このファイルの末尾まで移動し、下記の1行を追記します。
export GIT_PROXY_COMMAND=/home/pi/git-proxy.sh
記述したら保存してleafpadを終了します。その後、Raspberry Piを再起動して設定を再読み込みすれば、 wiringPiのダウンロード用のコマンド
$ git clone git://git.drogon.net/wiringPi
が実行できるようになっているはずです。

時刻合わせ

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

まず、RaspbianのStretch (NOOBS 2.4.3)以降の場合です。 時刻合わせにsystemd-timesyncdが用いられていますので、その設定を行います。 leafpadで設定ファイル/etc/systemd/timesyncd.confを開きます。
$ sudo leafpad /etc/systemd/timesyncd.conf
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
$ sudo mousepad /etc/systemd/timesyncd.conf
ファイル内で下記のような箇所を見つけます。
(略)
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3
.debian.pool.ntp.org
このうち、NTPに関する行の先頭の「#」を削除し、「=」の右辺にお使いの時刻合わせサーバーを記述します。 時刻合わせサーバが存在するかどうかはネットワーク管理者にお尋ねください。
記述後、Raspberry Piを再起動すれば時刻が合うようになります。

一方、RaspbianのWheezy/Jessie (NOOBS 2.4.2まで) の場合、時刻合わせにntpdが用いられていますので、その設定を行います。
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を起動し、ホームディレクトリで以下のコマンドを順に実行します。
$ sudo -E rpi-update
補足すると、「-E」というオプションを付ける必要があるというわけです。

プロキシ(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月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やスマートフォンから操作することができます。

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

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


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

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

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

必要な物品

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


準備

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

本書発売後の追加情報」の「p.214:WiringPi2-Pythonのインストール」に従うと、 Python2 および Python3 用の WiringPi2-Python がインストールできますので、それを実行してから以下に進んでください。

 次に、サーボモーターをブラウザから操作するためのサンプルプログラムをダウンロードし、WebIOPi用のフォルダに移動します。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi-servo.zip
$ unzip webiopi-servo.zip
$ mv 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コンバータと半固定抵抗を取り除いたものです。サーボモータを2個用いる回路図を示しましたが、サーボモーター1個でも問題なく動作します。

以上が終わったらWebIOPiを起動する準備に移ります。

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

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

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


なお、このプログラムは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が発売になりました。こちらでもここで紹介するプログラムは動作します。

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

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

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


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

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

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

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

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


キャタピラ式模型を動作させるとき、回路を取り付けたサーボモータが不安定に変動する場合があります。そんなとき、サーボモーターへの電源(サーボモーターの赤色ケーブルへの接続)を電池の+極からとるのではなく、 Raspberry Piの 5V 端子(3.3V 端子の隣)から取るのも手です。

モーター類をRaspberry Piに直接接続するのはあまりよくありませんが、サーボモーター1個動かす程度ならばRaspberry Piは不安定にならないだろう、という期待に基づいています。
もしそうすることで Raspberry Pi の動作が不安定になるのならば、やはりサーボモーターへの電源は電池からとるように戻すべきです。

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

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

もし、この「CLI起動によるWebIOPiの自動起動」でもサーボモーターが正常動作しない場合、以下を試してください。 まず、以下のコマンドを実行し、WebIOPiの自動起動を無効にします。
sudo systemctrl disable webiopi
次に、以下のコマンドで、/etc/rc.localファイルを管理者権限で編集できる状態にします。
sudo leafpad /etc/rc.local
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo mousepad /etc/rc.local
そして、「exit 0」の上の行に、以下の2行を追記して保存し、再起動してください。
sleep 10
sudo systemctl start webiopi
以上で、/etc/rc.localからWebIOPiが起動され、サーボモーターが正常動作することを期待しています。 なお、「sleep 10」は「10秒待機する」の意味です。 安全のために「10秒」と大きな数値を選びましたが、 私の環境では「sleep 3」(3秒待機)程度でも正常動作しました。 さらに、この方法ではCLI起動ではなくGUI起動のままでもサーボモーターが正常動作しました。

さて、このプログラムも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);

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