2020年12月31日木曜日

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

はじめに

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

2016年7月に発売された本書の改訂版のページは「カラー図解 最新 Raspberry Piで学ぶ電子工作」、
2020年6月に発売された本書の改訂版のページは「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、
ですのでご注意ください。

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


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

補足情報一覧


追加コンテンツ


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


感想など



2020年12月30日水曜日

本書発売後の追加情報

本ページでは、2014年11月に発売された金丸隆志著「Raspberry Piで学ぶ電子工作」(講談社ブルーバックス)の補足情報や、OSのバージョンアップに伴う変更点などを記していきます。

2016年7月に発売された本書の改訂版のページは「カラー図解 最新 Raspberry Piで学ぶ電子工作」、
2020年6月に発売された本書の改訂版のページは「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作
ですのでご注意ください。

はじめに

電子書籍版について

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

回路配線図について

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

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


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

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


回路配線図をRaspberry Pi上で見る場合

回路配線図をRaspberry Pi上で見る場合、古いRaspbianではChromiumブラウザ上で日本語が表示されないことが多いと思います。その場合、一旦PDFファイルをRaspberry Pi上にダウンロードし、デスクトップメニューの「アクセサリ」→「PDF Viewer」から開くようにしてください。 PDFファイルをRaspberry Pi上にダウンロードする方法は、「一旦Chromiumブラウザで開いてから画面上のダウンロードボタンを押す」か「リンク上で右クリックして『名前を付けてリンク先を保存』を選択」のどちらかです。
新しいRaspbianではChromiumブラウザ上でPDFを見ても日本語が表示されます。

第2章

p.28: OSインストール法の最新版について

OSであるRaspbianのインストールから設定の流れは、書籍執筆時から大きく変更を受けております。
最新のインストールおよび設定方法は、 「Raspberry Piではじめる機械学習 補足情報」内にあるRaspberry PiへのOSのインストール方法をご覧ください。本書2章と同等の内容をアップデートされた状態で見ることができます。

本書はRaspberry Pi 4のような最新のRaspberry Piでの動作もサポートしています。

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
2016/10/5NOOBS 2.0.0
2016/11/29NOOBS 2.1.0
2017/2/27NOOBS 2.2.0
2017/3/3NOOBS 2.3.0
2017/4/10NOOBS 2.4.0
2017/6/23NOOBS 2.4.1
2017/7/5NOOBS 2.4.2
2017/8/17NOOBS 2.4.3Stretch
2017/9/8NOOBS 2.4.4
2017/11/29NOOBS 2.4.5
2018/3/14NOOBS 2.6.0
2018/3/14NOOBS 2.7.0
2018/4/18NOOBS 2.8.0
2018/4/24NOOBS 2.8.1
2018/6/27NOOBS 2.8.2
2018/10/11NOOBS 2.9.0
2018/11/15NOOBS 3.0.0
2019/4/8NOOBS 3.0.1
2019/6/24NOOBS 3.1.1Buster
2019/7/10NOOBS 3.2.0
2019/9/30NOOBS 3.2.1
2020/2/7NOOBS 3.3.0
2020/2/14NOOBS 3.3.1
2020/5/27Raspberry Pi OS 2020-05-27
2020/8/20Raspberry Pi OS 2020-08-20

全てのバージョンで動作確認しています。以前バージョンを使いたい方は下記のJAISTのミラーサイトで適切な日付をたどると見つけられます。

p.45: セットアップウィザードの起動

現在のRaspbianでは、初回起動時に設定用のセットアップウィザードが起動するようになっております。


その操作法は、「Raspberry Piではじめる機械学習 補足情報」内にあるRaspberry PiへのOSのインストール方法に記されておりますのでそちらをご覧ください。本書2章と同等の内容をアップデートされた状態で見ることができます。

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

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


第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:開発環境IDLEの代替としてThonny Python IDEを用いる方法

2019年11月現在、本書で解説した開発環境IDLEはデフォルトでRaspbianに含まれていません。IDLE を別途インストールして利用する方法もあるのですが、より簡単にPythonプログラムを実行する方法として、デフォルトでインストール済の「Thonny Python IDE」を用いる方法をここで紹介します。

