2016年12月31日土曜日

「Raspberry Piで学ぶ電子工作」補足情報トップ

はじめに

本ページは、金丸隆志著「Raspberry Piで学ぶ電子工作」(講談社ブルーバックス)の補足情報をまとめるためのページです。

まず、書籍のサンプルファイル、回路配線図(PDF)、応用演習(PDF)が必要な方は、下記の公式サポートページからダウンロードしてください。


以下では、Raspberry PiのOSの更新に伴う内容の変更や、正誤情報などを記していきます。

補足情報一覧


やってみた


知っておくと便利な設定など


感想など



2016年12月30日金曜日

本書発売後の追加情報

はじめに

改訂版について

2016年7月、本書の改訂版である「カラー図解 最新 Raspberry Piで学ぶ電子工作」が発売になりましたが、当面本書のサポートも継続します。

なお、本書と改訂版の違いについては、改訂版の補足ページ内に「旧版をご利用の方へ」としてまとめましたので、興味のある方はご覧ください。

電子書籍版について

2016年7月、本書の改訂版が発売されるに伴い、kindle版を始めとする電子書籍は
  • 新規の購入はできないが、過去に購入した方はダウンロードできる
という状態に移行しています。新規に電子書籍版を購入されたいという方は、改訂版のものをお求めください。

回路配線図について

公式サポートページにて回路の配線図(PDF)をダウンロードできます。「Model B用(26ピン)」と「Model B+およびRaspberry Pi 2用(40ピン)」がありますので、ディスプレイで閲覧するか、印刷するなどしてご活用ください。

回路配線図をWindowsやOS X上のAdobe Readerで閲覧する際、「編集」→「環境設定」を選択し、下図のように「細い線を拡張」のチェックを外すと、より綺麗な配線図を見ることができます。


チェックを外す前後の配線図の状態を示したのが下図です。「細い線を拡張」のチェックを外した方が図がきれいに表示されているのがわかるでしょう。

なお、この設定はPDFの印刷の際には影響しないはずです。


第1章

p.13:Raspberry Piの販売台数について

2015年2月までに、Raspberry Piが500万台販売された、というニュースがありました。2013年10月までに175万台、2014年6月までに300万台でしたから、ますます人気が高まっているようです。

第2章

p.30:本書でサポートするRaspberry Piについて

2016年3月現在、本書で推奨するRaspberry Piのバージョンは下記の通りです。
  • Raspberry Pi Model B(現在はやや入手しにくい)
  • Raspberry Pi Model B+
  • Raspberry Pi 2 Model B(ただし、本ページによる補足が必要)
  • Raspberry Pi 3 Model B(ただし、本ページによる補足が必要)
性能の点で、Raspberry Pi 2かRaspberry Pi 3の購入をお勧めします。Raspberry Pi 3の場合無線機能が基板上に備わっていますので、無線LAN USBアダプタを別途購入する必要がないというメリットがあります。

Model B、Model B+、Raspberry Pi 2、Raspberry Pi 3の写真は下記のようになります。ご覧になってわかるように、Raspberry Pi 2やRaspberry Pi 3の形状やピン数などはModel B+とほとんど同じです。そのため、本書を読む際、Model B+についての記述がRaspberry Pi 2やRaspberry Pi 3にも該当するとお考えください。さらに、下記に続く補足も合わせてご参照ください。


なお、Model A、Model A+というバージョンもあるのですが、これらは「USBインターフェイス1つ」、「ネットワークインターフェイスなし」であり初心者向けではないため、本書での利用は推奨しません。
また、2015年11月に、Raspberry Piの新型であるRaspberry Pi Zeroが発表され、その価格が5ドルということでで大きな話題となりました。こちらもModel A/A+と同じく初心者向けではないので本書での利用は推奨しません。ただし、実際に試してみた結果を下記のページにまとめましたので、興味のある方は御覧ください。

p.30:Raspberry Pi 3について

2016年2月29日、Raspberry Pi 3 Model Bが発表され、大きな話題となりました。目立つ変更点としては
  • プロセッサの性能向上(900MHz 32-bit4コアから1.2GHz 64-bit4コアへ)
  • Wifi / Bluetooth4.1 の標準サポート
が挙げられます。Wifi / Bluetooth4.1 用の無線チップが搭載されており、デフォルトで無線接続ができるのが特長です。

Raspberry Pi 3にて本書の内容の動作確認が取れましたので、Raspberry Pi 3も動作対象機種に含めます。

p.32:Raspberry Pi 2およびRaspberry Pi 3に用いるSDカード

Raspberry Pi 2およびRaspberry Pi 3は、Model B+と同様、microSDカードが必須です。そのため、本書を読む際にModel B+についての情報を参考にしてください。
さらに、個人的な体験ですが、Raspberry Pi 2やRaspberry Pi 3にclass 2などの遅いmicroSDカードを用いた場合、動作に引っかかりを感じることが多くありました。そのため、Raspberry Pi 2やRaspberry Pi 3に用いるmicroSDカードは、高速なclass 10のものを推奨します。

p.34:Raspberry Pi 2およびRaspberry Pi 3に用いるマイクロUSB接続の電源

本書ではRaspberry Pi用の電源として1.0A以上の5V電源を用いるよう記述しております。2015年2月に発売されたRaspberry Pi 2でも同じ電源で動作することを確認しましたが、ネットの情報によると、安価で信頼性の低い電源やケーブルを用いるとRaspberry Pi 2が起動しないことがある、とのことでした。もしRaspberry Pi 2が起動しない場合、電源やケーブルの変更を検討してみると良いでしょう。

また、Raspberry Pi 3用の電源として、公式では2.5A以上の5V電源を推奨しています。ただし、これは電力消費の大きいUSB機器を複数接続する場合などを想定した高めの推奨値と考えられます。私自身は、1.5Aの5V電源でRaspberry Pi 3を起動し本書の動作確認をとっていますが、特に問題は起こっていません。

ただし、流せる電流の小さい電源を用いると、Raspberry Pi 3は正常動作するものの、Raspberry Pi 3の性能をフルに引き出すことができない、という報告もあります。ですから、高性能なRaspberry Pi 3の性能をフル活用したい方は、Raspberry Pi 3の公式電源を導入してみると良いでしょう。

p.39:NOOBSのバージョン

本書はNOOBS 1.3.10をベースに解説しておりますが、発売以来下記のようにNOOBSの新バージョンがリリースされています。

2014/12/24NOOBS 1.3.11wheezy
2015/2/2NOOBS 1.3.12
2015/2/18NOOBS 1.4.0
2015/5/11NOOBS 1.4.1
2015/9/24NOOBS 1.4.2jessie
2015/11/21NOOBS 1.5.0
2016/2/3NOOBS 1.6.0
2016/2/9NOOBS 1.7.0
2016/2/26NOOBS 1.8.0
2016/3/18NOOBS 1.9.0
2016/5/10NOOBS 1.9.1
2016/5/27NOOBS 1.9.2
2016/9/23NOOBS 1.9.3

どのバージョンでも動作確認しておりますが、いくつか手順を変更しなければならない部分がありますので、下記の補足情報をご覧ください。手順の変更点のみを知りたい場合、このページを「NOOBS」で検索するとよいでしょう。また、Raspberry Pi 2を用いる場合、必ず2015年2月18日にリリースされた NOOBS 1.4.0 またはそれ以降を用いてください。Raspberry Pi 3を用いる場合、必ず2016年2月26日にリリースされた NOOBS 1.8.0 またはそれ以降を用いてください。

なお、上に示されているように、NOOBS 1.4.1までのRaspbianは、Debianと呼ばれるOSのwheezyというバージョンをベースに作成されていました。一方、2015年9月24日にリリースされたNOOBS 1.4.2に含まれるRaspbianからは、DebianのJessieと呼ばれるバージョンをベースにするよう変更されております。NOOBS 1.4.2以降に含まれるRaspbianは、日本語フォントが含まれず日本語が全て文字化けする、キーボードの設定アプリにバグがある、などいくつかの問題があります。しかし、解決方法はありますので、本ページではNOOBS 1.4.2以降での本書の利用方法も記していきます。

wheezyベースのRaspbianを含むNOOBSを手に入れたい場合、JAISTのミラーサイトからダウンロードするのが良いでしょう。wheezyベースのOSはNOOBS-2015-05-12のNOOBS 1.4.1が最終版と思われます。

p.39:パッケージやfirmwareを更新したRaspbianについて

「sudo apt-get upgrade」により、インストールされたアプリケーションのパッケージを更新したり、「sudo rpi-update」によりfirmwareを更新したRaspbianはサポートの対象外とします。その理由は下記の通りですのでご了承ください。
  • パッケージやfirmwareは日々変化しており、タイミングによってはバグを含んだパッケージがインストールされることもあること
  • 同じ理由で、読者の方の環境と筆者の環境を一致させることが難しいこと

