2020年12月31日木曜日

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

はじめに

本ページは、金丸隆志著「実例で学ぶRaspberry Pi電子工作」(講談社ブルーバックス)の補足情報をまとめるためのページです。本書の内容が最新のRaspbianで動作するようメンテナンスを続けています。

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

補足情報

Raspberry PiのOSの更新に伴う内容の変更などを以下のページに記します。書籍の通りに操作しても期待通りの動作をしない、という場合はまずこちらをチェックしてください。

追加コンテンツ

本書の演習をさらに膨らませる追加コンテンツを以下に記します。音声合成、音声認識、エアコン操作など、より実用的な内容を含んでいます。本書の演習とともに是非チャレンジしてみてください。

前著の記事へのリンク

入門編である前著「Raspberry Piで学ぶ電子工作」のサポートページ中で、本書の読者の方にも役立ちそうな記事へのリンクを貼ります。

感想など




2020年12月30日水曜日

本書発売後の追加情報

金丸隆志著「実例で学ぶRaspberry Pi電子工作」(講談社ブルーバックス)の内容を最新のRaspbianで動作させるための補足情報を本ページに記します。

はじめに

カラー版回路配線図について

前著の改訂版「カラー図解 最新 Raspberry Piで学ぶ電子工作」の発売に合わせ、本書「実例で学ぶRaspberry Pi電子工作」でも、カラー版の回路配線図をダウンロードできるようにしました。

本書公式サポートページからダウンロードできます。これまで通り、モノクロ版もダウンロードできますので、お好みの方を用いてください。


回路配線図について

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


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

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

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

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

第1章

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

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

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

p.21:NOOBSのバージョンについて

書籍販売より、以下のようにNOOBSの更新が行われています。

日付バージョンカーネルバージョンOSバージョン
2016/2/3NOOBS 1.6.04.1.17+ / 4.1.17-v7+Jessie
2016/2/9NOOBS 1.7.04.1.17+ / 4.1.17-v7+
2016/2/26NOOBS 1.8.04.1.18+ / 4.1.18-v7+
2016/3/18NOOBS 1.9.04.1.19+ / 4.1.19-v7+
2016/5/10NOOBS 1.9.14.4.9+ / 4.4.9-v7+
2016/5/27NOOBS 1.9.24.4.11+ / 4.4.11-v7+
2016/9/23NOOBS 1.9.34.4.21+ / 4.4.21-v7+
2016/10/5NOOBS 2.0.04.4.21+ / 4.4.21-v7+
2016/11/29NOOBS 2.1.04.4.34+ / 4.4.34-v7+
2017/2/27NOOBS 2.2.04.4.48+ / 4.4.48-v7+
2017/3/3NOOBS 2.3.04.4.50+ / 4.4.50-v7+
2017/4/10NOOBS 2.4.04.4.50+ / 4.4.50-v7+
2017/6/23NOOBS 2.4.14.9.28+ / 4.9.28-v7+
2017/7/5NOOBS 2.4.24.9.35+ / 4.9.35-v7+
2017/8/17NOOBS 2.4.34.9.41+ / 4.9.41-v7+Stretch
2017/9/8NOOBS 2.4.44.9.41+ / 4.9.41-v7+
2017/11/29NOOBS 2.4.54.9.59+ / 4.9.59-v7+
2018/3/14NOOBS 2.6.04.9.80+ / 4.9.80-v7+
2018/3/14NOOBS 2.7.04.9.80+ / 4.9.80-v7+
2018/4/18NOOBS 2.8.04.9.80+ / 4.9.80-v7+
2018/4/24NOOBS 2.8.14.14.34+ / 4.14.34-v7+
2018/6/27NOOBS 2.8.24.14.50+ / 4.14.50-v7+
2018/10/11NOOBS 2.9.04.14.71+ / 4.14.71-v7+
2018/11/15NOOBS 3.0.04.14.79+ / 4.14.79-v7+
2019/4/8NOOBS 3.0.14.14.98+ / 4.14.98-v7+
2019/6/24NOOBS 3.1.14.19.50+ / 4.19.50-v7+ / 4.19.50-v7l+Buster
2019/7/10NOOBS 3.2.04.19.57+ / 4.19.57-v7+ / 4.19.57-v7l+
2019/9/30NOOBS 3.2.14.19.75+ / 4.19.75-v7+ / 4.19.75-v7l+
2020/2/7NOOBS 3.3.04.19.97+ / 4.19.97-v7+ / 4.19.97-v7l+
2020/2/14NOOBS 3.3.14.19.97+ / 4.19.97-v7+ / 4.19.97-v7l+
2020/5/27Raspberry Pi OS 2020-05-274.19.118+ / 4.19.118-v7+ / 4.19.118-v7l+
2020/8/20Raspberry Pi OS 2020-08-205.4.51+ / 5.4.51-v7+ / 5.4.51-v7l+
2020/12/02Raspberry Pi OS 2020-12-025.4.79+ / 5.4.79-v7+ / 5.4.79-v7l+
2021/1/11Raspberry Pi OS 2021-01-115.4.83+ / 5.4.83-v7+ / 5.4.83-v7l+