Thonny Python IDEはpython3用のプログラムを実行するための環境です。本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。 Python 3用ツールのインストール法は本ページで解説されておりますので注意して本ページをお読みください。

さて、メニューの下図に示されている「Thonny Python IDE」をマウスでクリックするとThonny Python IDEが起動します。


次図のように、「LOAD」がファイルの読み込み、「RUN」がプログラム実行、「STOP」がプログラム停止であることを理解すれば問題なく利用できるでしょう。

ただし、「STOP」ボタンでプログラムを停止すると、GPIOの終了処理が正しく機能しないようです。「Shell」と書かれた領域の上でキーボードの「Ctrl-C」によりプログラムを終了するのが良いでしょう。なお、Thonnyには「時々Ctrl-cが効かなくなる」という不具合があるようなので、そういうときのみ「STOP」ボタンでプログラムを停止すると良いでしょう。


なお、本書では8.6章でサーボモータを用いる場合に管理者権限が必要となります。その場合、管理者権限のThonnyでプログラムを読み込んで実行する必要があります。 その方法は、LXTerminalを開いてから下記のコマンドを実行してください。
sudo thonny &
管理者権限のThonnyが現れるので、8.6章のファイルを読み込んで実行してください。

p.89:Python2とPython3について

さて、上で紹介した Thonny Python IDEを用いるということは、Python バージョン 3 を用いることを意味します。本書で利用を推奨していた Python バージョン 2 は 2020年1月1日にサポートが切れますので、これを機会に Python 3 に移行することを推奨します。本書のプログラムは Python 3 でも動作するよう更新済ですし、Python 3用のツールのインストール法も、全て本ページで解説していますので大きな問題はありません。

なお、コマンドによりプログラムを実行する場合は、Python 2とPython 3および対応コマンドが下記のように異なりますので参考にしてください。

項目Python2用コマンドPython3用コマンド
プログラム実行コマンドpython または python2python3
IDLE実行コマンドidleidle3
Thonny実行コマンドなしthonny
Python用プログラムインストールコマンド(本書では用いない)pipまたはpip2pip3

プログラム実行時に自分がPython2 と Python3 のどちらで実行しているかを意識するとPythonプログラムにより早く慣れることができるでしょう。

p.89:NOOBS 2.8.2 (Raspbian 2018-06-27) 以降でのIDLEの通常起動について

NOOBS 2.8.2 (Raspbian 2018-06-27) から、デスクトップのメニューから開発環境IDLEの項目が削除されています。そのため、その代替としてThonny Python IDEを用いる方法を上で解説しました。通常はこのThonny Python IDEを用いてください。
ここでは、それでも敢えてIDLEを用いたいという方のためにその方法を解説します。

ターミナル LXTerminal を起動し、下記の3つのコマンドを順に実行してください。Python 2 用と Python 3 用のIDLEがインストールされます。
sudo apt update
sudo apt install idle-python2.7
sudo apt install idle-python3.7
Python 2用のIDLEの実行は、やはりターミナルから下記のコマンドにより行います。
idle &
Python 3 用のIDLEを起動したければ
idle3 &
を実行します。

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

Raspbian Wheezyでは、PythonでGPIOにアクセスするプログラムを実行するためには管理者権限が必要でした。すなわち、本書でプログラムを実行する際、
  • ターミナルで「sudo idle &」を実行して起動したIDLEからプログラムを実行
  • ターミナルで「sudo python プログラムファイル名」を実行して起動
のどちらかの方法を用いる場合がほとんどでした。
Raspbian Jessie 以降は、PythonでGPIOにアクセスするプログラムでも、管理者権限が不要になりました。そのため、下記のような方法でもプログラムを実行できます。
  • ターミナルで「idle &」を実行して起動したIDLEからプログラムを実行
  • 起動したメニューから「Python 2」を選択して起動したIDLEからプログラムを実行(管理者権限なしのIDLEが起動します)
  • ターミナルで「python プログラムファイル名」を実行して起動

第5章

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

2016年4月、Raspberry Piのカメラモジュールのバージョン2が発売になりました。こちらでも5章のプログラムは動作します。

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

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

p.132:2020-05-27以降のOSでイヤフォンジャックを使う