p.45:NOOBS 1.4.2以降(Jessie)における「インストール後の設定」について

NOOBS 1.4.2以降に含まれるRaspbianでは、それまでのバージョンと下記の違いがあります。
  • 起動時にそのままGUI環境であるXが起動する
  • これまでraspi-configで行っていた設定をGUIアプリケーションで行える(「Menu」→「Preferences(設定)」→「Raspberry Pi Configuration(Raspberry Piの設定)」で起動できる)
今後のRaspbianではこのスタイルが主流になっていくと思われますので、このGUIによる新設定アプリケーションを使ってみましょう。



マウスで操作できるアプリケーションなので取り扱いは簡単ですが、NOOBSのバージョンによっては下記の問題があるため注意が必要です。
  • 日本語フォントが含まれないため、使用言語を日本語に設定すると、日本語が全て文字化けする(1.4.2~1.9.2。1.9.3以降で解決済)
  • 新しい設定アプリケーションでは、キーボードの設定が正しく反映されない(1.4.2)、あるいはキーボードの設定が一回しか行なえない(1.5.0~1.9.0)
このうち、NOOBS 1.4.2のキーボードの設定が反映されない問題は、これまでのraspi-configコマンドを用いないと解決されないため、Jessieを使う方は1.4.2より新しいバージョンを用いましょう。

さて、日本語の文字化けを避けるには、NOOBS1.5.0以降を用いて下記の順で設定を行いましょう。
  • GUIによる新設定アプリケーションを起動する
  • タイムゾーンの設定を「Localisationタブ」→「Set Timezoneボタン」→「Area:Asia」→「Location:Tokyo」にセットする
  • キーボードの設定を「Localisationタブ」→「Set Keyboardボタン」→「Country:Japan」→「Variant:Japanese(OADG 109A)」にセットする(一度セットすると、二度目はセットできなくなりますが、この問題への対応法は後に述べます)
  • 「OK」を押し、新設定アプリケーションを終了する
  • そしてWifiまたは有線でRaspberry Piをネットワークに接続する
  • ターミナルソフトLXTerminalを起動し、下記のコマンドにより日本語フォントをインストールする(NOOBS 1.4.2から1.9.2のみ)
  • sudo apt-get update
  • sudo apt-get install fonts-vlgothic
  • インストール後、Raspberry Piを再起動する
  • 再びGUIによる新設定アプリケーションを起動する
  • 言語(ロケール)の設定を「Localisationタブ」→「Set Localeボタン」→「Language:ja (Japanese)」→「Country:JP (Japan)」→「Character Set:UTF-8」にセットする
  • 「OK」を押し、新設定アプリケーションを終了すると再起動を促されるので、再起動する。
以上で、日本語でデスクトップが開いたと思います。

なお、上で述べたように、上記のようにキーボードの設定を行うと、NOOBS 1.5.0~1.9.0では二度目のキーボードの設定ができなくなります。その問題への対応方法を以下に述べます。

p.45:NOOBS 1.5.0~1.9.0(Jessie)のRaspbianでキーボードの設定が一度しか行えない問題

上の方法でキーボードの設定を行うと、NOOBS 1.5.0~1.9.0(Jessie)のRaspbianでは二度目のキーボードの設定が行えなくなります。もう一度キーボードの設定を行いたい場合の対応方法を記します。

原因は、設定アプリケーションが内部で呼び出すPythonプログラム lxkeymap のバグです。以下のように修正しましょう。 まず、LXTerminalを起動し、下記のコマンドを実行します。ファイル /usr/bin/lxkeymap を管理者権限のテキストエディタで開いています。
sudo leafpad /usr/bin/lxkeymap
ファイルを壊してしまわないよう、慎重に操作しましょう。ファイル内を「match」という語で検索すると、下記の部分が見つかります。
    def return_path(self,model,path,iter,matched_text):
        if model.get_value(iter, 1).lower() == matched_text:
これを下記のように編集して保存し、leafpadを閉じましょう。if文の行に含まれるmatched_textのみに「.lower()」を付加しています。
    def return_path(self,model,path,iter,matched_text):
        if model.get_value(iter, 1).lower() == matched_text.lower():
以上で、二度目のキーボードの設定が行えないバグは修正されましたので試してみてください。なお、このバグはNOOBS 1.9.1以降に含まれるRaspbianでは修正されています。

なお、補足ですがこれまでのRaspbian (Wheezy)では、キーボードの設定ファイルは /etc/default/keyboard だったのですが、Jessieでは /home/pi/.config/lxkeymap.cfg を用いる方針のようです。細かく言えば、Raspberry Pi起動時は /home/pi/.config/lxkeymap.cfg が参照されるのに対し、起動後にキーボードを抜き差しすると /etc/default/keyboard が参照されます。

p.45:NOOBS 1.5.0以降で日本語キーボードが英語キーボードと認識される問題

NOOBS 1.5.0以降(Jessie)で、これまでのraspi-configにより設定を行うと、キーボードの相性により、日本語キーボードが英語キーボードと認識されるものがありました。

起動時に実行される/etc/xdg/lxsession/LXDE-pi/autokey.sh の内部の記述が原因と思われるのですが、このファイルを見る限り、NOOBS 1.5.0以降では、キーボードの設定にGUIによる新設定アプリケーションを用いることが推奨されているように思われます。そのため、上記2つの項目を参考に、新設定アプリケーションでキーボードの設定を行ってください。

なお、以前この項目で、対処療法として下記の2命令を /etc/rc.local に記述する、という方法を記していましたが、新設定アプリケーションを用いる限り、この2命令は不要になりますので、削除をお願いします。「sudo leafpad /etc/rc.local」コマンドにより編集するのでした。
# 以前、/etc/rc.localに下記の2命令を記述した方はこの2命令の削除をお願いします
sleep 10
udevadm trigger --subsystem-match=input --action=change

p.52: NOOBS 1.4.2以降でのRaspbianでのログインについて

NOOBS 1.4.2以降に含まれるRaspbianでは、起動するとGUI環境であるXが起動します。これを、本書p.58の図2-22との対比で図示すると、下図のようになります。


この図のように、一度CUI/CLI環境を通すかどうかが異なります。ただし、これはNOOBS (Raspbian)のバージョンで固定されているわけではなく、設定によりデフォルトの挙動を変更できます。

以前からあるraspi-configを用いる場合は「3 Enable Boot To Desktop/Scrach」から、新設定アプリケーションでは「System→Boot」から設定できますので、お好みの起動(ログイン)方法を選択してください。


p.54:Raspberry Pi 2でstartxした直後のエラーについて

Raspberry Pi 2でRaspbianにログインしてからstartxした直後に、下記のようなエラーが出ることがあります。
GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed:Cannot determine user of subject

本書の内容を学ぶ上では影響のないエラーですが、下記のように設定ファイルを編集して再起動すると、このエラーは表示されなくなります(参考)。
まず、下記のようにテキストエディタleafpadで設定ファイル/etc/xdg/autostart/lxpolkit.desktopを編集用に開きます。
$ sudo leafpad /etc/xdg/autostart/lxpolkit.desktop
開いたファイルの末尾の行を下記のように書きかえて保存します。
(編集前)
NotShowIn=GNOME;KDE;
→
(編集後)
NotShowIn=GNOME;KDE;LXDE
編集が終了したらleafpadを閉じ、Raspberry Pi 2を再起動してください。エラーが出なくなっていると思います。

p.55:図2-20の変更

NOOBS 1.3.11以降のRaspbianではデスクトップの構成が大きく変わっています。目立つ違いは、メニュバーが下から上に変更になったこと、デスクトップ上のアイコンがゴミ箱のみになったことです。図2-20で示したアプリケーションの配置は下記のように変更されております。また、Leafpadの名称も「Text Editor」に変更されておりますので、合わせてご注意ください(Text Editorを選択するとLeafpadが起動します)。


p.57:図2-21の変更

NOOBS 1.3.11以降のRaspbianでは、「Menu」→「Shutdown」とたどると現れるダイアログは下図のように変更されております。上から「シャットダウン」、「再起動」、「ログアウト」と選択できるようになっており、デフォルトは「シャットダウン」です。図2-21の解説のように「ログアウト」する場合は、一番下の「Logout」にチェックを入れてから「OK」をクリックします。



第3章

p.64:Arduino Sidekick Basic Kitについて

