2020年12月31日木曜日

カラー図解 最新 Raspberry Piで学ぶ電子工作 補足情報トップ

はじめに

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

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

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

パーツセット

書籍59ページにて紹介した秋月電子通商さまによるパーツセットはこちらです。
なお、小型液晶 (LCD)は含まれておりませんのでご注意下さい。
書籍の9章までの演習 (ただし、LCDを用いる7.3および7.4と、オプション扱いでカメラモジュールを用いる5.6は除く) を行えます。

なお、上記以外にamazonなどで本書の名前を冠したパーツセットが取り扱われておりますが、どれも著者や出版社および秋月電子通商様が関わった商品ではありませんので、ご注意ください。

補足情報一覧

以下では、Raspberry PiのOSの更新に伴う内容の変更や、正誤情報などを記していきます。
さらに、Raspberry Piをより便利に使うための情報が下記になります。

旧版の記事へのリンク

本書の旧版「Raspberry Piで学ぶ電子工作」のサポートページには、新版の読者の方にも役立つ記事がいくつかあります。それらへのリンクを貼ります。
現在でも動作するようメンテナンスは継続しています。

感想など


2020年12月30日水曜日

本書の補足情報

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

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

はじめに

回路配線図について

本書では、公式サイトより回路の配線図のPDFをダウンロードできます。 その回路配線図を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.29: OSインストール法の最新版について

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

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

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

本書の出版以降、以下のように新しいバージョンのNOOBSがリリースされています。

2016/9/23NOOBS 1.9.3Jessie
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
2020/12/2Raspberry Pi OS 2020-12-02
2021/1/11Raspberry Pi OS 2021-01-11
2021/3/4Raspberry Pi OS 2021-03-04
2021/5/7Raspberry Pi OS 2021-05-07
2021/10/30Raspberry Pi OS 2021-10-30Bullseye
2022/1/28Raspberry Pi OS 2022-01-28
2022/4/4Raspberry Pi OS 2022-04-04

OSのベースバージョンはJessie→Stretch→Busterと移り変わっています。

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

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

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


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

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

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

p.51, コマンドプロンプトの表記

p.51ではコマンドプロンプトの表記として以下を紹介しました。
pi@raspbberrypi:~ $
ここに見える「pi」はユーザー名を表しており、ユーザー名「pi」は2022年4月以前の古いOSで用いられていたデフォルトのユーザー名です。最新のOSを用いている方ならば、「pi」の部分に自分で決めたユーザー名が表示されているでしょう。

3章

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

なお、小型液晶 (LCD)は含まれておりませんのでご注意下さい。
書籍の9章までの演習 (ただし、LCDを用いる7.3および7.4と、オプション扱いでカメラモジュールを用いる5.6は除く) を行えます。

なお、上記以外にamazonなどで本書の名前を冠したパーツセットが取り扱われておりますが、どれも著者や出版社および秋月電子通商様が関わった商品ではありませんので、ご注意ください。

4章

p.85:開発環境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.85: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.85: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 &
を実行します。

5章

p.123, Bullseye (Raspberry Pi OS 2021-10-30 以降) でのカメラの利用について

Raspberry Pi OS 2021-10-30 からはじまったバージョン Bullseye ではカメラモジュールの利用方法に大きな変更が加えられました。 そのため、Bullseye にてカメラを利用するには、以下の方法で「Legacy Camera」のサポートを有効にする必要があります。

まず、Raspberry Pi OS 2021-10-30 をお使いのかたは、以下の2つのコマンドを順に実行することで OS を最新にする必要があります。
sudo apt update
sudo apt dist-upgrade
必要に応じてキーボードで「y」をタイプして「Enter」キーを押すことで、アップデートが進行します。終わったら、Raspberry Pi を再起動してください。