2020-05-27にリリースされたOSからは、音声出力先の選択ができなくなりました。 HDMIケーブル経由で音声を出力する方には問題がありませんが、Raspberry Pi 上のイヤフォンジャックから音を出力したいが音が出ないという場合は、以下の指示に従ってください。

まず、音声再生コマンド「mpg321 test.mpg」は以下のコマンドに変更してください。
mpg321 -a hw:1,0 test.mp3
次に、05-05-sw-mp3.py の実行ですが、プログラム内の12行目の「args = ['mpg321', 'test.mp3']」という命令を以下に変更し、ファイルを上書き保存した上で実行してください。
args = ['mpg321', '-a', 'hw:1,0', 'test.mp3']

第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.171:I2Cデバイスの認識について

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

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

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

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


7章全般:利用できるLCDについて1~秋月電子編

本書で紹介したLCDの新しいロットでは、本ページ下部で記すように何らかの対処をしないとRaspberry Piでは利用できなくなってしまいました(抵抗1本の追加で暫定的に利用可能になるのですが)。そこで、正常に動作するLCDをいくつか紹介します。

まず、秋月電子通商が書籍のLCDを正式にRaspberry Pi対応させたモジュールキットです。なお、組み立てキットの方は狭いピッチ(ピン間隔)の半田付けが必要になりますので、半田付けにある程度慣れている方向けとなります。通常は完成品を推奨します。商品へのリンクは下記になります。
組み立てキットに含まれるパーツを図示したのが下図(左)となっています。ピンソケットが2種含まれていますので、お好みの方を半田付けします。 完成品にはLCDを立てて使うためのピンソケットがあらかじめ取り付けられています。

なお、本書のようにブレッドボードで利用するためには、組み立てキットに下図(中)のようにピンヘッダを別途購入して半田付けする方法があります。ピンヘッダとは、例えば下記のようなものです。丁度のサイズのものを購入するよりは、長いものを購入してニッパでカットするのが一般的です。

ピン配置は本書のものとは異なり、上図(右)のようになっています。

利用例は下図のようになっています。下図(左)がピンソケットを用いた場合で、Raspberry PiのGPIO(3.3V/SDA/SCL/GPIO4/GNDと続くピン)に直接させるようになっています。完成品ではLCDを立てて使うようなピンソケットとなっています。ただし、これではGPIOのピンの一部が利用できなくなってしまいますので、ジャンパワイヤを介してGPIOに接続するのがお勧めです。また、本LCDの完成品には以下に記すLEDのバックライト機能はありませんのでご注意ください。

ピンヘッダを用いて作成したLCDならば本書のようにブレッドボートで利用可能です。その様子を示したのが下図(右)です。なお、基板の「LED」ピンを3.3Vに接続すると、図のようにLCDのバックライトが点灯した状態になります。お好みで利用してください。ピンソケットでGPIOに直接差したLCDならば、GPIO 4をHIGHにすることでバックライトが点灯します。なお、バックライトを利用するには、LCDを基板に半田付けする際に2か所の四角いピンも半田付けする必要がありますのでご注意ください。


7章全般:利用できるLCDについて2~ストロベリーリナックス編

他に用いることのできるLCDとしては、例えばストロベリーリナックスで取り扱われている以下のものがあります。どちらも16文字x2行ですので、本書で取り扱ったものの倍の文字数を表示できます。
下図は、
  • python bb2-04-03-lcd-practice.py 'Hello, Raspberry Pi!'
を実行した様子です。現在のRaspbianでは管理者権限を表す「sudo」は不要です。

ただし、この2つのLCDでは、本書p.115図4-11の文字コード表の一番左の列(0x06~0x0f)の文字は表示されないようです。ご了承ください。

これらのLCDが本書のLCDと共通でのプログラムで利用可能な理由は、コントローラーICとしてST7032iと呼ばれるものが共通で用いられているためです。そのため、書籍で紹介したLCDにあったロットによる問題が将来起こらないとは限りません。その場合はやはり上記の暫定的対処法を試すことになるでしょう。


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


プログラムは、一行だけ変更が必要です。LCDを用いるプログラムには下記のようにLCDの文字数を設定している行があります。これらは8x2の液晶であることを示しています。
chars_per_line = 8
display_lines = 2
これを下記のように変更して保存すれば完了です。
chars_per_line = 16
display_lines = 2
この変更をしなければ、単に8x2の液晶として動作します。