電子工作に必要なパーツを集めたセットの1つとして、本書ではArduino Sidekick Basic Kitを紹介しましたが、この商品は現在千石電商オンラインショップやamazonではバージョン2に切り替わっています。
旧バージョンとの違いは以下の通りのようですが、本書のために用いる際には影響のない変更です。
  • ジャンプワイヤの本数が減っている(50本→25本)
  • LEDの個数が減っている(10個→5個)
  • 抵抗早見表が付属しない
  • 収納用ケース(4仕切り)の追加
  • RGBフルカラーLEDが8mmサイズの大きなものになり、光拡散キャップが不要なパッケージに変更されている
電子工作のセットはこれ以外にも様々なものが販売されております。ここで紹介した「Arduino Sidekick Basic Kit」も含め、どのセットを購入するにせよ本書で必要なパーツが全て揃うわけではないことはあらかじめご了承ください。

p.64:秋月電子通商のパーツセットについて

本書の改訂版である「カラー図解 最新 Raspberry Piで学ぶ電子工作」が発売されました。この改訂版向けのパーツセットが下記になります。
このパーツセットを旧版である本書でも用いることができます。
ただし、小型液晶 (LCD)は含まれておりませんのでご注意下さい。
書籍の9章までの演習 (ただし、LCDを用いる7.3および7.4と、オプション扱いでカメラモジュールを用いる5.6を除く) を行えます。

さらに下記のような注意がありますので御注意ください。

  • 含まれる半固定抵抗において、値が大きくなる回転の向きが旧版と異なる
    これについては、本ページ「p.145:半固定抵抗の回転の向きについて」の注意をご覧ください
  • 含まれるRGBフルカラーLEDが共通カソード(カソードコモン)である
    共通カソード(カソードコモン)用の回路を作成した上で、書籍の注意に基づきサンプルファイルを編集して用いる必要があります。

p.64:非公認の電子工作キットについて

Amazonにて、本書の名前を冠したキットが販売されているのですが、私や出版社が関わった製品ではありませんし、本書の方法では動作しない電子工作パーツが含まれているようです。本ページではそれらの電子工作パーツのサポートは行えませんので御了承ください。

p.70:5Vピン、3.3Vピン、GPIOに流すことのできる電流について

本書では、Raspberry Pi Model Bの5Vピン、3.3Vピン、GPIOに流せる電流を解説していますが、Model B+以降は5Vから3.3Vへ降圧するレギュレータの効率が上がったことと、Raspberry Pi自体の消費電力が変更になった影響で、このデータが大きく変わっています。 公式情報ではありませんが、インターネット上の議論に基づいたデータを下記にまとめます。参考にしたサイトを表の下に記します。

5Vピン3.3VピンGPIO(1本)GPIO(トータル)
Model BマイクロUSBの電源が流すことのできる電流 - 700mA50mA8mA (注)50mA
Model B+マイクロUSBの電源が流すことのできる電流 - 600mA1000mA - 600mA = 400mA (程度)
Raspberry Pi 2マイクロUSBの電源が流すことのできる電流 - 900mA1000mA - 900mA = 100mA (程度)
(注)デフォルトでの値です。こちらを参考に設定するとこの上限を2mAから16mAまで変化させられるようですが私は未確認です。

参考サイト

p.75:Raspberry Pi Model B+/Raspberry Pi 2/Raspberry Pi 3のGPIOについて

図3-12で解説したように、Model BとModel B+はGPIOポートのピン数が異なり、上から13段目まで(ピン1からピン26まで)が両モデルで共通となっています。本書ではこの共通部分のみを使うようにしておりますので、本書の回路は全てModel BとModel B+の両方で動作します。また、Raspberry Pi 2とRaspberry Pi 3はModel B+と同じピン配置なので、Model B+と同様に回路を作成します。

ただし、ピンを使う際にその「ピンの数え方」に注意しないとModel B+/Raspberry Pi 2/Raspberry Pi 3で間違った回路を作成してしまう可能性がありますので、その点について補足したいと思います。

下図をご覧ください。この図は「Model B」と「Model B+/Raspberry Pi 2/Raspberry Pi 3」におけるGPIO 25の数え方を解説したものです。図のように、GPIO 25を「図の上から(ピン番号の小さいほうから)11番目」のように数えることで、本書の回路図を「Model B+/Raspberry Pi 2/Raspberry Pi 3」でも用いることができます。88ページの図4-4をModel B+/Raspberry Pi 2/Raspberry Pi 3のGPIOポートを用いた図に変更したものが下図の(C)ですので参考にしてください。

また、公式サポートページにて回路の配線図(PDF)の提供を開始しました。「Model B用(26ピン)」と「Model B+およびRaspberry Pi 2用(40ピン)」がありますので、ディスプレイで閲覧するか、印刷するなどしてご活用ください。


第4章

p.89:NOOBS 1.4.2以降における、アプリケーション実行時の管理者権限について

NOOBS 1.4.1までに含まれるRaspbianでは、PythonでGPIOにアクセスするプログラムを実行するためには管理者権限が必要でした。すなわち、本書でプログラムを実行する際、
  • ターミナルで「sudo idle &」を実行して起動したIDLEからプログラムを実行
  • ターミナルで「sudo python プログラムファイル名」を実行して起動
のどちらかの方法を用いる場合がほとんどでした。

 NOOBS 1.4.2以降では、PythonでGPIOにアクセスするプログラムでも、管理者権限が不要になりました。そのため、下記のような方法でもプログラムを実行できます。
  • ターミナルで「idle &」を実行して起動したIDLEからプログラムを実行
  • 起動したメニューから「Python 2」を選択して起動したIDLEからプログラムを実行(管理者権限なしのIDLEが起動します)
  • ターミナルで「python プログラムファイル名」を実行して起動
ただし、下記のように依然として管理者権限を必要とするプログラムもあります。
  • 5章でタクトスイッチでイベント検出を行なうプログラム(NOOBS 1.4.2と1.5.0のみ。1.6.0以降は管理者権限不要)
  • 8章でサーボモーターのためにwiringPiを用いるプログラム(NOOBS 1.4.2~)
そのため、混乱を避ける意味でこれまで通り全てのプログラムに「sudo」により管理者権限をつけるのが安全といえば安全です。

p.92:NOOBS 1.9.3におけるIDLEのデフォルトフォントについて

NOOBS 1.9.3に含まれるRaspbianでIDLEを起動し、プログラム04-02-led.pyを開くと下図(左)のようになります。

このバージョンでは、デフォルトのフォントとしてプロポーショナルフォント(文字により太さが異なるフォント)が用いられてしまっています。そのため、下図(左)中の注釈に示したように、本来4個または8個ある空白文字(スペース)の個数が非常に少なく見えてしまっています(本書p.92の図4-9と比べてください)。

Pythonでは空白文字の個数による字下げの区別は重要ですので、空白文字の個数が一目でわかるフォントを用いるべきです。

そのために、IDLEのメニューにある「Options」→「Configure IDLE」を選択し、「DejaVu Sans Mono」や「Droid Sans Mono」のように、名前に「Mono」が含まれるフォントを選んでください。下図(右)のように等幅フォントが選択され、空白の個数がよくわかるようになります。


第5章

p.128:カメラモジュールv2について

2016年4月、Raspberry Piのカメラモジュールのバージョン2が発売になりました。こちらでも5章のプログラムは動作するのですが、NOOBS1.9.0までのRaspbianでは映像の向きが上下逆転してしまいますのでご注意ください。NOOBS1.9.1以降のRaspbianでは正常動作します。

p.129:ファイルマネージャから画像ファイルを開く方法

カメラで撮影した画像をファイルマネージャーから開く方法が解説されていますが、NOOBS (Raspbian)によっては、画像閲覧用のアプリケーションが起動せず、「ファイル"JPEG画像"を開くアプリケーションを選択してください」というウインドウが開く場合があります。その場合、そのウインドウ上で「アクセサリ」→「イメージビューワ」を選択してください。

第6章

p.133:12ビットADコンバータMCP3208

6章および8章ではADコンバータとして秋月電子通商で取り扱われている
を用いますが、この在庫が切れている場合、下記のMCP3204を用いても構いません
ただし、MCP3204はMCP3208に比べて2ピン少ないので、少しだけ回路の読み替えが必要です。図6-5、図6-6を例に、変更箇所を赤で示しますので参考にして下さい。
MCP3204を用いる場合の図6-5の変更点

MCP3204を用いる場合の図6-6の変更点

p.145:半固定抵抗の回転の向きについて

本書は、Arduino Sidekick Basic Kit付属の半固定抵抗を用い、「右に回すとAD変換後の値が大きくなる」回路を組みました。この回転の向きは、下図のように「半固定抵抗の3.3VピンとGNDへの接続を入れ替える」ことで逆にすることができます。書籍で「半固定抵抗の向きを上下逆さに」と記述したのと同じことです。

お使いの半固定抵抗により回転の向きが異なることがありますので、配線の入れ替えにより好みの向きを選択してください。


第7章