どのバージョンでも動作確認していますが、Rapsberry Piをリモコン代わりにする第5章の内容だけは、2019年6月時点でBuster系列のRaspbianでの実行方法が複雑になっていますので、Stretch系列のRaspbianを用いるのが安全ではあります。

古いバージョンを使いたい方は下記のJAISTのミラーサイトで適切な日付をたどると見つけられます。

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

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

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


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

2章

p.52:開発環境IDLEの代替としてThonny Python IDEを用いる方法

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

Thonny Python IDEはpython3用のプログラムを実行するための環境です。本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。 Python 3用ツールのインストール法は本ページで解説されておりますので注意して本ページをお読みください
(2019/6/25以前にサンプルプログラムをダウンロードした方は再び raspi2-sample.zip をダウンロードし、展開しなおした上でご活用ください)。

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


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

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


Thonny Python IDEを用いると、7章で取り扱うOpenCVを用いたプログラムもIDEから実行できるというメリットがあります(IDLEでは画像処理プログラムのみコンソールから起動させたのでした)。

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

p.52:Python2とPython3について

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

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

項目Python2用コマンドPython3用コマンド
プログラム実行コマンドpython または python2python3
IDLE実行コマンドidle-python2.7idle-python3.7
Thonny実行コマンドなしthonny
Python用プログラムインストールコマンドpipまたはpip2pip3

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

p.52: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 を起動し、下記の2つのコマンドを順に実行してください。Python 3 用のIDLEがインストールされます。
sudo apt update
sudo apt install idle-python3.7
Python 3 用のIDLEを起動するためには
idle-python3.7 &
を実行します。

第3章

p.81およびp.85:タクトスイッチを用いるプログラムの管理者権限について

タクトスイッチを用いる bb2-03-03-dice-switch.py および bb2-03-04-dice-switch-delay.py はどのバージョンのNOOBSでも管理者権限が必要と述べましたが、 現在では、これらのプログラムでも管理者権限が不要になりました。興味のある方は試してみてください。

第4章

4章全般:音声合成機能の追加について

4章で作成した「天気予報機能付き温度計」に、音声合成機能を追加するための解説を下記に記しました。ご活用ください。

p.94~p.97:I2Cの準備について

94~97ページではI2C通信を利用するための準備を行いました。最新の Raspbian を用いると、これらの多くはデフォルトで設定済です。必要な作業は
  • p.95: 設定アプリケーションによるI2Cの有効化
のみです。その他の作業、すなわち、「/etc/modulesへのi2c-devの追記(p.96)」、「必要なパッケージのインストール (p.97)」は実行不要です。後者は、実行しても「すでに最新バージョンです」と表示されるだけで悪影響はありません。

p.101:pipとrequestsのインストール

pipとrequestsも、最新の Raspbian ではデフォルトでインストール済なのであらためてインストールする必要はありません。 インストールコマンドを実行しても「すでに最新バージョンです」、「Requirement already satisfied」などと表示されるだけで悪影響はありません。

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

ここで用いる温度センサとLCDの組み合わせは前著でも用いたのですが、LCDを用いたプログラムの動作に失敗するという方が多いようです。LCDを用いたプログラムを実行するためには、Raspberry PiからLCDが認識されていることが必要です。LCDが認識されているかどうかのチェック方法は、書籍に記さなかったのですが、ここで紹介します。

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

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

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


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

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

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

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

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

利用例は下図のようになっています。下図(左)がピンソケットを用いた場合で、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か所の四角いピンも半田付けする必要がありますのでご注意ください。


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

他に用いることのできるLCDとしては、例えばストロベリーリナックスで取り扱われている以下のものがあります。どちらも16文字x2行ですので、本書で取り扱ったものの倍の文字数を表示できます。
下図は、
  • sudo python3 bb2-04-03-lcd-practice.py 'Hello, Raspberry Pi!'
を実行した様子です。現在のRaspbianでは管理者権限を表す「sudo」は不要ですが、上のように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.108:以前のLCDを購入した場合の暫定的な対処法

<LCD対処法:予備知識>

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

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

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

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


一般に、プルアップ抵抗はI2C接続時に必要になるものですが、Raspberry Pi内部に既にこのプルアップ抵抗が存在するので、LCDモジュールの基板上では必ずしもこのプルアップ抵抗の有効化は必要ありませんでした。そのため、4章において正常動作するLCDでは「PUなし」、「PUあり」のどちらでもLCDは動作しました(ただし、8章ではサーボドライバ上のプルアップ抵抗の影響で、LCDでは「PUなし」としなければ動作しないことがあります)。

既に述べたように、「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に半田を盛り、基板上のプルアップ抵抗を有効にしてください。


p.119:タクトスイッチを用いるプログラムの管理者権限について

タクトスイッチを用いる bb2-04-04-lcd-4modes.py および bb2-04-05-lcd-3modes.py はどのバージョンのNOOBSでも管理者権限が必要と述べましたが、 現在では、これらのプログラムでも管理者権限が不要になりました。興味のある方は試してみてください。

第5章

5章全般:音声認識によるリモコン操作

本章では、リモコン操作を行う方法として、「irsendコマンド」、「タクトスイッチ」、「ブラウザ」の3種類を用いました。さらに、「音声認識」によりリモコン操作を行う方法を応用演習として二種類追加しましたのでご活用ください。