また、「I2C低電圧キャラクタ液晶モジュール(16x2行)」(小さいほう)を用いるとデフォルトでは文字がやや薄くなります。2019/6/25に更新されたサンプルファイルでは文字の濃さを調整できるよう変更されていますので、必要に応じて raspi2-sample.zip をダウンロードしなおし、展開した上で利用してください。

更新されたそれぞれのファイルで下記の行を見つけ、contrastの値を40に変更し保存してください。必要に応じて、上で記した「chars_per_line」を16にする変更も行なってください。
contrast = 32 # 0から63のコントラスト。通常は32、文字が薄いときは40を推奨

p.159:以前のLCDを購入した場合の暫定的な対処法

<LCD対処法:予備知識>

読者の方により、書籍内で紹介したLCD(AQM0802)を2015年12月頃以降に購入した場合、Raspberry Piから認識されない(i2cdetectコマンドを実行しても3eが表示されない)ことがあることを教えて頂きました。

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

このままでは7章の演習を実行できなくなってしまいます。そこで、そのように問題のあるLCDを動作させる方法をここで紹介します。なお、最も簡単な解決方法は、本ページ上部で紹介した動作確認済のLCDを購入することです。以下は、古いLCDをなんとか活用したいという方向けの情報です。

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


一般に、プルアップ抵抗はI2C接続時に必要になるものですが、Raspberry Pi内部に既にこのプルアップ抵抗が存在するので、LCDモジュールの基板上では必ずしもこのプルアップ抵抗の有効化は必要ありませんでした。そのため、7章において正常動作する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Ω程度
  • ただし、8章でサーボドライバとともに用いる場合「PUなし、R=2kΩ」のみ。サーボドライバにプルアップ抵抗が含まれており、実質「PUあり」と同じ状態になるためです。
後に述べるように、私は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に問題を起こすことはないと思われますが、本来不要な電流が流れる手法であることは注意しておいてください。なお、比較のために記すと、2章で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を利用するための概念図が下図です。


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

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

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


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

本書で用いたLCD、および上で紹介した16x2のLCDはどちらもカタカナを表示することができます。 07-02-LCD.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)」が「ラ」を表しており、それを「+」記号でつないでいます。空白文字だけは英数字と同じ扱いで「' '」と表記しています。カタカナと記号の対応表は下記になります。色々試して見ると面白いでしょう。

ただし、上で紹介したストロベリーリナックスの2つのLCDでは、下記対応表の一番左の列の文字(0x06~0x0f)は表示されないようです。ご了承ください。


第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.202:モータードライバ TA7291Pについて

モータードライバのTA7291Pはすでに生産が終了しており、今後入手が困難になることが予想されます。 代替品として、下記を選びました。TA7291Pを入手できないときはお試しください。
このモータードライバは、ピンヘッダを自分で半田付けするキットとなっています。完成状態は下図の通りです。


このモータードライバを用いて図8-11と同等の回路を組むには下図のようにします(クリックすると拡大されます)。上で述べたように、電池ボックスは電池三本用のものをお使いください。



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のインストール

現在のRasbianでは、wiringPiのインストール作業は不要です。そのままこの下のWiringPi2-Pythonのインストールに進んでください。

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

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

p.216:WiringPi2-Pythonを用いたプログラムの実行について

現在の Raspbian では、多くの電子工作プログラムの実行には管理者権限が不要になりました。
しかし、WiringPi2-Pythonを用いる08-04-servo.pyの実行には今でも管理者権限が必要です。
正確には、精度の高いPWM(ハードウェアPWM)を用いるプログラムの実行には管理者権限が必要です。

用いている実行方法により下記のどれかのコマンドの実行が必要となります。
管理者権限のIDLEで実行
sudo idle &
管理者権限のThonnyで実行
sudo thonny &
管理者権限のPython2コマンドで実行
sudo python 08-04-servo.py
管理者権限のPython3コマンドで実行
sudo python3 08-04-servo.py

第9章

p.227:WebIOPiのダウンロードとインストール