その後、ターミナルを開いて以下の手順に従うことで、raspi-config により Legacy Camera を有効にします。
  1. 「 sudo raspi-config 」を実行することで raspi-config を起動
  2. キーボードの「↓」キーを2回押し、「Interface Options」を選択してから「Enter」キーを押す
  3. 「I1 Legacy Camera Enable/Disable」があらかじめ選択されているので、「Enter」キーを押す
  4. 「Would you like to enable legacy camera support?」と聞かれるので「←」を一回押すことで「はい」を選択し、「Enter」キーを押す
  5. 「非推奨 (deprecated) であり将来サポートされない」という趣旨のことを言われるが、「了解」が選択された状態で「Enter」キーを押す
  6. raspi-configを起動した状態の画面に戻るので、「TAB」キーを二回クリックし、「Finish」を選択した状態で「Enter」キーを押す
  7. 再起動を促されるので、「はい」が選択された状態で「Enter」キーを押す
以上で、カメラモジュールを利用した演習を実行できるようになります。
なお、2022年2月からは、Bullseye の 64-bit 版も正式にインストール可能になっていますが、64-bit 版 OS では本書のカメラモジュールを実行するのはやや面倒です。32-bit 版 OS を利用することを推奨します。 詳細は、以下のようになっています。
32-bit 版 BullseyeLegacy Cameraモードをオンにした上で、本書付属のサンプルファイルを用いる
64-bit 版 BullseyeLegacy Cameraモードをオンにした上で、「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイルを利用する


p.128, 音声の出力先を変更する方法

音声を HDMI ケーブル経由ではなく、Raspberry Pi の基板上のイヤフォンジャックから聞きたい場合、デフォルトでは音が鳴らないことが多いでしょう。 イヤフォンジャックから鳴らすための方法は、OSのバージョンにより異なります。

<2020-12-02版およびそれ以降の Raspberry Pi OS をご利用の場合>

2020-12-02版およびそれ以降の Raspberry Pi OS をご利用で、なおかつイヤフォンジャックから音が鳴らない場合、raspi-configというコマンドで音声の出力先をイヤフォンジャックに切り替えます。恐らく今後はこの方法が主流となるでしょう。
以下の手順に従ってください。

ターミナルで下記のコマンドを実行してください。
sudo raspi-config
すると、下図のような設定画面が開きます。
上の画面上で、キーボードの「Enter」キーを押すことで、以下の「1 Systems Option」の設定画面に入ります。
上の画面上でキーボードの「↓」キーを一回押すことで、下図のように「S2 Audio」にフォーカスを合わせ、「Enter」キーを押すことで「S2 Audio」の設定画面に変わります。
下図が「S2 Audio」の設定画面です。
上の画面上でキーボードの「↓」キーを一回押すことで、下図のように「1 Headphones」にフォーカスを合わせ、「Enter」キーを押すことでヘッドフォン(つまりイヤフォンジャック)を出力先にします。
すると下図のように「sudo raspi-config」実行直後の画面に戻ります。
上の画面上で「TAB」キーを二回押すことで、下図のように「Finish」にフォーカスが合います。そこで「Enter」キーを押すことで、「sudo raspi-config」による設定が終了します。
以上で、下記コマンドで
mpg321 test.mp3
イヤフォンジャックから音声が出るようになります。

<2020-5-27版および2020-8-20版の Raspberry Pi OS をご利用の場合>

次は、2020-5-27版および2020-8-20版の Raspberry Pi OS をご利用の場合で、なおかつイヤフォンジャックから音が鳴らない場合です。 音声を再生するコマンドを以下に変えるとイヤフォンジャックから音が鳴ります。 「--a hw:1,0 」が「イヤフォンジャックからの再生」を意味します。「-a hw:0,0 」なら「HDMIからの再生」です。
mpg321 -a hw:1,0 test.mp3

<2020年2月までの Raspbian をご利用の場合>

2020年2月までの Raspbian をご利用の場合、ターミナルで一度以下のコマンドを実行すると、以後「mpg321 test.mp3」コマンドでイヤフォンジャックから音が鳴るようになります。
amixer cset numid=3 1
なお、末尾の「1」がイヤフォンジャックからの音声出力を意味し、「0」なら自動認識、「2」ならHDMIからの音声出力を意味します。

p.128, 05-05-sw-mp3.pyをイヤフォンジャックからの音声出力で実行する

プログラム 05-05-sw-mp3.py をイヤフォンジャックからの音声出力で実行したい場合の補足です。 やはり、OSのバージョンにより方法が異なります。

<2020-12-02版およびそれ以降の Raspberry Pi OS、または2020年2月までの Raspbian をご利用の場合>