まず、Raspberry Pi上のOSに音声認識用ソフトウェアであるJuliusをインストールする方法です。
もう一つは、インターネット(クラウド)上の音声認識機能をRaspberry Piから利用する方法です。
お好みの方をお試しください。どちらかというと、クラウドを利用する方法の方が難易度が高いと思います。

p.134:エアコンのリモコンの利用について

本書ではエアコンのリモコンからの信号をRaspberry Piで利用する方法については解説しませんでした。しかし、その方法はありますので、下記のページに解説を追加しました。
本書でテレビのリモコンからの信号を利用できるようになった後、興味のある方は取り組んでみてください。

p.141:様々なOSのバージョンでのLIRCの設定

本書発売後よりさまざまなバージョンのRaspbianがリリースされ、そのたびにLIRCの設定法が変化してきました。 ここでは、下記の2つの場合についてLIRCの設定方法を解説します。解説が長くなりますので、それぞれ別ページにて解説することとします。
  1. kernel 4.19以降を搭載したRaspiban Buster/Stretchでlircを利用する
  2. kernel 4.14までを搭載したRaspiban Stretchでlircを利用する
1.の方法はかなり難易度が高いのですが、最新のOSを使いたければ2019年6月の時点でこの方法しかありません。 2.の方法は、あえて古いOS (NOOBS 3.0.1 (Raspbian 2019-04-08))をインストールしてLIRCを使う方法ですが、インストールと設定が簡単であるというメリットがあります。自信がないという方はこちらをお勧めします。
1. と2. 、お好みの方法をお試しください。

p.161:irsendコマンドのオプションについて

読者の方からお知らせいただいた内容をまとめます。SHARPのテレビには「クイック起動設定」という設定がある機種があるそうです。 そのクイック起動設定がオフの時、下記のように「-# 2」オプションをつけないとテレビの電源を正常にオンオフできなかったそうです。
irsend -# 2 SEND_ONCE TV power
p.162に記したように、このオプションは信号波形を二回送信するためのものでしたね。

p.165:タクトスイッチを用いるプログラムの管理者権限について

タクトスイッチを用いる bb2-05-01-TV.py はどのバージョンのNOOBSでも管理者権限が必要と述べましたが、 現在では、このプログラムでも管理者権限が不要になりました。興味のある方は試してみてください。

第6章

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

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

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


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


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

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

p.193:WiringPi2-Pythonを使う演習をpigpioを用いて行う

本書では、ハードウェアPWM信号を出力するために、「WiringPi2-Python」を用います。一方、本書より後に発売された「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」では、「WiringPi2-Python」ではなく、「pigpio」を用いています。
ここでは本書のハードウェアPWM信号を用いる演習を「pigpio」を用いて行う方法を解説します。それにより、「WiringPi2-Python」のインストールが不要になります。 なお、この項目の解説は「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」の読者向けのものとなりますのでご注意ください。

「WiringPi2-Python」を用いる演習を「pigpio」で実施するには、サンプルファイルの変更が必要になります。 それを簡単に済ませる方法を解説します。本書の通り「WiringPi2-Python」でサンプルプログラムを実行したい方はその必要はありません。
さて、まずターミナルを起動します。そして、本書のサンプルファイルが展開されたディレクトリに移動します。 ユーザーpiのホームディレクトリに展開した方は移動の必要がなく、「bluebacks」ディレクトリに展開した方は「 cd bluebacks 」コマンドを実行するのでした。 そして、以下の2つのコマンドを順に実行します。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/raspi2-pigpio.patch
(2) patch -p1 -i raspi2-pigpio.patch
以上のコマンドにより、 「WiringPi2-Python」用のプログラムが、すべて「pigpio」用のプログラムに置き換えられます。
なお、もし WebIOPi 用にプログラムを /usr/share/webiopi/htdocs にコピー済だという方は、さらに次の2つのコマンドも順に実行し、 WebIOPi 用のファイルを一旦消してコピーしなおしてください。
(1) suro rm -rf /usr/share/webiopi/htdocs/bb2
(2) cp -r bb2 /usr/share/webiopi/htdocs
あとは、「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で解説されているように、 ハードウェアPWMを使用するプログラムの実行前に「sudo service pigpiod start」コマンドで pigpiod を実行しておくことを忘れないようにしましょう。なお、この注意が必要なのは本書6章と7章のみです。8章ではハードウェア PWM 信号の出力を行うのはサーボドライバーでありRaspberry Pi ではないため、pigpio は必要ではないのです。

p.193:WiringPi2-Pythonを使う演習をWiringPi-Pythonを用いて行う

本書では、ハードウェアPWM信号を出力するために、「WiringPi2-Python」を用います。一方、本書より後に発売された「カラー図解 最新 Raspberry Piで学ぶ電子工作」では、「WiringPi2-Python」ではなく、「WiringPi-Python」を用いています。
ここでは本書のハードウェアPWM信号を用いる演習を「WiringPi-Python」を用いて行う方法を解説します。それにより、「WiringPi2-Python」のインストールが不要になります。 なお、この項目の解説は「カラー図解 最新 Raspberry Piで学ぶ電子工作」の読者向けのものとなりますのでご注意ください。