書籍では、WebIOPiのダウンロードをブラウザから行いましたが、以下で紹介する方法では、ダウンロード・展開・インストールを全てコマンドから行います。

ターミナルを起動し、以下のコマンドを一つずつ順に実行してください。WebIOPiのダウンロード・展開・インストールが行われます。ブラウザからコマンドを一つずつコピーし、ターミナルへ貼り付けて実行するのが確実でしょう。

コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「$」の記号はコピーする必要はありませんのでご注意ください。
$ wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
$ tar zxf WebIOPi-0.7.1.tar.gz
$ cd WebIOPi-0.7.1/
$ wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi-pi2bplus.patch
$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh
最後に、下記のような質問をされますので、「n」を入力してEnterキーを押し、インストールを完了してください。
Do you want to access WebIOPi over Internet ? [y/n]
この質問は「インターネットから家の中などにあるRaspberry Piにアクセスしますか?」という内容の質問なのですが、本書ではp.226で触れたように、同一ネットワーク内からのアクセスのみを考えますので、「いいえ」に相当する「n」を入力するわけです。

そして、以下のコマンドを実行し、起動用ファイルを適切な位置に配置します。このコマンドもやや長いので、コピー&貼り付けにより実行しましょう。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
$ sudo mv webiopi.service /etc/systemd/system/
以上の方法に従わずにそのままWebIOPi 0.7.1をインストールすると、下図のようにデモアプリケーションであるGPIO Headerにおいて、「IN/OUT」などの文字が現れるべきボタンが灰色のみのボタンとなってしまいます(書籍237ページ図9-6に対応)。

その場合、WebIOPiを再インストールしてみましょう。そのためには、まずユーザーpiのホームディレクトリ(フォルダ)で下記の2つのコマンドを一つずつ実行し、過去のインストール時のファイルを一旦削除します。
$ sudo rm -f WebIOPi-0.7.1.tar.gz
$ sudo rm -rf WebIOPi-0.7.1/
その後、WebIOPi 0.7.1を再インストールしてみてください。なお、この「ボタンに文字がなく灰色一色になる」状況を解決しないと、9章の残りの内容は正常に動作しませんのでご注意ください。

なお、再インストールを行っても状況が変わらないという場合、原因はわかりませんが、OSであるRaspbianが壊れているという可能性もないとは言えません。余力があればOSを再インストールしてみることも検討してみると良いでしょう(私自身、OSの再インストールが必要だったことはないのですが、読者の方にはそれで改善したという方が複数名いらっしゃるようです)。


p.229:WebIOPiについての各種コマンド

WebIOPiの起動/停止、自動起動/自動起動の停止、などのコマンドは現在では書籍と異なっています。下記の通りですので、コピーするなどしてご活用ください。

WebIOPiの起動コマンド
sudo service webiopi start
WebIOPiの停止コマンド
sudo service webiopi stop
WebIOPiが動作確認しているか確認するコマンド
ps ax |grep webiopi 
WebIOPiの自動起動
sudo systemctl enable webiopi
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, Stretch, Buster)では、IPアドレスを用いずに「raspberrypi.local」のような名前でRaspberry Piにアクセスできます。ただし、この方法でRaspberry Piにアクセスできるのは下記のみです。
  • iTunesをインストールしたWindows(iTunesに含まれるBonjourというアプリケーションが必要なためです。ただし、Windows 10にApril 2018 Updateを適用すると、この方法が一時的に使えなくなります。WindowsからiTunesとBonjourを一旦削除してからiTunesをインストールしなおすとまた使えるようになるようです)
  • Mac OS X
  • iPhoneやiPad
Androidスマートフォンでは現時点ではこの方法ではRasbperry Piにはアクセスできないように思われます。

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

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

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

p.240:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー

240ページでは、本書のサンプルファイルを/usr/share/webiopi/htdocsディレクトリへコピーするという作業を行います。 この作業は重要であり、これに失敗すると、以後の演習が期待通りに動作しません。そこで、コピーして利用できるよう、 そのコマンドをここに再掲します。 ターミナルソフトウェアLXTerminalを起動して、下記の2コマンドを一つずつ順に実行してください。
sudo chown -R pi /usr/share/webiopi/htdocs
cp -r 09-samples/bb /usr/share/webiopi/htdocs
なお、本書のサンプルファイルをbluebacksディレクトリに展開した方は、上記2コマンド実行の前に「cd bluebacks」コマンドを実行して bluebacksディレクトリに入り、その後2コマンドを実行するようにしてください。