p.158:電子工作キットの温度センサとLCDモジュールについて

 Amazonにて、本書の名前を冠したキットが販売されているのですが、私や出版社が関わった製品ではありませんのでご注意ください。
 さらに、そのキットには本書のプログラムでは動作しない温度センサとLCDモジュールが含まれているようです(「DS18B20使用温度センサ」および「SainSmart IIC/I2C/TWI 16*02 LCD液晶 モジュール」)。この温度センサはI2C通信を行なうセンサではなく、LCDモジュールは本書使用のものと仕様が異なります。そのため、本ページではそれらのパーツのサポートは行えませんので御了承ください。

p.158:LCDモジュールピッチ変換キット

7章および10章では秋月電子通商で取り扱われている
を用いました。2015年3月にこのキットの完成版が販売されるようになりましたので、はんだづけに自信がない方はこちらを用いてもかまいません。
また、上記のキットと完成品の両方の在庫が切れている場合、下記の製品を組み合わせても構いません。ただし、こちらはキットと同様にはんだづけが必要です。
上記の完成品により、多くの方が簡単にLCDを用いることができるようになりました。

しかし、2015年12月頃以降に購入した完成品LCDではRaspberry Piで動作(認識)しない、という報告が読者の方から入ってきました。販売店に確認したところ、「LCDの新しいロットでは電流の引き込み能力が低くRaspberry Piで動作(認識)しない」との回答でした。

このままでは多くの方が第7章の演習を実行できなくなってしまいますので、2つの対処方法を下の「p.171:完成品のLCDを購入しても認識されない場合の対処法」に記しましたのでご覧ください。

そのため、これからLCDを購入しようという方は、下記の選択肢から選ぶことになるでしょう
  • 上記の完成品LCDを購入し、動作(認識)しなかったら下の「対処法」を試す
  • 下の「7章全般:利用できるLCDについて」で紹介している16x2のLCDを試す
なお、『「7章全般:利用できるLCDについて」で紹介している16x2のLCD』も、同じチップを用いたLCDですので、このロットによる問題が将来起こらないとは限りません。その場合はやはり下で紹介する対処法を試すことになるでしょう。

ご迷惑をおかけしますが、よろしくお願いします。

p.159:LCDのはんだづけについて

完成品ではなくLCDピッチ変換キットを購入した場合、温度センサモジュールとLCDモジュールの作成の際にはんだづけが必要となります。温度センサーモジュールに比べ、LCDモジュールはピンの間隔が狭い上に本数が多いので、はんだづけに失敗しやすいかもしれません。典型的な失敗例は下図(A)のいもはんだと下図(B)のブリッジです。
いもはんだは図(A)の通り、ピンとランドが導通していない点が問題です。この問題を解決するには、もう一度はんだごてでピンとランドを加熱しなおせば良いでしょう。
図(B)のブリッジは書籍でも解説したように、2つのピンが接触してしまっている点が問題です。ブリッジを解決することは、はんだごてだけでも不可能ではないですが、図(C)のように「はんだ吸い取り線」と呼ばれるものを用いて一度はんだを除去し、もう一度はんだづけし直す、という手もあります。はんだ部を、はんだ吸い取り線を挟んではんだごてで熱することで、はんだがはんだ吸い取り線に吸い取られます。YouTubeを「はんだ吸い取り線」というキーワードで検索すると使用方法の解説がたくさん見つかりますので、参考にしてみると良いでしょう。

p.161:I2C用モジュールを有効にする方法

RaspbianでI2Cを有効にする方法が、書籍から大きく変化しています。Raspbianのバージョンにより方法が異なりますので、順に解説します。

NOOBS 1.4.2以降のRaspbian (Jessie)では、GUIによる設定アプリケーションを利用できるので簡単です。まず、「Menu」→「Preferences(設定)」→「Raspberry Pi Configuration(Raspberry Piの設定)」により設定アプリケーションを起動します。そして、「インターフェイス(Interfaces)」タブを選択し、「I2C」の項目を「有効(Enabled)」にしてください。「OK」ボタンで設定アプリケーションを終了すると再起動(reboot)を促されますので、再起動します。なお、本書163ページの「●I2C用モジュールの読み込み」における、「/etc/modules」に対する「i2c-dev」の追記は、デフォルトで記入済みなので、そのまま163ページのパッケージのインストールに進んでください。

NOOBS 1.4.1までのRaspbian (Wheezy)での方法は下記の通りです。
  1. ターミナルLXTerminalで「sudo raspi-config」を実行し、設定画面を開く
  2. 「8 Advanced Options」を選択
  3. 「A7 I2C」を選択
  4. 「Would you like the ARM I2C interface to be enabled?」に「はい」を選択
  5. 確認画面で「了解」する
  6. 「Would you like the I2C kernel module to be loaded by default?」に「はい」を選択
  7. 確認画面で「了解」する
以上でraspi-configを終了するとリブート(再起動)を促されますので、そのままリブートします。

その後、本書163ページの「●I2C用モジュールの読み込み」に進み、「/etc/modules」に「i2c-dev」を追記して再起動します。Raspbianのバージョンによっては「i2c-dev」が既に書かれている場合もあります。その場合はそのままで構いません。あとは本書の通りに進めてください。

raspi-configを実行中の画面が下図になりますので、参考にしてください。

p.171:07-02-LCD.py実行時のエラーについて

LCDを用いるプログラムの一つ目である07-02-LCD.pyを実行した際、下記のエラーが出たという報告がありました。
Traceback (most recent call last):
  File "/home/pi/07-02-LCD.py", line 70, in <module>
    setup_aqm0802a()
  File "/home/pi/07-02-LCD.py", line 17, in setup_aqm0802a
    sys.exit()
SystemExit
これは、回路上のLCDがプログラムから認識されていない場合に起こるエラーです。まずはLCDが認識されることを目指します。認識されているかどうかのチェックは次項をご覧ください。

p.171:I2Cデバイスの認識について

LCDを用いたプログラムを実行するためには、Raspberry PiからLCDが認識されていることが必要です。LCDが認識されているかどうかのチェック方法は、書籍に記さなかったのですが、ここで紹介します。

まず、温度センサとLCDを接続した回路(p.170の図7-7)を作成した状態でLXTerminalを起動し、下記のコマンドを実行しましょう。
sudo i2cdetect -y 1
このコマンドは、Raspberry Piに接続されたI2Cデバイスのアドレスを出力するものです。NOOBS 1.4.2以降のRaspbian(Jessie)では管理者権限を表す「sudo」は不要ですが、上記のようにsudoをつけても問題なく動作します。

正常な出力結果は下図のようになります。48が温度センサのアドレス0x48を表し、3eがLCDのアドレス0x3eを表します。48が表示されなければ温度センサを用いるプログラムは正常動作しませんし、3eが表示されなければLCDを用いるプログラムは動作しませんので、まずは下図の出力が得られることを目指しましょう。

そのためには、温度センサ、LCDの製作過程や回路などを見直すのが基本的な方針ですが、上で述べたように、「新しいロットのLCDはRaspberry Piから認識されない」という問題に該当しているかもしれません。そのため、次項も引き続きお読みください。


p.171:完成品のLCDを購入しても認識されない場合の対処法

<LCD対処法:予備知識>

読者の方により、完成品のLCD(AQM0802)を購入しても、Raspberry Piから認識されない(上記のi2cdetectコマンドを実行しても3eが表示されない)ことがあることを教えて頂きました。

私も新たに完成品のLCD(AQM0802)を購入してみましたが、確かに同じ状況になりました。販売店に問い合わせたところ、「LCDの新しいロットでは電流の引き込み能力が低くRaspberry Piで動作(認識)しない」との回答でした。

しかし、そのようなLCDでも動作させる方法はありますので、ここで紹介したいと思います。まず、必要な予備知識から解説します。

LCDモジュールの基板の裏には、下図(A)または(B)のように、PUと書かれた部分にジャンパとよばれる電極が2セットあります。LCDモジュールを自分ではんだづけした方は下図(A)の状態、完成品を購入した方は下図(B)の状態の方が多いでしょう。下図(A)の状態では、一つの正方形内の凹凸状の電極は絶縁されています。ここにはんだを盛り下図(B)のようにすると電極が接続され、LCDモジュールの基板上のプルアップ抵抗が有効になります。そのため、これらの状態をそれぞれ
「PUなし」、「PUあり」と呼ぶことにします(PUはpull-upの略です)。


一般に、プルアップ抵抗はI2C接続時に必要になるものですが、Raspberry Pi内部に既にこのプルアップ抵抗が存在するので、LCDモジュールの基板上では必ずしもこのプルアップ抵抗の有効化は必要ありませんでした。そのため、正常動作するLCDでは「PUなし」、「PUあり」のどちらでもLCDは動作しました。