「WiringPi2-Python」を用いる演習を「WiringPi-Python」で実施するには、サンプルファイルの変更が必要になります。 それを簡単に済ませる方法を解説します。本書の通り「WiringPi2-Python」でサンプルプログラムを実行したい方はその必要はありません。
さて、まずターミナルを起動します。そして、本書のサンプルファイルが展開されたディレクトリに移動します。 ユーザーpiのホームディレクトリに展開した方は移動の必要がなく、「bluebacks」ディレクトリに展開した方は「 cd bluebacks 」コマンドを実行するのでした。 そして、以下の2つのコマンドを順に実行します。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/raspi2-wiringpi.patch
(2) patch -p1 -i raspi2-wiringpi.patch
以上のコマンドにより、 「WiringPi2-Python」用のプログラムが、すべて「WiringPi-Python」用のプログラムに置き換えられます。
なお、もし WebIOPi 用にプログラムを /usr/share/webiopi/htdocs にコピー済だという方は、さらに次の2つのコマンドも順に実行し、 WebIOPi 用のファイルを一旦消してコピーしなおしてください。
(1) suro rm -rf /usr/share/webiopi/htdocs/bb2
(2) cp -r bb2 /usr/share/webiopi/htdocs
以上の設定を行ったら、「カラー図解 最新 Raspberry Piで学ぶ電子工作の解説ページ」を参考に、WiringPi-Pythonのインストールを忘れないようにしましょう。プログラムの実行には管理者権限が必要であることにも注意しましょう。

p.193:WiringPi2-Pythonのインストールコマンド

ハードウェアPWM信号を用いるプログラムを、本書の通りに(pigpio や WiringPi-Python ではなく)WiringPi2-Python で実行する場合、以下の手順に従ってインストールしてください。 上で pigpio や WiringPi-Python 用いるという方は必要ありません。

ターミナルを起動して、以下のコマンドを順に実行しましょう。Python3 用の WiringPi2-Python がインストールされます。
(1) sudo apt update
(2) sudo apt install python3-dev python3-setuptools
(3) git clone https://github.com/neuralassembly/WiringPi2-Python.git
(4) cd WiringPi2-Python
(5) sudo python3 setup.py install
なお、一度インストールしたWiringPi2-Pythonを上書きインストールしたい場合、上記コマンドの実行前に、ホームディレクトリで下記のコマンドを実行して古いファイルを事前に実行しておきましょう。
sudo rm -rf WiringPi2-Python

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

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

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

p.196:pigpio で bb2-06-01-zero.py を動かす場合の注意

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いたpigpio で bb2-06-01-zero.py を動かす場合、事前に「sudo service pigpiod start」で pigpiod を起動しておくことを忘れないようにしましょう。この場合、 bb2-06-01-zero.py の実行には管理者権限は不要です。

p.199~201:タミヤの工作キットで作ったカメラ台のカラー画像

タミヤの工作キットで作るカメラ台の作成方法を示す図ですが、書籍では画像がやや小さく見にくいかもしれません。下記に、カラーで解像度の高い画像を貼り付けますので、ご活用ください。

画像をクリックすると画像が大きくなります。必要に応じて、大きくした画像上で右クリックして「名前を付けて保存」を選択して保存すると良いでしょう。

図6-7

図6-8

図6-9

p.205:カメラマウントA838を用いた場合のカメラ台のカラー画像

同様に、図6-12、図6-13のカラー画像も載せます。

図6-12

図6-13


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

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

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


p.210:pigpio で bb2-06-02-pantilt.py を動かす場合の注意

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いたpigpio で bb2-06-02-pantilt.py を動かす場合、事前に「sudo service pigpiod start」で pigpiod を起動しておくことを忘れないようにしましょう。この場合、 bb2-06-02-pantilt.py の実行には管理者権限は不要です。

p.211:カメラモジュールのテスト用コマンド

211ページのコマンドはやや長いので、コピー用に再掲します。
raspivid -t 0 -w 640 -h 480 -p 150,150,640,480


p.222:長いコマンドの入力には注意

p.222からp.223で紹介したmjpg-streamerのインストール用のコマンドは少し長いものが多く、入力を間違うと正しく演習ができなくなってしまいます。

コピーできる形式で以下に再掲しますので、ブラウザで1行ずつコピーして、ターミナルで貼り付けて実行すると確実でしょう。その際、先頭の「(1)」などはコピーする必要はありませんのでご注意ください。