p.240:/etc/webiopi/config の myscript行

9.3以降の演習は設定ファイル /etc/webiopi/config の[SCRIPT]セクションに、Pythonスクリプトの場所を示す行を記す必要があります。 記述に間違いがあるとWebIOPiが起動しませんので、コピーできるように正しい記述を以下に記しておきます。
myscript = /usr/share/webiopi/htdocs/bb/01/script.py


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

現在のRaspbianでは、インストール作業なしにPython3でI2Cを用いることができるようになっています。そのため、サンプルファイルに含まれていた 09-samples/smbusmodule.c はいずれ削除する予定です。

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:モータードライバ TA7291Pについて

上の「p.202:モータードライバ TA7291Pについて」で述べたように、モータードライバ TA7291Pの入手が難しいときは下記の代替品をお使いください。
このモータードライバを用いて図9-13と同等の回路を組むには下図のようにします(クリックすると拡大されます)。上で述べたように、電池ボックスは電池三本用のものをお使いください。



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

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

10章

p.281:モータードライバ TA7291Pについて

上の「p.202:モータードライバ TA7291Pについて」で述べたように、モータードライバ TA7291Pの入手が難しいときは下記の代替品をお使いください。
このモータードライバを用いて図10-4と同等の回路を組むには下図のようにします(クリックすると拡大されます)。上で述べたように、電池ボックスは電池三本用のものをお使いください。


さらに、このモータードライバを用いて図10-6と同等の回路を組むには下図のようにします(クリックすると拡大されます)。こちらも電池ボックスは電池三本用のものをお使いください。




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

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

p.288:/etc/rc.localに追加する1行

LCDにIPアドレスを表示するプログラムの自動起動のために/etc/rc.localに追加する行は下記の通りです。必要に応じてコピーしてご活用ください。書籍から「sudo」コマンドを省略しました。
python /home/pi/07-02-LCD.py $_IP &
サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
python /home/pi/bluebacks/07-02-LCD.py $_IP &

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への「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アドレスが表示される」という順番で処理が行なわれたときのみです。
ネットワーク環境や Raspbian のバージョンによっては、Raspberry PiにIPアドレスが割り振られるタイミングが遅く、LCDにIPアドレスが表示されない、ということがありました。その場合、LCDには「Raspberry Pi」と表示されます。

そのような問題に直面した場合、下記の2つの方法を試し、LCDにIPアドレスを表示するタイミングを遅らせてみましょう。

まず、Jessie 以降の Raspbian を用いている方向けの方法です。 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」を選択することで、同様の効果が得られます。


次に、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.290:/etc/rc.localに追加する1行

シャットダウンプログラムの自動起動のために/etc/rc.localに追加する行は下記の通りです。必要に応じてコピーしてご活用ください。書籍から「sudo」コマンドを省略しました。
python /home/pi/10-01-sw-poweroff.py &
サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
python /home/pi/bluebacks/10-01-sw-poweroff.py &

p.291:キャタピラ式模型のメンテナンス

キャタピラ式模型を長く使っていると、だんだん動作が安定しなくなってくることがあります。例えば「右のキャタピラは正常動作するが、左はなかなか動かない」などです。