2020-12-02版およびそれ以降の Raspberry Pi OS、または2020年2月までの Raspbian をご利用の場合、上で行った「イヤフォンジャックから音を鳴らす設定」を行っていれば、 デフォルトのままの 05-05-sw-mp3.py で音を鳴らすことができます。「デフォルトのままの 05-05-sw-mp3.py 」とは、12行目が以下の状態になっているものです。
            args = ['mpg321', 'test.mp3']

<2020-5-27版および2020-8-20版の Raspberry Pi OS をご利用の場合>

2020-5-27版および2020-8-20版の Raspberry Pi OS をご利用の場合、プログラム 05-05-sw-mp3.py に対して以下を実行してください。

まず、Thonny でプログラムを開くと、12行目に以下の行が見つかります。
            args = ['mpg321', 'test.mp3']
この行を以下のように変更して保存してください。
            args = ['mpg321', '-a', 'hw:1,0', 'test.mp3']
以上により、2020-5-27版および2020-8-20版の Raspberry Pi OS で 05-05-sw-mp3.py をイヤフォンジャックからの音声出力で実行できるようになります。

6章

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

本書では、半固定抵抗として秋月電子通商の「半固定ボリューム 10kΩ」を用いて解説をしています(パーツセットに含まれるものです)。

半固定抵抗は、製品の種類によって、AD変換により得られた値が大きくなる回転の向きが異なることがあります。

そのような場合、下図のように、3.3VとGNDへの接続を逆にすると良いでしょう。

7章

7章全般:本書のプログラムで利用できるLCDについて

2017年4月に、秋月電子通商さんよりRaspberry Piで利用可能なLCDのモジュールキットが販売開始され、さらに2017年6月にはその完成版が販売開始されましたのでここで紹介します。なお、キットの方は狭いピッチ(ピン間隔)の半田付けが必要になりますので、半田付けにある程度慣れている方向けとなります。通常は完成品を推奨します。
商品へのリンクは下記になります。

組み立てキットに含まれるパーツを図示したのが下図(左)となっています。ピンソケットが2種含まれていますので、お好みの方を半田付けします。 完成品にはLCDを立てて使うためのピンソケットがあらかじめ取り付けられています。

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

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

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

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


また、本書で紹介したLCDとは異なり、文字の表示サイズが8文字×2行となっていることも見て取れるでしょう。 本書のプログラムを8x2の液晶で用いるためには、少しだけ変更が必要です。LCDを用いるプログラムには下記のようにLCDのコントラストや文字数を設定している行があります。これらは16x2の液晶であることを示しています。
contrast = 36 # 0から63のコントラスト。30から40程度を推奨
chars_per_line = 16 # LCDの横方向の文字数
display_lines = 2   # LCDの行数
これを下記のように横方向の文字数を8に変更して保存すれば完了です。お好みで、コントラストの大きさを変更するのも良いでしょう。
contrast = 36 # 0から63のコントラスト。30から40程度を推奨
chars_per_line = 8 # LCDの横方向の文字数
display_lines = 2   # LCDの行数

8章

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

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


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



p.209:WiringPi-Pythonのインストールコマンド

書籍に記したように、WiringPi-Pythonをインストールするためのコマンドをコピーできる形で掲載します。

なお、一度WiringPi-Pythonのインストールなどに失敗している方は、以前のインストール用ファイルを削除してからの方が安全です。そのためには、ターミナルを起動して下記のコマンドを実行します。
sudo rm -rf WiringPi-Python
そして、WiringPi-Pythonのインストール用コマンドを順に実行していきます。 下記のコマンドをブラウザで1行ずつコピーし、ターミナルソフトウェアLXTerminalへ貼り付けて1つ1つ実行するとトラブルが少ないでしょう。コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。

また、長いコマンドのため横方向にスクロールさせないとコマンド全体をコピーできないものがあることにも注意してください。
(2020.10.23: python3用のみをインストールするようコマンドを変更しました)
(1) sudo apt update
(2) sudo apt install python3-dev python3-setuptools swig
(3) git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
(4) cd WiringPi-Python/WiringPi
(5) sudo ./build
(6) cd ..
(7) swig -python wiringpi.i
(8) sudo python3 setup.py install

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

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

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