既に述べたように、「PUなし」から「PUあり」の状態にするには、凸と凹の電極にまたがるようにはんだを盛ります。逆に、「PUあり」から「PUなし」の状態に戻すには、上図(C)のように、はんだ吸い取り線(例えばこちら)を用いてPU部からはんだを除去するのが簡単です。

以上の予備知識のもと、どなたにでも容易に実現可能な暫定的対処法と、上級者向けの正式な対処法との2つを紹介します。

<LCD対処法:暫定版>

まずは、どなたにでも容易に実現可能な暫定的対処法を紹介しましょう。

Raspberry Piから認識されない完成品LCD(AQM0802)に対して、回路に下図のようにSDA部からGNDの間に抵抗を追加すると、動作を確認することができます。


抵抗の大きさRとしては、下記の範囲のものが有効でした。
  • PUありの場合のR:2kΩ
  • PUなしの場合のR:2kΩ~4.7kΩ程度
後に述べるように、私はPUなし(PU部のはんだをはんだ吸い取り線で除去した状態)で4.7kΩの抵抗を用いることを推奨します。4.7kΩでI2C通信のエラーの頻度が高い場合は3.9kΩが良いかもしれません。抵抗は例えば、2kΩ3.9kΩ4.7kΩなどが購入できます。

なお、この方法を用いると、3.3VピンからGNDまで1.8kΩ+RkΩの抵抗で接続されることになるので、約0.5mAから1.0mA程度の電流が流れ続けます(1.8kΩの抵抗は、Raspberry Pi本体内部にあるI2C用のプルアップ抵抗です)。この程度の大きさの電流がRaspberry Piに問題を起こすことはないと思われますが、本来不要な電流が流れる手法であることは注意しておいてください。なお、比較のために記すと、3章でLEDを点灯したときに流れる電流は約5mAです。

以上で、暫定的対処法の解説は終わりますが、以下、動作しない完成品LCDで何が起こっているか、そしてこの方法により何が起こるのかを簡単に記しておきます。

まず、「動作しない完成品LCD」の何が問題かを記したのが下図です。I2C通信時にLCDから
Raspberry Piに対してACK信号と呼ばれるLOW信号を出力する場面があります。正常動作するLCDでは、このACK信号は約0.8Vとなっています。これはこのLCDの仕様の範囲内の動作です。しかし、「動作しない完成品LCD」ではこれが約1.2Vとなってしまっています。これをRaspberry PiがLOWと認識できないため、処理がそこで止まっているようです。


これに対し、暫定的な対応法ではこのACK信号を下図のように約1.0Vまで引き下げています。ただし、下図に示されている通り、3.3VであるべきHIGH信号まで下げてしまいますので、下げすぎると、Rapberry PiからHIGH信号も認識できなくなってしまいます。図を見るとわかる通り、「PUあり、R=2kΩ」ではHIGHが2Vまで下がっており、HIGHと認識されなくなる直前だろうと思います。これが「PUなし、R=4.7kΩ」を推奨する理由です。


ただし、いずれにせよこれはあくまで暫定的な対処法です。正常なI2C通信では必要のない対処法ですのでご注意ください。

<LCD対処法:正式版(ただし上級者向け)>

最後に、LCD(AQM0802)を用いるための正式な方法を紹介します。ただし、これは「表面実装用」と呼ばれるタイプのチップをはんだづけする必要があり、かなりの上級者向けとなりますので、自信のある方のみお試しください。

この方法には、I2CバスリピーターPCA9515ADと呼ばれるチップが必要となります。これをブレッドボードで用いるためには、下記の3点が必要となり、下図のようにはんだづけする必要があります。

なお、上図の「EN」はENABLEの略で、利用時はHIGH(3.3V)に接続します。

PCA9515ADはリンク先の写真で分かる通り、表面実装用と呼ばれるタイプの部品であり、これを基板上にはんだづけするには、やや高度な技術が必要です。そのため、この方法は上級者向けと言えるでしょう。

表面実装用の部品のはんだづけする方法は、例えば下記のYouTube動画が参考になるでしょう。
さらに、この動画にあるように、ピンセットやフラックスもあると良いでしょう。例えば下記のようなものです。
このPCA9515を利用するための概念図が下図です。書籍の図7-5をイメージして記しました。


この小型液晶AQM0802の新しいロットを使う上で問題になるのが、Raspberry Pi上にあるプルアップ抵抗1.8kΩが小さすぎることです。新しいロットのAQM0802を使う上では10kΩが推奨されています。しかし、Raspberry Piのプルアップ抵抗は基板上に固定されており、そのため、プルアップ抵抗を小さくすることは容易なものの(接続するプルアップ抵抗の数を増やせばよい)、大きくすることは簡単ではありません。

そこで、上図のようにPCA9515を用いてRaspberry Piおよび温度センサ側と小型液晶側を切り離し、左側をプルアップ抵抗1.8kΩで、右側をプルアップ抵抗10kΩで利用できるようにするというわけです。

そのためには、ブレッドボード上で下図のような回路を組みます。図を簡単にするために、小型液晶側のプルアップ抵抗は、小型液晶モジュールのプルアップ抵抗PUを用いることにしました。上の解説「<LCD対処法:予備知識>」を参考に、2箇所のPUに半田を盛り、基板上のプルアップ抵抗を有効にしてください。


p.178:プログラム07-03-LCD-temp.py実行中のエラーについて

プログラム07-03-LCD-temp.pyは、温度計のデータを毎秒取得し、LCDに表示するものですが、実行開始からしばらくたつとエラーがでてプログラムが終了する、という報告がありました。LCDへのI2C通信が失敗したタイミングでエラーが起こるようです。
I2C通信に失敗する頻度は人により異なるようですが、頻繁にプログラムが終了するという方は、対策済みのプログラム07-03-LCD-temp-mod.pyをダウンロードし、そちらをお試しください。
ターミナルでダウンロードする場合は下記の命令を試してください。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/07-03-LCD-temp-mod.py
ブラウザからダウンロードしたいかたは、こちらのリンク上でマウスを右クリックし、「対象をファイルに保存」や「リンク先を別名で保存」などを選択して下さい。
使い方は旧ファイルと同じです。I2C通信に失敗しても終了しないプログラムになっています。このプログラムは毎秒LCDに表示をしますので、接続エラーが連続して起こらない限りは正しく動作します。

7章全般:利用できるLCDについて

本書では上で紹介したように、秋月電子通商で入手可能な8文字x2行のLCDを用いました。

よりたくさんの文字を表示できるLCDとして、ストロベリーリナックスで取り扱われている以下のものが利用可能です。どちらも16文字x2行ですので、本書で取り扱ったものの倍の文字数を表示できます。
利用している様子が下図になります。「sudo python 07-02-LCD.py 'Hello, Raspberry Pi!'」を実行した様子です。

なお、プログラムですが、本書刊行後に修整した下記をお勧めします。このLCDのための修整ではありませんが、下記に記した通りのメリットがあります。
  • 07-02-LCD-mod.py:07-02-LCD.pyの修整版。コントラスト調整とカナ表示が可能
  • 07-03-LCD-temp-mod.py:07-03-LCD-temp.pyの修整版。コントラスト調整とカナ表示が可能で、I2C通信時のエラーをスキップする
これらをターミナルでダウンロードする場合、下記のコマンドを実行してください。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/07-02-LCD-mod.py
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/07-03-LCD-temp-mod.py
なお、これらのLCDが本書のLCDと共通でのプログラムで利用可能な理由は、コントローラーICとしてST7032iと呼ばれるものが共通で用いられているためです。それ以外のLCDは本書のプログラムでは動作しませんのでご注意ください。



なお、回路の接続は本書のものとは少し異なります。上図のどちらの液晶を用いる場合も下図を参考にしてください。


プログラムは、一行だけ変更が必要です。07-02-LCD.pyや07-03-LCD-temp.pyには下記のようにLCDの文字数を設定している行があります。これらは8x2の液晶であることを示しています。
chars_per_line = 8
display_lines = 2
これを下記のように変更して保存すれば完了です。
chars_per_line = 16
display_lines = 2
また、「I2C低電圧キャラクタ液晶モジュール(16x2行)」では文字がやや薄いことがわかるでしょう。その場合、上記の修整版プログラムにしか存在しませんが、下記の行を見つけ、数字を40程度にすると見やすい濃さの文字になります。
contrast = 32 # 0から63のコントラスト。通常は32、文字が薄いときは40を推奨

7章全般:LCDにカタカナを表示する