もちろん、「ジャンパーワイヤーが抜けていないか」など、回路の配線をまずはチェックすべきです。 しかし回路の配線に問題がなかった場合、どこに注意してメンテナンスすべきかを以下に記します。上から順にチェックしていきましょう。
  1. 電池の残量不足ではないかチェック:基本ではありますが、まずはここからチェックしましょう。
  2. ジャンパワイヤのチェック:ジャンパワイヤの抜き差しをする際、持ち手ではなくケーブルを引っ張ることを繰り返すと中で断線することがあります。断線が疑われるジャンパワイヤは捨ててしまった方がよいでしょう。
  3. ギアボックスで空回りしているシャフトがないかチェック:ギアボックスの作成の際、イモネジを六角レンチで締めてシャフトを固定している部分があります。そこが緩んで空回りしていないかチェックしましょう。
  4. モーターの軸が空回りしていないかチェック:モーターの軸にはピニオンギアが取り付けられています。ピニオンギアが劣化してゆるくなり、モーターの軸が空回りすることがあります。これはモーターをギアボックスから取り外してみないとわかりません。ピニオンギアがゆるくなっていた場合、「AO-7005 8Tピニオンセット白(10個)」などを購入して交換しましょう。
  5. ブレッドボードのチェック:ブレッドボードを長くつかっていると、なんらかの理由でブレッドボード内部の抵抗が大きくなりモーターがあまり回転しなくなることがあります。筆者は複数回そのような経験をしています。安価なもので良いのでテスターを購入すると内部の抵抗の大きさをチェックできます。内部の抵抗が大きく計測されたブレッドボードは消耗品と考えて捨ててしまった方がよいでしょう。
  6. モータードライバーのチェック:回路には左右のキャタピラ用のモータードライバーが二つあります。これをブレッドボート上で交換して、左右のキャタピラの動きの軽快さが入れ替わるかどうか試してみましょう。動きの軽快さが入れ替わるならば、モータードライバのどちらかに問題がある可能性がありますので、新品の「モータードライバー TA7291P (2個入)」を購入して交換してみるのも手です。
  7. モーターのチェック:上で二つのモータードライバーを交換しても左右のキャタピラの動きの軽快さが入れ替わらなかった場合、モーターに問題がある可能性があります。新品の「AO-1001 FA-130タイプノーマルモーター」を購入して交換してみるのも手です。

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

mjpg-streamerのインストールコマンドを全て書くと下記の通りです。長いコマンドが多いので一つずつコピーして実行しても良いでしょう。その際、行頭の「(1)」などの数字はコピーしないよう注意しましょう。
(1) sudo apt update
(2) sudo apt 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

また、mjpg-streamerの自動起動のために/etc/rc.localに追加する行は下記の通りです。必要に応じてコピーしてご活用ください。書籍から「sudo」コマンドを省略しました。
sh /home/pi/10-02-stream.sh
サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
sh /home/pi/bluebacks/10-02-stream.sh

p.294:mjpg-streamerの映像が表示されない場合のチェック項目

mjpg-streamerによる映像が表示されるためには、下記の条件が満たされている必要があります。

(1) カメラが正しく接続されていること
(2) カメラが有効に設定されていること
(3) mjpg-streamerが正しくインストールされていること
(4) mjpg-streamerが起動されていること
(5) 適切なPCやスマートフォンなどのブラウザからmjpg-streamerにアクセスしていること
(6) ブラウザから適切なアドレスにアクセスされていること

それぞれが正しく実行されているか確認するためのチェック項目は下記のようになります。