9章

p.223: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
(5)の処理が終わると最後に「Do you want to access WebIOPi over Internet ? [y/n]」という質問をされますので、キーボードで「n」を入力したあとEnterするのでした。

その後、下記のコマンド(p.226のコマンド)を実行し、起動用ファイルを適切な位置に配置します。これでWebIOPiのインストールは完了です。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
(2) sudo mv webiopi.service /etc/systemd/system/
なお、上記の手順でWebIOPiをインストールしてもp.234の図9-5において「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.226: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.236:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー

236ページでは、本書のサンプルファイルを/usr/share/webiopi/htdocsディレクトリへコピーするという作業を行います。 この作業は重要であり、これに失敗すると、以後の演習が期待通りに動作しません。そこで、コピーして利用できるよう、 そのコマンドをここに再掲します。 ターミナルソフトウェアLXTerminalを起動して、下記の2コマンドを一つずつ順に実行してください。
sudo chown -R $USER /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.259:モータードライバ TA7291Pについて

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



10章

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

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


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




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

LCDにIPアドレスを表示するプログラムの自動起動のために/etc/rc.localに追加する行は下記の通りです。必要に応じてコピーしてご活用ください。書籍から「sudo」コマンドを省略しました。
python3 /home/pi/07-02-LCD.py $_IP &
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「python3 /home/kanamaru/07-02-LCD.py $_IP &」となる、ということです。

また、サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
python3 /home/pi/bluebacks/07-02-LCD.py $_IP &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

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

シャットダウンプログラムの自動起動のために/etc/rc.localに追加する行は下記の通りです。必要に応じてコピーしてご活用ください。書籍から「sudo」コマンドを省略しました。
python3 /home/pi/10-01-sw-poweroff.py &
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「python3 /home/kanamaru/10-01-sw-poweroff.py &」となる、ということです。

また、サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
python3 /home/pi/bluebacks/10-01-sw-poweroff.py &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

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

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

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

p.288:キャタピラ式模型に搭載したままRaspberry Piを用いる

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

また、キャタピラ式模型の演習が終わった後、キャタピラ式模型に搭載したままRaspberry Piを使いたいという方もいるでしょう。

そこで、キャタピラ式模型に搭載したままRaspberry Piを使用する方法を2種類紹介したページを作成しましたので、リンクを貼ります。
ややハードルが高いかもしれませんが、どちらも身につける価値はある方法です。

p.290:mjpg-streamerのインストールコマンド

mjpg-streamerをインストールするためのコマンドやや長く、写し間違えると正しくインストールが行なわれません。 下記にコピーできる形で再掲しますので、ブラウザで表示して1行ずつコピーし、ターミナルソフトウェアLXTerminalへ貼り付けて1つ1つ実行していけばトラブルが減るでしょう。コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。
(1) sudo apt update
(2) sudo apt install libjpeg8-dev cmake
(3) git clone https://github.com/neuralassembly/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 OS Bullseye を用いている方は、(2) のコマンドを
(2) sudo apt install libjpeg-dev cmake
に変更してください。さらに、 Bullseye を用いている方は、本ページの 「p.123, Bullseye (Raspberry Pi OS 2021-10-30 以降) でのカメラの利用について」の項目を参考に、Legacy Camera モードを有効にする必要がありますのでその点もご注意ください。 さらに、64-bit版 Bullseye を用いている方は、実行時に「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイル内の 10-02-stream-webcam.sh を用いる必要があります。

また、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
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「sh /home/kanamaru/10-02-stream.sh」となる、ということです。

サンプルファイルをbluebacksディレクトリに保存した場合は下記になるのでしたね。
sh /home/pi/bluebacks/10-02-stream.sh
上と同様に、「pi」は自分のユーザー名に置き換えてください。

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

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

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

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

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

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