また、ブラウザでのコピーは「コピーしたい文字をなぞってから『右クリックしてコピー』または『Ctrl+c』」、ターミナルへの貼り付けは「ターミナル上でメニューから『編集→貼り付け』または『Shift+Ctrl+v』」です(ただし、キーボードのCtrlとCapslockを入れ替えている場合、ショートカットキーは効かないようです)。
(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
なお、前著「Raspberry Piで学ぶ電子工作」をご利用いただいた方は、上記の7つのコマンドの実行前に、下記の2コマンドにより過去にインストールしたmjpg-streamerを一度削除した方が安全かもしれません。ターミナルLXTerminalを起動した直後の状態で順に実行してください。
(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf mjpg-streamer

p.224:mjpg-streamerの実行用コマンド

224ページのコマンドをコピー用に再掲します。
sh bb2-06-03-stream.sh

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

mjpg-streamerによる映像が表示されない場合、下記をチェックしましょう。
  1. カメラの接続は正しいか(金属が露出した端子面がmicroSDカード側)(→6.1.1で解説)
  2. メニューから「設定」→「Raspberry Piの設定」→「インターフェイス」→「カメラ」が「有効」になっているか(→6.4で解説)
  3. mjpg-streamerのインストールが適切か(→本ページの「p.222:長いコマンドの入力には注意」)
  4. mjpg-steamerの起動命令が適切か(→本ページの「p.224:mjpg-streamerの実行用コマンド」の末尾)
それ以外には「IPアドレスは正しいか」もチェックしてください。これらは、WebIOPiを用いた他の演習と同じですね。

p.229:pigpio でブラウザ操作のカメラ台を動かす場合の注意

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いたpigpio でブラウザ操作のカメラ台を動かす場合、事前に「sudo service pigpiod start」で pigpiod を起動しておくことを忘れないようにしましょう。その後で WebIOPi を起動するのです。

p.229:本章のプログラムを自動起動したい場合

本章のプログラムを、本書8.4.4で紹介した方法で自動起動し、さらにディスプレイやキーボードをRaspberry Piから外した状態で利用したい方がいらっしゃるかもしれません。

NOOBS 1.9.0 (Raspbian 2016-03-18) までは問題なく動作したのですが、NOOBS 1.9.1 (Raspbian 2016-05-10) 以降は、「Raspbianが黒いコンソール画面で起動する状態」にしないと、ディスプレイを外した状態では正常動作しなくなりました。

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

もし、この「CLI起動によるWebIOPiの自動起動」でもサーボモーターが正常動作しない場合、以下を試してください。 まず、以下のコマンドを実行し、WebIOPiの自動起動を無効にします。
sudo systemctl disable webiopi
次に、以下のコマンドで、/etc/rc.localファイルを管理者権限で編集できる状態にします。
sudo leafpad /etc/rc.local
なお、NOOBS 3.2.1 (Raspbian 2019-09-26) 以降ではテキストエディタとして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起動のままでもサーボモーターが正常動作しました。

第7章

7章全般:OpenCVのPython3での利用

2019/6/25に本書のサンプルプログラムを更新し、Python3およびOpenCV3でも動作するようにしました。それ以前にダウンロードされた方は、もう一度raspi2-sample.zipをダウンロードし、展開しなおした上でご活用ください。

なお、以下ではOpenCVのインストール方法について下記の2通りの方法を解説します。
  • Python3でOpenCVを利用する場合(NOOBS 3.1.1 (Raspbian 2019-06-20) 以降の Buster)
  • Python3でOpenCVを利用する場合(NOOBS 3.0.1 (Raspbian 2019-04-08) までの Stretch)

p.238:Python3 用のOpenCVのインストール用コマンド (NOOBS 3.1.1 (Raspbian 2019-06-20) 以降の Buster)

NOOBS 3.1.1 (Raspbian 2019-06-20) 以降の Busterで Python3 と OpenCV を組み合わせて利用する方法を解説します。2つのコマンドがありますので、一つ一つ順に実行してください。
sudo apt update
sudo apt install libopencv-dev python3-opencv

p.238:Python3 用のOpenCVのインストール用コマンド (NOOBS 3.0.1 (Raspbian 2019-04-08) までの Stretch)

NOOBS 3.0.1 (Raspbian 2019-04-08) までの Stretchで Python3 と OpenCV を組み合わせて利用する方法を解説します。3つのコマンドがありますので、一つ一つ順に実行してください。
sudo apt update
sudo apt install libopencv-dev libatlas-base-dev libjasper-dev libqtgui4 python3-pyqt5 libqt4-test
sudo pip3 install opencv-python==4.1.1.26

p.239: OpenCVを用いたプログラムの実行時のエラー

NOOBS 3.1.1 (Raspbian 2019-06-20) または NOOBS 3.2.0 (Raspbian 2019-07-10) でインストールした Raspbian Busterをお使いの場合、OpenCV を用いたプログラムを実行すると下記のエラーが出ます。
ImportError: /usr/lib/arm-linux-gnueabihf/neon/vfp/libavcodec.so.58: undefined symbol: bcm_host_is_fkms_active
これは、Raspbian の kernel のバージョンが最新の OpenCV が期待するものより古くなっていることが原因です。

解決方法は以下の2通りの方法どちらかです。
  1. 「sudo apt update」、「sudo apt dist-upgrade」で kernel を最新にする
  2. microSDカードをフォーマットして最新の OS をインストールしなおす
1. の方が簡単ですのでまずこちらを試し、それで問題が出た場合は 2. を試すのが良いでしょう。

p.239:bb2-07-01-preview.pyの実行用コマンド

239ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
python3 bb2-07-01-preview.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

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

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

p.241:画像処理に影響を与えずに映像サイズを大きくする方法について

7章のプログラムでは、カメラから320x240のサイズの映像を取得し、何らかの画像処理を施して映像を表示しています。320x240という映像サイズは、画像処理の計算にかかる時間を考慮して決めています。大きくすると、計算に時間がかかり、映像が滑らかに表示されなくなるでしょう。

しかし、320x240という映像サイズは、表示してみると小さいと感じるのも事実です。ここでは、この映像サイズを大きくする方法を紹介します。

まず思いつくのは、カメラからの映像取得のサイズを大きくすることです(例えば640x480)。しかし、これは下記の理由によりお勧めできません。
  • 画像処理の計算に時間がかかるようになる
  • 画像処理の結果が変わる(円検出bb2-07-04-circle.pyの場合、最小半径5、最大半径100などと定めているが、映像サイズを変えると、これらの数字の意味が変わってくるため。顔検出bb2-07-05-face.pyも同様)
  • 追跡アプリケーションbb2-07-06-tracking-circle.pyとbb2-07-07-tracking-face.pyでは、映像サイズが320x240であることを前提としている部分が多い(映像の中心座標が(160,120)である、など)
そこで、「画像処理はサイズ320x240の映像に対して行うが、結果の映像は640x480に引き伸ばして表示する」方法を紹介します。
7章のプログラムの末尾付近には、下記の命令があります。
cv2.imshow('frame', stream.array)
という行があります。これは画像を画面に表示する命令なのですが、この命令を削除して下記の2行に置き換えると、320x240の画像が 640x480に引き伸ばして表示されます。(行頭のスペースの数は元の行と同じに統一してください)
dst = cv2.resize(stream.array, (640, 480))
cv2.imshow('frame', dst) 
映像を引き伸ばして表示しているだけなので、画質は良くありませんが、 デモなどで映像を大きく表示したいときは使えると思います。

p.241:7章のGUIプログラムを自動起動したい場合

7章のプログラムはGUIアプリケーションであり、/etc/rc.localに記述しても自動起動できません。 GUIアプリケーションを自動起動する方法を、「GUIアプリケーションの自動起動」にまとめました。

p.244:bb2-07-02-binary.pyの実行用コマンド

244ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
python3 bb2-07-02-binary.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.250:bb2-07-03-cannyedge.pyの実行用コマンド

250ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
python3 bb2-07-03-cannyedge.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.252:bb2-07-04-circle.pyの実行用コマンド

252ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
python3 bb2-07-04-circle.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.257:bb2-07-05-face.pyの実行用コマンド

257ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
python3 bb2-07-05-face.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.263:bb2-07-06-tracking-circle.pyの実行用コマンド

263ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
sudo python3 bb2-07-06-tracking-circle.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.263:pigpio で bb2-07-06-tracking-circle.py を動かす場合の注意

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いたpigpio で bb2-07-06-tracking-circle.py を動かす場合、事前に「sudo service pigpiod start」で pigpiod を起動しておくことを忘れないようにしましょう。この場合、 bb2-07-06-tracking-circle.py の実行には管理者権限(sudo)は不要です。

p.268:bb2-07-07-tracking-face.pyの実行用コマンド

268ページの演習をPython3で実行するコマンドを記します。このコマンドの実行を楽に行うため、p.240で解説したTABキーの利用をマスターすることをお勧めします。
sudo python3 bb2-07-07-tracking-face.py
エラーが出る場合は2019/6/25に更新されたサンプルファイル raspi2-sample.zip をダウンロードし、展開しなした上でご活用ください。

p.268:pigpio で bb2-07-07-tracking-face.py を動かす場合の注意

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いたpigpio で bb2-07-07-tracking-face.py を動かす場合、事前に「sudo service pigpiod start」で pigpiod を起動しておくことを忘れないようにしましょう。この場合、 bb2-07-07-tracking-face.py の実行には管理者権限(sudo)は不要です。

第8章

p.277:6脚ロボットのカラー画像について

6脚ロボットの作成方法を示す図ですが、書籍では画像がやや小さく見にくいかもしれません。下記に、カラーで解像度の高い画像を貼り付けますので、ご活用ください。

画像をクリックすると画像が大きくなります。必要に応じて、大きくした画像上で右クリックして「名前を付けて保存」を選択して保存すると良いでしょう。

図8-3

図8-12

図8-16

p.280:ここまでの演習でハードウェア PWM 信号を出力するために pigpio を用いた方への注意

ここまでの演習で、「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」で用いた pigpio でハードウェア PWM 信号を出力した方もいると思いますが、8章では pigpio は用いません。すなわち、service コマンドによる pigpiod の起動は不要ということです。なぜなら、8章ではハードウェア PWM 信号の出力を行うのはサーボドライバーであり Raspberry Pi ではないため、pigpio は必要ではないのです。

p.296:6脚ロボットの安定性について

ハンチング対策の解説において、サーボモーターSG90に与える電圧(乾電池の本数)によって6脚ロボットの挙動が異なることに触れました。サーボモーターの個体差などにもよりますが、6脚ロボットのモーターに与える電圧が大きく、その結果流れる電流が大きくなるとSG90の挙動が不安定になることがありました。
具体的には「モーターの角度が指定していない角度に動き、そこでロックしてしまう」という現象が起きました。もし、同様の現象に悩まされている方は、以下に記す解消方法を試してみて下さい。なお、書籍の中でサーボドライバの類似品は「Adafruitのものと挙動が異なる場合がある」と記しましたが、類似品の中にはこの「指定していない角度でモーターがロック」という現象が起こりやすいものもあり、そのため、類似品はサポート対象外としました。

対策1:モーターに与える電圧を小さくする
モーターに与える電圧を小さくすると、6脚ロボットが安定する傾向があります。簡単にこれを実現するは、乾電池1本の電圧(約1.5V)とエネループなどのニッケル水素充電池の電圧(約1.2V)が異なることを利用するのが簡単です。以下の様な電圧を簡単に作ることができます。
  • 約4.5V:乾電池3本
  • 約3.6V:エネループなどのニッケル水素充電池3本
もしエネループなどのニッケル水素充電池をお持ちの場合、試してみると良いかもしれません。ただし、乾電池や充電池2本まで電圧を下げると、6脚ロボットは動作しませんので注意してください。なお、乾電池とニッケル水素充電池を混ぜて用いるのはやめましょう。
また、乾電池を用いるにせよ、充電池を用いるにせよ、新品の乾電池あるいは充電直後の充電池は、使っているうちに徐々に電圧が小さくなっていきます(参考:Panasonic | エネループシリーズについて)。そのため、使っているうちに6脚ロボットの安定性が徐々に変化することはあり得ます。

対策2:ロボットの脚の振り幅を小さくする
6脚ロボットを安定させるもう一つの方法は、脚の振り幅を小さくすることです。脚の振り幅が小さいということは、モーターの回転する角度が小さいということなので、モーターに流れる電流が小さくなり、その結果6脚ロボットが安定して動作する傾向があります。ただし、ロボットの動きはややゆっくりになります。下記のファイルを変更することで実現できます。
カメラなし、ハードウェアPWMの場合:/usr/share/webiopi/htdocs/bb2/03/script.py
カメラなし、ソフトウェアPWMの場合:/usr/share/webiopi/htdocs/bb2/04/script.py
カメラあり、ハードウェアPWMの場合:/usr/share/webiopi/htdocs/bb2/05/script.py
これらのファイルの中で、下記の部分を見つけます。
LEG_F_R = NEUTRAL + 100
LEG_F_L = NEUTRAL - 100
LEG_B_R = NEUTRAL - 100
LEG_B_L = NEUTRAL + 100
4つある数字の100が、脚の振り幅(モーターの動く角度)に対応する数値です。これを小さめの値、例えば下記のように60に変更します。
LEG_F_R = NEUTRAL + 60
LEG_F_L = NEUTRAL - 60
LEG_B_R = NEUTRAL - 60
LEG_B_L = NEUTRAL + 60
変更して保存した後はWebIOPiを再起動する必要があります。WebIOPiが自動起動する設定になっている場合、Raspberry Piを再起動してしまうのが簡単でしょう。

対策3:モーターに与える電圧を大きくする
さらに、Syun'iti Hondaさんのように、 モーター用の電源を 「約4.5V:乾電池3本」 から 「約4.8V:エネループなどのニッケル水素充電池4本」 に変更すると安定したというご報告もあります。このあたりはサーボモーターの個体差や消耗具合に依存するのかもしれません。 この場合、電池4本用の電池ボックスとしては「電池ボックス 単3×4本 リード線・フタ・スイッチ付」などがあります。

p.296:サーボモーターの消耗について

本書ではSG-90というサーボモーターで6脚ロボットを作成しました。一般的に、サーボモーターは長く使っていると作成当初から挙動が変わり、交換が必要になる場合があります。そういう意味で、サーボモーターは消耗品と考えた方がよいかもしれません。
私の場合、6脚ロボットを初めて作成してから書籍が出版されるまでの約8ヶ月の間に、1つのサーボモーターを交換しました。具体的には、機体を持ったまま脚を動かした際、1つの脚だけ他の脚に比べて動きが遅くなったため交換しました。

p.301: Python 3用smbusモジュールのインストール

現在のRaspbianでは、301ページで行うPython 3用smbusモジュールのインストール作業は不要です。 インストールコマンドを実行しても「すでに最新バージョンです」などと表示されるだけで悪影響はありません。

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

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

しかし、本ページ下部の「p.335:IPアドレスでのURLの指定について」で記しますように、avahiという仕組みを用いると、IPアドレスではなく、下記のようなアドレスでのアクセスが可能になるのでした(ただし、p.335の注釈に示すように制限がありますので注意)。
  • http://raspberrypi.local:8000/bb2/03/
これを用いると、回路からLCDが不要になるなどのメリットがあります。具体的には下記の通りです。
  • p.309の図8-13やp.310の図8-14からLCDを取り外して良い
  • p.310での/etc/rc.localへの「python3 /home/pi/bb2-08-04-lcd.py $_IP &」の記述が不要
さらに、Raspberry PiのIPアドレスを固定する、という方法でも、毎回IPアドレスを調べる必要がなくなりますね。こちらについては前著サポートページ内の「Raspberry PiのIPアドレスを固定する」にまとめましたので、興味のある方は御覧ください

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

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

6脚ロボットを制御するRaspberry PiのIPアドレスを知るため、LCDにIPアドレスを表示する方法を紹介しました。このとき、IPアドレスの取得に時間がかかるとIPアドレスではなく「Raspberry Pi」とLCDに表示されてしまいます。その様な場合、/etc/rc.localの適切な位置に「10秒待つ」ことを意味する「sleep 10」という命令を記述して対処する方法を紹介しました。

それでIPアドレスが表示できるようになれば問題ありませんが、現在のRaspbianでは別の方法もありますのでそれを紹介します。

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

もしこの設定をしてもIPアドレスではなく「Raspberry Pi」とLCDに表示される場合、書籍に書かれているように/etc/rc.localの適切な位置に「sleep 10」と記述する方法を試してみるとよいでしょう。


p.311:IPアドレスをLCDに表示するプログラムを自動起動するための記述

IPアドレスをLCDに表示するプログラムを自動起動するために/etc/rc.localに記述する命令は下記の通りです。コピーなどしてご活用ください。
python3 /home/pi/bb2-08-04-lcd.py $_IP
サンプルをbluebacksフォルダに展開した場合は下記のコマンドに変更されるのでしたね。
python3 /home/pi/bluebacks/bb2-08-04-lcd.py $_IP

p.314:シャットダウン用プログラムを自動起動するための記述

シャットダウン用プログラムを自動起動するために/etc/rc.localに記述する命令は下記の通りです。コピーなどしてご活用ください。
python3 /home/pi/bb2-08-05-shutdown.py &
サンプルをbluebacksフォルダに展開した場合は下記のコマンドに変更されるのでしたね。
python3 /home/pi/bluebacks/bb2-08-05-shutdown.py &

p.316:6脚ロボットに搭載したままRaspberry Piを用いる

6脚ロボットの演習中、トラブルなどでファイルを変更したくなることはあるものです。 そのような場合、Raspberry Piにもう一度ディスプレイ、キーボード、マウスを接続して変更することになりますが、やや面倒な操作になりますよね。

また、6脚ロボットの演習が終わった後、6脚ロボットに搭載したままRaspberry Piを使いたいという方もいるでしょう。

そこで、6脚ロボットに搭載したままRaspberry Piを使用する方法を2種類紹介します。どちらも、本書の入門編である「カラー図解 最新 Raspberry Piで学ぶ電子工作」の補足ページになっています。
ややハードルが高いかもしれませんが、どちらも身につける価値はある方法です。

p.318:mjpg-streamerを自動起動するための記述

mjpg-streamerをを自動起動するために/etc/rc.localに記述する命令は下記の通りです。コピーなどしてご活用ください。
sh /home/pi/bb2-06-03-stream.sh
サンプルをbluebacksフォルダに展開した場合は下記のコマンドに変更されるのでしたね。
sh /home/pi/bluebacks/bb2-06-03-stream.sh

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

mjpg-streamerによる映像が表示されない場合、下記をチェックしましょう。
  1. カメラの接続は正しいか(金属が露出した端子面がmicroSDカード側)(→6.1.1で解説)
  2. メニューから「設定」→「Raspberry Piの設定」→「インターフェイス」→「カメラ」が「有効」になっているか(→6.4で解説)
  3. mjpg-streamerのインストールが適切か(→本ページの「p.222:長いコマンドの入力には注意」)
  4. mjpg-steamerの起動命令が適切か(→本ページの「p.318:mjpg-streamerを自動起動するための記述」)
それ以外には「IPアドレスは正しいか」や「アドレスの末尾に『/』(スラッシュ)をつけているか」もチェックしてください。これらは、WebIOPiを用いた他の演習と同じですね。

付録A

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

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



付録B

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

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

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

コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。
(0) wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
(1) tar zxf WebIOPi-0.7.1.tar.gz
(2) cd WebIOPi-0.7.1/
(3) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi-pi2bplus.patch
(4) patch -p1 -i webiopi-pi2bplus.patch
(5) sudo ./setup.sh
「Do you want to access WebIOPi over Internet ? [y/n]」という質問をされたときはキーボードで「n」を入力したあとEnterするのでした。

そして、引き続きp.331のコマンドを実行し、起動用ファイルを適切な位置に配置します。このコマンドもやや長いので、コピーできる形式で再掲します。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
(2) sudo mv webiopi.service /etc/systemd/system/
なお、上記の手順でWebIOPiをインストールしてもp.338の図B-3において「IN/OUT等が現れるはずのボタンに文字が現れず灰色のまま」という場合、まずはWebIOPiの再インストールを試してみましょう。そのためには、ターミナルを起動して下記の2つのコマンドで一つずつ実行し、過去のインストールファイルを一旦削除します。
$ sudo rm -f WebIOPi-0.7.1.tar.gz
$ sudo rm -rf WebIOPi-0.7.1
その後、もう一度上記のコマンドでWebIOPiをインストールします。

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

p.332: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.335:IPアドレスでのURLの指定について

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

現在のRaspbianでは、IPアドレスを用いずに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/bb2/01/
すなわち、IPアドレス「192.168.1.3」などの代わりに「raspberrypi.local」という記法が使える、というわけです。これは、Jessie上で動作している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.339:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー

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

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

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

p.343:コマンドでのプログラムの実行について

p.343にて、本書のプログラムをターミナルでコマンドで実行する方法が記されています。本ページは、すべてのプログラムを python3 で実行するよう方針を変更しましたので、プログラムの実行例は
python3 bb2-02-01-led.py
となります。

2020年12月29日火曜日

読者の方々の声

本ページでは、読者の方々のレビューなどをご紹介したいと思います。

紹介記事


ご紹介に感謝



以下、twitterでの反応をまとめます。