(1') 金属が露出した端子面がmicroSDカード側を向いて接続されており、
 コネクタが適切に押し込まれていることを確認してください。

(2') デスクトップのメニューから「設定」→「Raspberry Piの設定」→「インターフェイス」
 →「カメラ」が「有効」になっていることを確認してください。

(3') 補足ページ「p.292:mjpg-streamerのインストールコマンド」に掲載したのコマンドを
 正しく(コピーするなどして)実行したことを確認してください。
 /opt/mjpg-streamer/mjpg_streamer というファイルが存在すれば問題ないでしょう。
 一つ目の「mjpg-streamer」はディレクトリ名、二つ目の「mjpg-streamer」は
 ファイル名です。
 二つ目の「mjpg-streamer」が存在しなければインストールに失敗しています。

(4') mjpg-streamerの起動法は下記の2通りあります。
 (a) ターミナルで「sh 10-02-stream.sh」を実行する
 (b) /etc/rc.local に記述して自動起動する
 まずは(a)の手動での起動が成功するか確認しましょう。
 mjpg-streamerは起動済みだと思ったら、
 ターミナルで「ps ax | grep mjpg」と実行してそれを確認してみましょう。
 下記のように表示されれば起動に成功しています。細かな数字は人によって異なります。
 
 2393 pts/0 Sl 0:00 /opt/mjpg-streamer/mjpg_streamer -i input_raspicam.so
   -fps 15 -q 50 -x 640 -y 480 -o output_http.so -p 9000 -w /opt/mjpg-streamer/www
 2545 pts/0 S+ 0:00 grep --color=auto mjpg
 
 一方、下記のような表示しかなければ起動に失敗しています。
 ここまでの内容を見直す必要があります。
 
 2545 pts/0 S+ 0:00 grep --color=auto mjpg

(5')「適切なPCやスマートフォンなど」とは、本書図9-1に記されているように、
 Raspberry Piと同じネットワークに属しているPCやスマートフォンのことです。
 スマートフォンの場合は本書図9-1のようにWifiで
 Raspberry Piと同じネットワークに続している必要があります。
 自信がなければRaspberry PiのChromiumブラウザからアクセスするのが確実ですので、
 まずはRaspberry Piからのアクセスに成功することを目指しましょう。

(6') 図10-8のテスト用画面を確認するためにブラウザに記すアドレスは
  http://xxx.xxx.xxx.xxx:9000/ です。
 もちろん、「xxx.xxx.xxx.xxx」の部分はRaspberry Piに割り当てられているIPアドレスで
 読み替える必要があります。

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

2016年4月、Raspberry Piのカメラモジュールのバージョン2が発売になりました。こちらでも10章のプログラムは動作します。

p.296:誤字について

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

付録A

p.300:Wifi Config

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


付録B

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

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

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


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

最後に、USBメモリをRaspberry Piから抜く操作です。Jessie 以降を用いている方は、下図のように画面右上に「安全な取り外し」に相当するボタンがありますので、それを押してからUSBメモリを抜くようにしましょう。Windowsなどと同じ手順ですね。



p.307 圧縮されたサンプルファイルの展開に関する注意

NOOBS 3.1.1 (Raspbian 2019-06-20) 以降、圧縮ファイルを展開するためのソフトウェアのデフォルトの設定が変化しましたので利用の際は注意が必要です。
下図(左)のように、展開先のデフォルトが「/tmp」とされ、また、展開時に自動的にフォルダが作られるようになっています。
これを、下図(右)のように
  • 展開先に「 /home/pi 」または「 /home/pi/bluebacks 」と記入
  • 「Ensure a containing directory」のチェックを外す
の2点を行ってから「展開」ボタンを押すようにしましょう。展開先に記す文字は、このページからコピー (Ctrl-c) して貼り付ける (Ctrl-v) と安心です。



追加PDF

PDF8:2020-05-27以降のOSでイヤフォンジャックを使う

2020-05-27にリリースされたOSからは、音声出力先の選択ができなくなりました。 HDMIケーブル経由で音声を出力する方には問題がありませんが、Raspberry Pi 上のイヤフォンジャックから音を出力したいが音が出ないという場合は、以下の指示に従ってください。

まず、音声再生コマンド「mpg321 test.mpg」は以下のコマンドに変更してください。
mpg321 -a hw:1,0 test.mp3
次に、06-03-volume.py の実行ですが、プログラム内の57行目の「args = ['amixer','-q','cset','numid=1',vol]」という命令を以下に変更し、ファイルを上書き保存した上で実行してください。
args = ['amixer','-q','-c1','cset','numid=1',vol]

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

公式サポートページでダウンロードできる追加PDFの内容についてです。spidevを用いてADコンバータから値を取得する方法を紹介しておりますが、 現在はspidevはデフォルトでRaspbianに含まれておりますので、インストール作業は必要ありません。

PDF11:spidevを用いてAD変換を行うプログラムについて

追加PDFでは、spidevとADコンバータMCP3208を用いてAD変換を行うプログラム06-04-spidev.pyを紹介しました。
kernel 4.9.43以降 (NOOBS 2.4.5 (Raspbian 2017-11-29) 以降) のRaspberry Piでは、執筆時の06-04-spidev.pyはそのままでは動作しません。具体的には、kernelの変更により、プログラム内で「spi.max_speed_hz = 1000000」のように最大周波数の設定が必要になったのです。

2019/6/25にアップロードしたサンプルファイル (raspi-sample.zip) にはこの問題に対応したバージョンが含まれていますので、エラーが出るという方は公式サイトよりraspi-sample.zipをダウンロードしなおしてください。