(3') 補足ページ「p.290: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アドレスで
 読み替える必要があります。

付録B

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

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



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

p.308にて、本書のプログラムをターミナルでコマンドで実行する方法が記されています。 本ページは、すべてのプログラムを python3 で実行するよう方針を変更しましたので、プログラムの実行例は
python3 04-01-led.py
となります。管理者権限を表す sudo も不要になっていますのでご注意ください。

付録E

p.312:Windows + Bonjourによるraspberrypi.localへの接続について

付録に記したように、WindowsにiTunesをインストールすると、Bonjourというソフトウェアがインストールされ、その働きにより、「raspberrypi.local」という名称でのRaspberry Piへのアクセスが可能になるのでした。しかし、Windows 10 に対して2018年4月にリリースされたApril 2018 Updateを適用すると、この方法でのアクセスが一時的にできなくなるようです。

WindowsからiTunesとBonjourを一旦削除してからiTunesをインストールしなおすとまた使えるようになるようですのでこの問題に直面した方はお試しください。

応用PDF

PDF9, 06-03-volume.py で音声のボリュームを変更する

プログラム 06-03-volume.py で音声のボリュームを変更する場合、音声出力先や、用いているOSのバージョンにより方法が異なりますので以下の指示に従ってください。

<2020-12-02版およびそれ以降の Raspberry Pi OS をご利用の場合>

2020-12-02版およびそれ以降の Raspberry Pi OS をご利用の場合、音声出力先がHDMI、イヤフォンジャックのどちらの場合も、ファイル 06-03-volume.py の変更が必要となります。

まず、イヤフォンジャックから音声を出力したい場合、本ページ「p.128, 音声の出力先を変更する方法」の方法に基づき、音声の出力先をイヤフォンジャックに変更して下さい。HDMI経由で音声出力したい場合はデフォルトのままで構いません。
すると、音声の出力先がどちらであっても、以下のデフォルトのコマンドで音声が鳴ります。
mpg321 test.mp3
また、音声の出力先がどちらであっても、06-03-volume.py に対して変更が必要になります。Thonny でプログラムを開くと 57行目に以下の行が見つかります。
            args = ['amixer','-q','cset','numid=1',vol]
これを以下のように変更して保存して下さい。
            args = ['amixer','-q','-D','pulse','set','Master',vol]
以上で、06-03-volume.py によりボリュームを変更可能になります。

<2020-5-27版および2020-8-20版の Raspberry Pi OS をご利用の場合>

2020-5-27版および2020-8-20版の Raspberry Pi OS で音声出力先をイヤフォンジャックにしたい場合、音声再生用のコマンドは下記になります。
mpg321 -a hw:1,0 test.mp3
そして、06-03-volume.py に対しては、変更が必要となるのでした。Thonny でプログラムを開くと、57行目に以下の行が見つかります。
            args = ['amixer','-q','cset','numid=1',vol]
この行を以下のように変更してファイルを保存してください。
            args = ['amixer','-q','-c1','cset','numid=1',vol]
以上で、06-03-volume.py によりボリュームを変更可能になります。

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

PDF17:LDCの文字コード表

本書で紹介した2つのLCDでは、PDF17図7-8の文字コード表の一番左の列(0x06~0x0f)の文字は表示されないようです。ご了承ください。

PDF20:Python3用WiringPi-Pythonのインストールコマンド

Python3用WiringPi-Pythonのインストールコマンドは、Python2用と共通としてこのページ上部にある「p.209:WiringPi-Pythonのインストールコマンド」に記載されていますのでご参照ください。

PDF31: カメラつきキャタピラ式模型の回路について

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

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

PDF32: WebIOPiからWiringPi-Pythonを呼び出すプログラムの自動起動について

「bb/07」や「bb/08」のように、WebIOPiからWiringPi-Pythonを呼び出すプログラムを自動起動する場合、 PDF32に記したように、Raspbianの起動方法をGUIからCLIにしないと正常動作しない(サーボモーターが動かない)ことがあります。

もし、この「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 service webiopi start
以上で、/etc/rc.localからWebIOPiが起動され、サーボモーターが正常動作することを期待しています。 なお、「sleep 10」は「10秒待機する」の意味です。 安全のために「10秒」と大きな数値を選びましたが、 私の環境では「sleep 3」(3秒待機)程度でも正常動作しました。 さらに、この方法ではCLI起動ではなくGUI起動のままでもサーボモーターが正常動作しました。

2020年12月29日火曜日

読者の方々の声

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

レビュー


記事やブログなどでのご紹介



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