本書で用いたLCD、および上で紹介した16x2のLCDはどちらもカタカナを表示することができます。本書のプログラムを若干修整したものを用いる必要がありますが、ここで紹介します。 修整したプログラムは下記です(上の補足で何度か紹介したものと同じです)。
  • 07-02-LCD-mod.py:07-02-LCD.pyの修整版。コントラスト調整とカナ表示が可能
  • 07-03-LCD-temp-mod.py:07-03-LCD-temp.pyの修整版。コントラスト調整とカナ表示が可能で、I2C通信時のエラーをスキップする
これらをターミナルでダウンロードする場合、下記のコマンドを実行してください。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/07-02-LCD-mod.py
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/07-03-LCD-temp-mod.py
例えば、07-02-LCD-mod.pyを開いて見ると、末尾に下記の記述があります。
    # アルファベットと記号は「''」でくくってそのまま表示可能
    write_string('Hello World')

    # カタカナや特殊記号は文字コードを一文字ずつ入力
    # 以下は「ラズベリー パイ」と表示する例
    #s = chr(0xd7)+chr(0xbd)+chr(0xde)+chr(0xcd)+chr(0xde)+chr(0xd8)+chr(0xb0)+' '+chr(0xca)+chr(0xdf)+chr(0xb2)
    #write_string(s)
このうち、「write_string('Hello World')」の先頭に「#」を記述して無効にし、 「s = chr(0xd7)+(略)」と「write_string(s)」の先頭の「#」を削除して有効にします。これを保存して実行すれば、下図のように「ラズベリー パイ」と表示されます。


上のコードでは「ch(0xd7)」が「ラ」を表しており、それを「+」記号でつないでいます。空白文字だけは英数字と同じ扱いで「' '」と表記しています。カタカナと記号の対応表は下記になります。色々試して見ると面白いでしょう。


第8章

p.192など:半固定抵抗の回転の向きについて

6章の注釈でも既に述べたように、「半固定抵抗の3.3VピンとGNDへの接続を入れ替える」ことで、AD変換の値が大きくなる回転の向きを逆にすることができます。

お使いの半固定抵抗により回転の向きが異なることがありますので、配線の入れ替えにより好みの向きを選択してください。


p.181:RGBフルカラーLEDについて

Arduino Sidekick Basic Kitに含まれるRGBフルカラーLEDは共通アノード(アノードコモン)、秋月電子通商のパーツセットに含まれるRGBフルカラーLEDは共通カソード(カソードコモン)です。

共通カソード(カソードコモン)のRGBフルカラーLEDを用いる場合、書籍とサンプルファイルの指示に従い、プログラムを編集してから用いる必要がありますので、御注意ください。

回路の配線も異なりますので書籍中の図をよく見て配線しましょう。

p.181:LED光拡散キャップ白(5mm)

8章および9章で5mmサイズのRGBフルカラーLEDを使う際、光拡散キャップを取り付けると色が見やすくなるため使用を推奨しました。

上で紹介した「Arduino Sidekick Basic Kit バージョン2」を購入された場合、含まれるRGBカラーLEDは光拡散キャップが不要なパッケージに変更されておりますので、使用する必要はありません。

下記の写真は、左から順に「Arduino Sidekick Basic Kit バージョン1に含まれるRGBフルカラーLED(端子カット済)」、「光拡散キャップ」、「Arduino Sidekick Basic Kit バージョン2に含まれるRGBフルカラーLED」です。

p.204:DCモーターのノイズについて

書籍でも触れたように、DCモーターを動かすと大きなノイズが発生します。Wifiを使ってRaspberry Piをネットワークに接続している場合、 ある条件が重なったときにDCモーターのノイズによりWifiの接続が切れてしまう現象が見られました。USB機器の相性に起因するようですが、起こる確率はあまり高くないように思います。もし運悪くそのような状況に遭遇した場合、下記の対策を検討してみてください。
  1. Raspberry Piに接続してるUSB機器、典型的にはキーボードとマウスを別のものに変更する
  2. 書籍p.212の図8-12のように、DCモーターにコンデンサを3個とりつける(端子間1個、端子-外装間2個)。書籍p.212の図8-12をカラーで再掲しますので、参考にしてみてください。
筆者の場合、上記2つのどちらの方法でも解決できました。なお、このDCモーターのノイズの問題は9.6章および10章でも起こりえますので注意してください。

p.181:サーボモーター

本書では、Arduino Sidekick Starter Kitに含まれるサーボモーター以外に、比較的安価に入手できるサーボモーターとして秋月電子通商で取り扱われている下記のものを紹介しました。
その後、秋月電子通商ではさらに安価なサーボモーターとして下記のものも取り扱われるようになりました。
amazonではSG-90の複数個セットも取り扱われております。
このSG-90やSG92Rを用いて本書の演習を行うこともできるのですが、このような安価なサーボは故障や動作不良もあり得ると考え、1個ではなく複数個購入すべきだと思います。そういう意味では、これらのサーボモーターはトラブルがあった時に対処できる上級者向けの商品であると個人的には思います。

p.212:wiringPiを用いたハードウェアPWM信号によるサーボモーターの制御

本書ではwiringPiを用いてGPIO 18に対して精度の高いハードウェアPWM信号を出力し、サーボモーター1個の角度を制御しました。

Raspberry Pi Model BではハードウェアPWM信号はGPIO 18からの1つのみしか出力できなかったのですが、Raspberry Pi Model B+以降(Raspberry Pi 2 Model B含む)では、ハードウェアPWM信号を2つ出力できます。

下図のように、1つ目のPWM0はGPIO 18かGPIO 12のどちらかから、2つ目のPWM1はGPIO 13かGPIO 19のどちらかから出力できます。その方法は本書で解説した方法と同じですので試してみてください。


p.213:wiringPiのダウンロードとインストール

書籍執筆時に比べ、wiringPiのインストール方法が大きく異なっています。Raspbianのバージョンにより異なりますので、順に解説します。

NOOBS 1.4.2以降に含まれるRaspbian(Jessie)では、wiringPiはデフォルトでインストールされていますので、改めてインストールをする必要はありません。p.214のWiringPi2-Pythonのインストールから行ってください。なお、NOOBS 1.4.2以降ではPythonでGPIOにアクセスするプログラムに管理者権限が不要になったのですが、このwiringPiを用いる場合は依然として管理者権限が必要です。「sudo idle &」で起動したIDLEでプログラムを実行してください。

NOOBS 1.4.1までのRaspbian(Wheezy)では下記のコマンドのようにapt-getで簡単にwiringPiをインストールできるようになっています。
$ sudo apt-get update
$ sudo apt-get install wiringpi
これがp.213の3つのコマンドの代わりとなりますので、これを終えた後にp.214のWiringPi2-Pythonのインストールに進んでください。

p.214:WiringPi2-Pythonのインストール

p.214のWiringPi2-Pythonのインストールですが、やや長いコマンドが多いので、コピー&貼り付けできる形で以下に再掲します。必要に応じて活用してください。なお、(3)のダウンロードサイトは、書籍に記したサイトでは更新が終了されたので変更してあります。
(1) $ cd
(2) $ sudo apt-get update
(3) $ sudo apt-get install python-dev python-setuptools
(4) $ git clone https://github.com/neuralassembly/WiringPi2-Python.git
(5) $ cd WiringPi2-Python
(6) $ sudo python setup.py install

第9章

p.227:WebIOPiのダウンロードサイト

WebIOPiのダウンロードサイトは、下記に変更されていますので注意してください。現在、ページの上部に「Cayenne」というソフトへのリンクがありますが、「Cayenne」ではなく、「WebIOPi 0.7.1」をダウンロードするようにしてください。

p.227:NOOBS 1.4.2以降におけるWebIOPiのダウンロードと展開

書籍の段階では、epiphanyでWebIOPiをダウンロードするとXarchiverという展開ソフトが自動で起動しましたので、そのソフトを用いて圧縮ファイルの展開を行いました。

しかしNOOBS 1.4.2以降では、epiphanyでWebIOPiをダウンロードしてもXarchiverは起動しない場合があります。その場合、ユーザーpiのホームのダウンロード(Downloads)ディレクトリにWebIOPi-0.7.1.tar.gzが保存されていますので、それを以下の手順で展開してください。
  • ファイルマネージャを起動し、ダウンロード(Downloads)ディレクトリにあるWebIOPi-0.7.1.tar.gzを、ユーザーpiのホームディレクトリに移動する(p.306の図B-2が類似しているので参考になるでしょう)
  • ターミナルを起動し、下記のコマンドでWebIOPi-0.7.1.tar.gzを展開してください。
  •  tar zxf WebIOPi-0.7.1.tar.gz
  • 以上が終わったら、このまま以下の記述に従い、WebIOPiをインストールしてください。

p.227:WebIOPiのバージョンとインストール

本書はWebIOPi 0.7.0を用いて解説しましたが、2015年2月10日にWebIOPi 0.7.1がリリースされました。Model BとModel B+では正常動作しますが、まだRaspberry Pi 2には対応していなバージョンです。

そこで、次のバージョンが出るまでは、
  • Model B、Model B+:WebIOPi 0.7.1をそのまま用いる
  • Raspberry Pi 2:WebIOPi 0.7.1にRaspberry Pi 2用の修正を施して用いる
という方針で利用することにします。

まず、Model BおよびModel B+でのインストール法です。バージョンが変わりますので、p.228のインストール時のコマンドは下記のように変化します。バージョンをあらわすディレクトリの数字が変更されただけですね。
$ cd WebIOPi-0.7.1/
$ sudo ./setup.sh
上記のsetup.shコマンドで行われるインストールの最後に、下記のような質問をされます。
Do you want to access WebIOPi over Internet ? [y/n]
この質問に対しては、「n」を入力してEnterキーを押してください。それでインストールが完了します。この質問は「インターネットから家の中などにあるRaspberry Piにアクセスしますか?」という内容の質問なのですが、本書ではp.226で触れたように、同一ネットワーク内からのアクセスのみを考えますので、「いいえ」に相当する「n」を入力するわけです。

次に、Raspberry Pi 2/Raspberry Pi 3でのインストール法です。本書p.228と同じ方法でWebIOPi-0.7.1をダウンロードし、/home/piに展開してください。必ず、WebIOPi-0.7.0ではなくWebIOPi-0.7.1を用いてください。この時点でユーザーpiのホームディレクトリにWebIOPi-0.7.1ディレクトリができています。そして、p.228のインストール時の2つのコマンドを以下の4つに変更します。
二つ目の命令は複雑なので、ブラウザ上でCtrl-cでコマンドをコピーし、「編集」→「貼り付け」でターミナルに貼り付けると良いかもしれませんね。
$ cd WebIOPi-0.7.1/
$ wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh
最後に、Model BやModel B+と同様、下記のような質問をされますので、「n」を入力してEnterキーを押し、インストールを完了してください。
Do you want to access WebIOPi over Internet ? [y/n]
ちなみに、上記コマンドの2つめと3つめがRaspberry Pi 2およびRaspberry Pi 3向けの修正になります。

この修正を行わずにそのままWebIOPi 0.7.0または0.7.1をインストールすると、下図のようにデモアプリケーションであるGPIO Headerにおいて、「IN/OUT」などの文字が現れるべきボタンが灰色のみのボタンとなってしまいます(書籍237ページ図9-6に対応)。その場合、「Raspberry Pi 2用の修正」を適用してWebIOPi 0.7.1を再度インストールしてみてください。なお、この「ボタンに文字がなく灰色一色になる」状況を解決しないと、9章の残りの内容は正常に動作しませんのでご注意ください。


p.229:NOOBS 1.4.2以降(Jessie)でのWebIOPI 0.7.1の起動について

NOOBS 1.4.2以降ではサービスの管理方法が変更されたため、書籍に書かれている方法でのWebIOPiの起動(sudo /etc/init.d/webiopi start)ができません。WebIOPIの新しいバージョンがリリースされれば、この問題は解決される可能性がありますが、WebIOPi 0.7.1を使う場合は下記の手順に従ってください。

まず、WebIOPi 0.7.1をインストールし終えた後、NOOBS 1.4.2以降を用いている方は以下の手順に従ってください。

ターミナルで以下のコマンドを実行します。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
$ sudo mv webiopi.service /etc/systemd/system/
本書において、WebIOPiの起動と終了のコマンドを下記で読み替えます。
(旧)
sudo /etc/init.d/webiopi start
sudo /etc/init.d/webiopi stop
→
sudo systemctl start webiopi
sudo systemctl stop webiopi
また、本書において、WebIOPiのの自動起動の有効化と無効化のコマンドを下記で読み替えます。
(旧)
sudo update-rc.d webiopi defaults
sudo update-rc.d webiopi remove
→
sudo systemctl enable webiopi
sudo systemctl disable webiopi

p.232:IPアドレスでのURLの指定について

本書では、ブラウザからRaspberry Piにアクセスする際に、ルーターなどからRaspberry Piに割り振られたIPアドレスを用いました。すなわち、IPアドレスが192.168.1.3の場合にブラウザから例えば下記のようにアクセスしました。
  • http://192.168.1.3:8000/bb/01/
しかし、この方法はifconfigコマンドなどで事前にIPアドレスを調べておく必要があり、やや面倒でした。

このIPアドレスの指定を簡単化する方法としては、以下の2つが考えられます。
  • Raspberry PiのIPアドレスを固定し、毎回同じアドレスの指定で済むようにする
  • IPアドレスではなく、「raspberrypi.local」のような名前で指定する
1つ目については、解説がやや長くなるため「Raspberry PiのIPアドレスを固定する」というページにまとめましたので興味のある方は御覧ください。

以下では、2つめの「raspberrypi.local」のような名前で指定する方法について記します

NOOBS 1.4.2以降に含まれるRaspbian(Jessie)では、IPアドレスを用いずに「raspberrypi.local」のような名前でRaspberry Piにアクセスできます。ただし、この方法でRaspberry Piにアクセスできるのは下記のみです。
  • iTunesをインストールしたWindows(iTunesに含まれるBonjourというアプリケーションが必要なためです)
  • Mac OS X
  • iPhoneやiPad
Androidスマートフォンでは現時点ではこの方法ではRasbperry Piにはアクセスできないように思われます。

上記の条件が満たされた場合、方法は簡単で、ブラウザのアドレス欄に例えば下記のように入力すればOKです。
  • http://raspberrypi.local:8000/bb/01/
すなわち、IPアドレス「192.168.1.3」などの代わりに「raspberrypi.local」という記法が使える、というわけです。これは、Jessie上で動作しているavahiというソフトウェアの働きによります。

なお、Jessie以前のWheezyで同じことを実現したい場合、LXTerminalを起動して下記のようにavahi-daemonをインストールする必要があります。
  • sudo apt-get update
  • sudo apt-get install avahi-daemon
インストール後に再起動すると、自動的にavahiが起動し、「raspberrypi.local」でのアクセスが可能になります。

なお、同じネットワーク内でavahiが起動したRaspberry Piが2台以上あると、同じ名前「raspberrypi」のマシンが2つ以上ある状態になり、名前の衝突が起こります。その場合、2台目以降のRaspberry Piには「raspberrypi-2.local」などの名前が自動的につけられますのでご注意ください。名前が衝突しないよう、あらかじめ「raspberrypi」というマシン名を変更しておく方法もありますが、ここでは省略します。

p.251:Python3でI2Cを用いる方法について

執筆時に比べ、Python3でI2Cを用いるためのインストール作業が簡単になっています。
$ sudo apt-get update
$ sudo apt-get install python3-smbus
この2行がp.251の9つのコマンドの代わりとなります。機会があれば試してみてください。

p.255:デジタル温度計のloop関数について

9.4節において、WebIOPiを用いて温度計の値をブラウザから読み取る方法を紹介しました。書籍のように、手動でWebIOPiを起動する場合は問題ないのですが、10章のキャタピラ式模型のようにWebIOPiを自動起動する場合、9.4節のプログラムがうまく動作せず温度がブラウザで読み取れないことがわかりました。

これは、WebIOPiのloop関数が、手動起動した場合は問題なく動作するものの、自動起動ではうまく機能しないことが原因のようです。

修正プログラムは以下の手順で導入できますので、デジタル温度計プログラムを自動起動で実行したい方は試してみてください。WebIOPiのloop関数を用いず、スレッドという機能で温度を読み取るように変更しています。もちろん、自動起動ではなく手動起動でも動作します。
$ sudo rm -r /usr/share/webiopi/htdocs/bb/02
$ rm -r 02
$ rm 02.zip
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/02.zip
$ unzip 02.zip
$ mv 02 /usr/share/webiopi/htdocs/bb/
2番目と3番目の命令では既存のディレクトリとファイルの削除を行っており、「そのようなファイルは存在しない」というメッセージが出る場合がありますが気にしなくとも構いません。

p.256:RGBフルカラーLEDについて

Arduino Sidekick Basic Kitに含まれるRGBフルカラーLEDは共通アノード(アノードコモン)、秋月電子通商のパーツセットに含まれるRGBフルカラーLEDは共通カソード(カソードコモン)です。

共通カソード(カソードコモン)のRGBフルカラーLEDを用いる場合、書籍とサンプルファイルの指示に従い、プログラムを編集してから用いる必要がありますので、御注意ください。

回路の配線も異なりますので書籍中の図をよく見て配線しましょう。

p.262:DCモーターのノイズについて

もし、DCモーターを動かしたときにWifiの接続が切れるような現象が見られた場合、本ページ上部の「p.204:DCモーターのノイズについて」にある対策を御覧ください。

10章

p.276:DCモーターのノイズについて

もし、DCモーターを動かしたときにWifiの接続が切れるような現象が見られた場合、本ページ上部の「p.204:DCモーターのノイズについて」にある対策を御覧ください。

p.288: LCDへのIPアドレスの表示について(1)

本書では、Raspberry Piにブラウザからアクセスする際にIPアドレスを用いました。そのため、Raspberry Piにルーターなどから割り振られたIPアドレスを知る目的で、LCDを回路に取り付けました。

しかし、「p.232:IPアドレスでのURLの指定について」の注意で紹介しましたように、avahiという仕組みを用いると、IPアドレスではなく、下記のようなアドレスでのアクセスが可能になるのでした。
  • http://raspberrypi.local:8000/bb/05/
これを用いると、回路からLCDが不要になるなどのメリットがあります。具体的には下記の通りです。
  • p.286の図10-6からLCDを取り外して良い
  • p.288での/etc/rc.localへの「sudo python /home/pi/07-02-LCD.py $_IP &」の記述が不要
さらに、Raspberry PiのIPアドレスを固定する、という方法でも、毎回IPアドレスを調べる必要がなくなりますね。こちらについては「Raspberry PiのIPアドレスを固定する」にまとめましたので、興味のある方は御覧ください。

7章の補足で述べたように、LCDにはロットの問題によるトラブルが発生していますので、これら方法を用いてLCDなしの回路とする方が良いかもしれませんね。

p.288: LCDへのIPアドレスの表示について(2)

起動時にLCDへIPアドレスを表示する方法を記しましたが、IPアドレスの表示に成功するのは、「Raspberry PiにIPアドレスが割り振られる」→「LCDにIPアドレスが表示される」という順番で処理が行なわれたときのみです。
ネットワーク環境やNOOBSのバージョンによっては、Raspberry PiにIPアドレスが割り振られるタイミングが遅く、LCDにIPアドレスが表示されない、ということがありました。その場合、LCDには「Raspberry Pi」と表示されます。
そのような問題に直面した場合、下記の2つの方法を試し、LCDにIPアドレスを表示するタイミングを遅らせてみましょう。

まず、NOOBS 1.4.2以降に含まれるRaspbian(Jessie)を用いている方向けの方法です。 Jessie以降に含まれる設定アプリケーションでは、下図(左)のように「Network at Boot」という項目があります。この「Wait for network」にチェックを入れて再起動すると、Raspberry Piのネットワークへの接続が完了してから起動が完了するようになります。その結果、LCDにIPアドレスが表示されるようになる、というわけです。下図(右)のように以前からの設定アプリケーションraspi-configにも「Wait for Network at Boot」という項目が追加されており、「Slow Wait for network connection before completing boot」を選択することで、同様の効果が得られます。


次に、NOOBS 1.4.1までのRaspbian(Wheezy)を用いている方向けの方法です。
/etc/rc.localの下記の位置に下記のように「sleep 10」と記入して、LCDへのIPアドレスの表示を10秒遅らせると、LCDへのIPアドレスの表示に成功することがあります。「10」という数字はLCDの表示を遅らせる秒数ですので、環境により適切な秒数に調節してください。
(略)
# By default this script does nothing.

sleep 10

# Print the IP address
(略)
ただし、こうするとRaspberry Piの起動が10秒遅くなることになりますので御了承ください。


p.292:mjpg-streamerインストール用コマンドの2番め

mjpg-streamerをインストールするためのコマンドの2番めは下記のようなものでした。
$ sudo apt-get install libjpeg62-dev cmake
このコマンドが
E: Package ′libjpeg62-dev′ has no installation candidate
というエラーにより終了する場合、このコマンドを下記のように変更してください。libjpeg62-devをlibjpeg8-devに変更しています。
$ sudo apt-get install libjpeg8-dev cmake
せっかくですので、(1)~(7)のコマンドを変更済みの形で全て書くと下記の通りです。長いコマンドが多いので一つずつコピーして実行しても良いでしょう。その際、行頭の「(1)」などの数字はコピーしないよう注意しましょう。
(1) sudo apt-get update
(2) sudo apt-get install libjpeg8-dev cmake
(3) git clone https://github.com/jacksonliam/mjpg-streamer.git
(4) cd mjpg-streamer/mjpg-streamer-experimental
(5) make
(6) cd
(7) sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
なお、mjpg-streamerのインストールに失敗し、何度も試行錯誤しているという方は、上記の7つのコマンドの実行前に、下記の2コマンドにより過去にインストールしたmjpg-streamerを一度削除した方が安全かもしれません。ターミナルLXTerminalを起動した直後の状態で順に実行してください。
(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf mjpg-streamer

p.296:カメラモジュールv2について

2016年4月、Raspberry Piのカメラモジュールのバージョン2が発売になりました。こちらでも10章のプログラムは動作するのですが、NOOBS1.9.0までのRaspbianでは映像の向きが上下逆転してしまいますのでご注意ください。NOOBS1.9.1以降のRaspbianでは正常動作します。

p.296:誤字について

このページに下記の誤字があることをお知らせ頂きました。お知らせ頂きありがとうございました。
金属のビス
→
金属のビス

付録A

p.300:Wifi Config

NOOBS 1.3.11以降のRaspbianでは、Wifiの設定をするためのアプリケーションWifi Configは「Menu」→「設定」→「Wifi Configuration」で起動します。

さらに、NOOBS 1.4.1以降のRaspbianでは、Wifiの設定をするための方法が下図のようにシンプルになり、さらに接続状況がひと目でわかるようになります。


付録B

p.305:USBメモリの利用について

このページでは、USBメモリを用いて本書のサンプルファイルをRaspberry Piへコピーする方法を解説していますが、NOOBSが更新されGUIが大きく変更されたため、この部分の操作に少し変更があるので補足します。

まず、USBメモリをRaspberry Piにさすと、下図のようにファイルマネージャで開くかどうかの確認画面が現れます。ここでOKをクリックしてください。USBメモリの中身が見える状態でファイルマネージャが起動します。


USBメモリの中身をRaspberry Piにコピーする操作は書籍から変更ありません。

最後に、USBメモリをRaspberry Piから抜く操作です。NOOB 1.3.10に含まれるRaspbianではGUIに(Windowsにおける)「安全な取り出し」に相当する操作を行うボタンがあったのですが、残念ながらNOOBS 1.3.11以降ではそのボタンはありません。NOOBS 1.4.2からそのボタンは復活したのですが、それ以前のバージョンのNOOBSを用いている方は下記の操作を行ってからUSBメモリをRaspberry Piから抜くようにしてください。

まず、下図のようにファイルマネージャの左の階層構造でUSBメモリを示すフォルダが青色に選択されていることに着目してください。この状態で、図中の2つの赤丸で示されているように、このUSBメモリはRaspberry Pi上では「/media/1DEF-5904」という名称で用いられていることがわかります。この名称はUSBメモリによって変わります。

以上を確認した後、ターミナルソフトLXTerminal を起動し、
$ umount /media/1DEF-5904
を実行します。「umount /media/1D」まで打ち込んでからTABキーを押すと楽に入力できるでしょう。この際、「1DEF-5904」の部分は人によって異なるので、各自読み替えて実行してください。

以上でUSBメモリの取り出し(アンマウント)が完了しますので、Raspberry PiからUSBメモリを抜いて構いません。


なお、NOOBS 1.4.2以降を用いている方は、下図のように画面右上に「安全な取り外し」に相当するボタンがありますので、それを押してからUSBメモリを抜くようにしましょう。


追加PDF

PDF10:spidevのインストールについて

公式サポートページでダウンロードできる追加PDFの内容についてです。spidevを用いてADコンバータから値を取得する方法を紹介しておりますが、2015年2月に公開されたNOOBS 1.3.12以降のRaspbianでは追加PDFの通りに操作してもプログラムが意図通りに動作せず、値が取得できません。そこで、以下のようにspidevのインストール方法を変更する必要があります。Raspbianのバージョンにより異なりますので、順に解説します。

まず、NOOBS 1.4.2以降のRaspbian(Jessie)の場合は、python-spidevというパッケージをインストールします。バージョンによってはデフォルトでインストール済の場合もあります。
$ sudo apt-get update
$ sudo apt-get install python-spidev

次に、NOOBS 1.4.1までのRaspbian(Wheezy)の場合、PDF10ページからPDF11ページにかけての7つのコマンド下記の5つのコマンドに差し替えてください。
$ sudo apt-get update
$ sudo apt-get install python-dev
$ git clone https://github.com/Gadgetoid/py-spidev
$ cd py-spidev
$ sudo python setup.py install
あとは追加PDFの通りに操作してください。