2024年2月13日火曜日

ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 補足情報トップ

はじめに

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

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

以下のページに、書籍で利用したコマンド一覧や補足情報などを掲載します。

その他の補足情報

カメラモジュールを用いる演習を picamera2 を用いたり、あるいはウェブカメラで実行したい方は以下のページをご覧ください。

Raspberry Pi Zero W 系を利用したい方は、本書の最新版にある下記ページをご覧ください。
2021年1月に発表された Raspberry Pi Pico で電子工作してみたい方は、
本書の最新版にある下記ページをご覧ください。

なお、下記は本書の旧版用の補足情報ですが、本書をご利用の方にもお役に立つと思います。

感想やレビューなど

最後に、読者の方々の感想などを下記にまとめます。

本書の内容を Pi Zero ~ Pi 5 で実行する方法

サンプルプログラムと回路配線図について

Pi 5 対応のサンプルプログラム、回路配線図、応用PDFは下記のリンクからダウンロードしてください。サンプルファイルを圧縮したファイルのファイル名は「 raspi1a-sample-pi5.zip 」と変更されており、「-pi5」の部分がこのファイルが Pi 5 対応であることを意味しています。 なお、サンプルファイルである「raspi1a-sample-pi5.zip」をWindowsでダウンロードすると、Windows Defender によりウィルスと誤検出されることが多いようです(2024.3月現在)。
検出されるファイルに問題がないことは確認済みです。そのため、Windows ではなくRaspberry Piで直接ダウンロードすることを推奨します。

回路配線図の PDF と応用PDF は Raspberry Pi 上のブラウザでも見られますが、ブラウザ上の「↓」(ダウンロード)ボタンでダウンロードし、ファイルマネージャーで PDF ファイルを右クリックし「アプリケーションで開く」→「アクセサリ」→「ドキュメントビューア」などで開いてもよいでしょう。
「選択したアプリケーションをこのファイルタイプのデフォルトのアクションとする」にチェックを入れればそのアプリケーションで開くのがデフォルト動作となります。

はじめに

本ページでは、金丸隆志著「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」(講談社ブルーバックス)の内容を Raspberry Pi Zero ~ Raspberry Pi 5 で動作させるための補足情報を紹介します。

2023年9月に海外で発表された Raspberry Pi 5 (以下 Pi 5) では、GPIO を用いる仕組みがそれまでのバージョンの Raspberry Pi とは大きく異なります。
その影響で、本書で解説したサンプルプログラムは Pi 5 では動作しなくなってしまいました。

Pi 5 で本書の演習を実行するためには、本書のプログラムをほぼ全て書き換えねばなりません。
しかし書き換えを実行すると、そのプログラムは Pi 5 だけではなく、ほぼ全ての Raspberry Pi のバージョンで動作するというメリットがあります。

そこで、この機会にすべてのプログラムを一新し、このページでその動作方法を解説することにしました。
書籍とこのページだけを見れば、全ての演習を Pi Zero ~ Pi 5 で実行できるようになります。

ただし、本ページの解説はプログラムを動作させるために必要な最低限のものとなります。より詳細な解説が必要な方は、Pi 5 対応の本書の最新版をご覧ください。
なお、本ページで対象とする OS は、以下のように 2023年5月にリリースされた Rsapberry Pi OS (Bullseye) の最終版と、2023年10月にリリースされた Bookworm 以降の OS です。

日付バージョンOSバージョン
2023/5/3Raspberry Pi OS 2023-05-03Bullseye (最終版)
2023/10/10Raspberry Pi OS 2023-10-10Bookworm (Pi 5 は Bookworm 以降のみが動作)
-中略
2025/5/13Raspberry Pi OS 2025-05-13
2025/10/1Raspberry Pi OS 2025-10-01Trixie
-中略
2025/12/4Raspberry Pi OS 2025-12-04

なお、それ以前の古いOSに対する情報(Pi Zero~Pi 4までのみ対応)は、下記のページに残してありますが、恐らく今後需要は減っていくでしょう。 下の写真は、本書の10章で作成したタンクを Raspberry Pi 5 で作成し、タブレットで操作している様子です。

本ページで表示するコマンドの利用方法

本ページには、本書の演習を実行するために必要なコマンドを全て記し、さらに、本書への補足情報を記していきます。コマンドを本ページからコピーして実行することにより、書き写すことによるミスの恐れがなく確実に実行できます。

本ページのコマンドをコピーにより活用するためには、まずRaspberry Pi上のブラウザ(Chromium)で本ページを開きます。

そして、コピーしたいコマンドをマウスでなぞり色を反転してください。その状態からそのコマンドをコピーするには下記の二つの方法のうちどちらかを実行してください。
  • 色を反転した領域をマウスで右クリックして「コピー」を選択する
  • キーボードの「Ctrl」キーを押しながら「c」キーを押す(Ctrl-c)
そして、コピーされたコマンドをターミナルソフトウェアに貼り付けるには、下記の三つの方法のうちどれかを実行してください。
  • LXTerminalのメニューから「編集」→「貼り付け」を選択する
  • LXTerminal上でキーボードの「Ctrl」キーと「Shift」キーを押しながら「v」キーを押す(Ctrl+Shift+v)
  • LXTerminal上でマウスのホイールを押し込む(ただし、この方法は正確には「コピーされた文字を貼り付ける」のではなく「マウスで色が反転された文字を貼り付ける」という動作になります)
いずれかの方法でLXTerminalにコマンドが貼り付けられたら、そのままキーボードの「Enter」キーを押せばコマンドが実行されます。

なお、複数のコマンドが複数行にわたって連続して書かれている場合、コピー、貼り付け、実行はコマンド一つごとに行ってください。

2章

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

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

p.33, microSDカードの容量について

書籍では、容量が16GB以上のmicroSDカードを推奨しました。しかし、2023年10月にリリースされたOSでは、16GBでは容量が足りなくなることを確認しています。容量が32GB以上のmicroSDカードを用意して下さい。

p.49, Raspberry Pi Zero WH に対する周辺機器の取り付け

Raspberry Pi Zero WH へ周辺機器を取り付けて電源を入れる方法は、本書の最新版の下記ページをご覧ください。

3章

p.65, 秋月電子通商のパーツセット

本書用の秋月電子通商のパーツセットは、以下のリンク先で購入できます。

4章

p.92, 4章のサンプルプログラム

4章ではLEDを点滅するプログラムとして下記の2つのプログラムを用います。
  • 04-01-led.py
  • 04-02-led.py
書籍では、GPIOの制御に RPi.GPIO というライブラリを用いていましたが、これは Pi 5 では動作しなくなっています。そこで、本ページでダウンロードして頂いた raspi1a-sample-pi5.zip に含まれるファイルでは使用ライブラリを RPi.GPIO から gpiozero に変更しています。動作は同じですので安心してご利用ください。

5章

p.112, 5章のサンプルプログラム

5章ではタクトスイッチを用いるプログラムとして下記の6つのプログラムを紹介しています。
  • 05-01-sw.py
  • 05-02-sw-pd.py
  • 05-03-event-pd.py
  • 05-04-sw-camera.py
  • 05-05-sw-mp3.py
  • 05-06-sw-poweroff.pyy
4章と同様、本ページでダウンロードして頂いた raspi1a-sample-pi5.zip に含まれるファイルでは GPIO を制御するためのライブラリを RPi.GPIO から gpiozero に変更しています。動作は同じですので安心してご利用ください。

p.128, カメラモジュールを利用したプログラムについて

Raspberry Pi をカメラにするためのプログラム 05-04-sw-camera.py にはいくつかの注意があります。

Raspberry Pi 用のカメラモジュールは、現在では下図のように バージョン 1 から バージョン 3 までの 3 バージョンがあります。
左から、バージョン1(基板が四角)、バージョン2(基板の角が丸く、レンズ周辺が黒)、バージョン3(基板の角が丸く、レンズ周辺が銀)です。基板上にもバージョンの記載がありますね。どのバージョンでも動作させることができます。

Raspberry Pi 1 から Pi 4 でしたら、カメラモジュールの Raspberry Pi 本体への取り付けは、本書記載の通り「(ケーブルの)端子面がRaspberry PiのmicroSDカードの方を向くように」取り付けます。

一方、Raspberry Pi Zero および Pi 5 の場合、カメラモジュールの取り付けにはいくつかの注意があります。

まず、カメラモジュールに取り付けられているケーブルを、Pi Zero および Pi 5 に対応したものに交換する必要があります。例えば下記のものは Pi Zero でも Pi 5 でも利用可能です。本書のキャタピラ式模型に搭載する場合、200mm のものが良いのではないかと思います。 Pi Zero 用ケーブルでRaspberry Pi Zero WH にカメラモジュールを取りつけた様子が下図です。Raspberry Pi 本体に向かってケーブルが細くなっているのがわかるでしょうか。


専用ケーブルをカメラに取り付ける際、金属が露出した端子面を緑色の基板の方を向くようにします。基板上のカバーを引き出し、ケーブルを差し込んだ後でカバーを押し込むことでケーブルが固定されます。
専用ケーブルを Raspberry Pi 本体に取り付ける際、Pi Zero の場合はやはり金属が露出した端子面を緑色の基板の方を向くようにします。
Pi 5 の場合は、下図のように「金属が露出した端子面が USB 端子側を向くように」取り付けます。これは Pi 1~Pi 5とは逆向きですので注意してください。
また、Pi 5 にはカメラを取り付けられる場所が 2 箇所ありますが、「CAM/DISP 0」と書かれた方に接続しましょう。

なお、どの Raspberry Pi を用いるにせよ、カメラのコネクタは壊れやすいので、両手で慎重に開け閉めしましょう。私は片手で雑に扱っていて壊したことがあります。
さらに、映像を保存するために OpenCV という画像処理ライブラリを用いますので、以下のコマンドで OpenCV をインストールする必要があります。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo apt update
sudp apt -y install python3-opencv
以上の準備の下、 05-04-sw-camera.py を実行することができます。

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

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

p.132, mplayer のインスト―ルコマンド

以下のコマンドは、インストール可能なソフトウェアのリストを更新します。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo apt update
以下のコマンドで、mplayerをインストールします。
sudo apt -y install mplayer
途中で「続行しますか?」や「検証なしにこれらのパッケージをインストールしますか?」と質問された場合、それぞれで[y]をタイプしたあと[Enter]キーを押して続行しましょう。

p.133, mplayer の実行コマンド

プログラムの存在するディレクトリ(フォルダ)で以下のコマンドを実行すると、05-07-test.mp3 というサンプル音声を再生することができます。音が鳴らない場合は引き続き以下もお読みください。
mplayer 05-07-test.mp3
なお、サンプルプログラムを bluebacks ディレクトリ(フォルダ)に保存した場合は、上記コマンドを実行する前に以下のコマンドを実行して bluebacks ディレクトリ内に移動する必要があります。
cd bluebacks

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

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

<2023-10-10版以降の Raspberry Pi OS をご利用の場合(Bookworm)>

もし、デフォルトでピンジャックから音が出ていない場合、以下の指示に従ってください。なお、raspi-config コマンドを実行中は、キーボードの Esc キーが「戻る」に対応しますので、困ったら Esc キーを何度か押してみると良いでしょう。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く。パスワードの入力を求められたら、入力してEnterキーを押す
  2. キーボードの「↓」キーを五回押し、「6 Advanced Options」にフォーカスを合わせる
  3. キーボードの「Enter」キーを押し、「6 Advanced Options」に入る
  4. キーボードの「↓」キーを六回押し、「A7 Audio Config」にフォーカスを合わせる
  5. キーボードの「Enter」キーを押し、「A7 Audio Config」に入る
  6. キーボードの「上」キーを一回押し、「1 PulseAudio」にフォーカスを合わせる
  7. キーボードの「Enter」キーを押し、「1 PulseAudio」を選択する
  8. キーボードの「Enter」キーを押し、「了解」を選択する
  9. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  10. キーボードの「Enter」キーを押すと、再起動され設定が有効になる


<Raspberry Pi OS が Bullseye の場合>

2020-12-02版およびそれ以降の Raspberry Pi OS をご利用で、なおかつイヤフォンジャックから音が鳴らない場合、raspi-configというコマンドで音声の出力先をイヤフォンジャックに切り替えます。 以下の手順に従ってください。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く。パスワードの入力を求められたら、入力してEnterキーを押す
  2. キーボードの「Enter」キーを押し、「1 System Options」に入る
  3. キーボードの「↓」キーを一回押し、「S2 Audio」にフォーカスを合わせる
  4. キーボードの「Enter」キーを押し、「S2 Audio」の設定画面に入る
  5. キーボードの「↓」キーを一回押し、「1 Headphones」にフォーカスを合わせる
  6. キーボードの「Enter」キーを押し、「1 Headphones」を選択する
  7. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  8. キーボードの「Enter」キーを押し、raspi-config の設定画面を終了する

以上で、下記コマンドで
mplayer 05-07-test.mp3
イヤフォンジャックから音声が出るようになります。

PDF6, タクトスイッチでシャットダウンするプログラム

05-06-sw-poweroff.py はタクトスイッチによりRaspberry Piをシャットダウンするプログラムなのですが、2026年4月13日以降のRaspberry Pi OSではそのままでは動作しなくなっています。これ以降のOSでは、管理者権限で命令を実行するための「sudo」コマンドで、デフォルトではパスワードを省略できなくなっているだめです。具体的には、タクトスイッチを押した後にパスワードの入力を求められる、というイメージです。
この問題を解決する方法は以下のように3つありますので、お好みの方法を用いてください。

[方法1] 以前のOSのように、パスワードの入力を省略できるようにする方法

メニューの「設定」→「Control Centre」を選択し、起動したアプリケーション上の「システム」タブの「Admin Password」を下図のようにオフにします。その際にパスワードを要求されます。この設定により、 以前のOSのようにパスワードの入力を省略できるようなっており、その結果 05-06-sw-poweroff.py がこれまで通り動作します。ただし、パスワードの省略はセキュリティの問題がありますので、この方法を必ずしも推奨しません。

[方法2]管理者権限の thonny で 05-06-sw-poweroff.py を実行する方法

二つ目の方法は、管理者権限のthonnyで05-06-sw-poweroff.py を実行する方法です。まず、ターミナルで下記のコマンドを実行し、管理者権限のthonnyを起動します。パスワードを求められたら入力してEnterキーを押してください。
sudo thonny
現れたthonny上で、Loadボタンを押して05-06-sw-poweroff.pyを読み込んで実行すれば良いのです。ただし、「/home/ユーザー名/gihyo/05-06-sw-poweroff.py」とフォルダ構造をたどってファイルを開くのはやや面倒です。

[方法3]ターミナルで管理者権限つきで 05-06-sw-poweroff.py を実行する方法

最後の方法は、ターミナルで管理者権限つきで 05-06-sw-poweroff.py を実行するというものです。ターミナルを新規に開き、下記のコマンドを一つずつ順に実行すれば良いです。
cd gihyo
sudo python3 05-06-sw-poweroff.py 
二つ目のコマンドでパスワードを求められたら入力してEnterキーを押してください。その状態でタスクスイッチを押せば、シャットダウンが始まるでしょう。

6章

全般:AD コンバータ MCP3208 の利用のために SPI を有効にしておく

6章でも、本ページでダウンロードして頂いた raspi1a-sample-pi5.zip に含まれるファイルでは GPIOを 制御するためのライブラリとして gpiozero を用いています。おおむね書籍と同様の使い方ができるプログラムを用意していますが、6章(および8章)のプログラムは「事前に SPI を有効にしておかなければならない」点が異なります。具体的には以下の指示に従ってください。
  1. デスクトップ左上のメニューから、「設定」→「Raspberry Piの設定」を起動(OS Trixie では「設定」→「Control Centre」)
  2. 「インターフェイス」タブをクリック
  3. 「SPI」のスイッチをONにして有効化する(2026年4月13日以降のOSではパスワードを要求される)
以上で SPI の有効化は完了です。06-01-print.py や 06-02-led.py を書籍と同様に利用できるでしょう。なお、06-04-manual-spi.py は 06-01 を SPI を無効な状態で実現するためのプログラムですが、使用する必要性はあまりないと思います。

なお、2025年10月にリリースされた最新 OS Trixie では、この設定アプリケーションの起動法や見た目が変更されております。

まず、起動は下図のように「設定」→「Control Centre (コントロールセンター)」を選択することで行います。
起動したアプリケーションの左側の項目で「インターフェイス」を選択すると、下図のような画面が現れます。左側の項目をスクロールしないと「インターフェイス」が見つからないことがありますのでご注意ください。下図では、6 章で用いる SPI と 7 章で用いる I2C の項目が有効にされています。
なお、2026年4月13日以降にリリースされたOSを用いている方は、SPIやI2Cを変更するときなど、管理者権限が必要な場面で下図のようにパスワードの入力が求められます。皆さんがユーザーIDとともに設定したパスワードを入力して先に進みましょう。


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

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

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

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

7章

全般:7章のプログラム

7章の I2C を用いるプログラムは、書籍とほぼ同じです。これらのプログラムでは RPi.GPIO を用いておらず、変更の必要がないためです。

p.162, I2C利用のための準備

I2Cを利用するためには、以下の手順で設定アプリケーションのインターフェイスにおける「I2C」を有効にする必要があります。
  1. デスクトップ左上のメニューから、「設定」→「Raspberry Piの設定」を起動(OS Trixie では「設定」→「Control Centre」)
  2. 「インターフェイス」タブをクリック
  3. 「I2C」のスイッチをONにして有効化する(2026年4月13日以降のOSではパスワードを要求される)
なお、2025年10月にリリースされた最新 OS Trixie では、この設定アプリケーションの起動法や見た目が変更されております。

まず、起動は下図のように「設定」→「Control Centre (コントロールセンター)」を選択することで行います。
起動したアプリケーションの左側の項目で「インターフェイス」を選択すると、下図のような画面が現れます。左側の項目をスクロールしないと「インターフェイス」が見つからないことがありますのでご注意ください。下図では、6 章で用いる SPI と 7 章で用いる I2C の項目が有効にされています。
なお、2026年4月13日以降にリリースされたOSを用いている方は、SPIやI2Cを変更するときなど、管理者権限が必要な場面で下図のようにパスワードの入力が求められます。皆さんがユーザーIDとともに設定したパスワードを入力して先に進みましょう。
また、Pi 5で kernel 6.6.20 をお使いの場合、本書で紹介する LCD を用いるときにエラーが頻発する問題があります。
お使いのカーネルのバージョンは、ターミナルで「uname -r」を実行することで調べられます。
2024/4/26 に apt でインストール可能になった kernel 6.6.28 ではこの問題が解決していますので、「sudo apt update ; sudo apt -y dist-upgrade」などで kernel を更新してください。

p.165, 接続されている I2C デバイスのアドレスを表示するコマンド

接続されている I2C デバイスのアドレスを表示するコマンドは以下の通りです。
i2cdetect -y 1

p.178, LCD へ文字を表示するプログラムの実行コマンド

ターミナルから 07-02-LCD.py を実行するコマンドは以下の通りです。付録C.3「タブによる補完」を学ぶと、ターミナルでのプログラムの実行が格段に楽になりますので興味のある方は参考にしてください。
python3 07-02-LCD.py
なお、サンプルプログラムを bluebacks ディレクトリに保存した場合は、上記コマンドを実行する前に以下のコマンドを実行して bluebacks ディレクトリ内に移動する必要があります。
cd bluebacks

p.179, LCD へ文字を表示するプログラムをコマンドライン引数つきで実行するコマンド

python3 07-02-LCD.py 'test'

8章

全般:8章のプログラム

これまでの章と同様、本ページでダウンロードして頂いた raspi1a-sample-pi5.zip に含まれるファイルでは GPIO を制御するライブラリを RPi.GPIO から gpiozero に変更しています。動作は同じですので安心してご利用ください。

なお、ハードウェアPWMを用いる 8.6 章(p.214)の内容は、pigpio や WiringPi-Python(本書旧版)などの外部ライブラリを用いるのではなく、自作のプログラムを利用しています。本ページ下部にある該当ページの補足をご覧ください。

p.214, ハードウェアPWMを利用するための準備

本書p.214 では、ハードウェアPWMを用いるための解説を行っていますが、本ページでは別の仕組みでハードウェアPWMを実現しますので、本書 p.214 の指示に従う必要はありません。 その代替として、以下のように /boot/firmware/config.txt に一行追加する設定を行ってください。

まず、管理者権限の mousepad で /boot/firmware/config.txt を編集用に開きましょう。下記のコマンドで行うのでした。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo mousepad /boot/firmware/config.txt 
そして、そのファイルの末尾に下記の一行を追加し、上書き保存してから mousepad を閉じてください。
dtoverlay=pwm-2chan
その後、Raspberry Pi を再起動することで、GPIO 18 と 19 をハードウェアPWMを出力するために利用できるようになります。

本ページでダウンロードした raspi1a-sample-pi5.zip に含まれる 08-04-servo.py を利用できますので試してみてください。 同様に、追加 PDF 17ページの 08-06-2servos.py も利用可能です。

ハードウェアPWMのトラブル

2025年5月にリリースされたOSでは、Linuxのコアである kernel のバージョンが 6.12 となり、Pi 5 でハードウェアPWMを出力するための仕様が変わりました。
そのため、その対応を施したサンプルファイルでしか動作しなくなっております。2025年6月22日にサンプルファイルを更新しましたので、それ以降にダウンロードした方でしたら問題なく動作します。 古いサンプルファイルをご利用の方は、最新のファイルをダウンロードし直してください。
変更を受けたのは下記の4ファイルです。
  • 08-04-servo.py
  • 08-06-2servos.py
  • 09-05-servo/app.py
  • 10-03-servo/app.py

9章

p.227, WebIOPi ではなく FastAPI を用いる

第9章ではブラウザを介して回路の制御を行います。そのために、本書では WebIOPi というライブラリを用いました。WebIOPi は、Webサーバーとなる機能と GPIO を操作する機能を組み合わせたライブラリなのでした。
しかし、WebIOPi は Raspberry Pi 5 では動作しませんので、本ページではその代替として FastAPI というライブラリを用います。FastAPI は python3 で簡易的な Webサーバーを作成できるライブラリです。GPIO を操作する機能はありませんので、gpiozero などと組み合わせて用います。

以上の理由から、WebIOPi についての解説がほとんどである本書 p.227~p.243 の解説は現時点ではほぼ参考になりませんし、そこでの手順に従う必要もありません。代わりに、本ページの解説をご覧ください。

まず、下記コマンドで FastAPI をインストールします。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo apt update
sudo apt -y install python3-fastapi
以上で FastAPI を用いた演習の準備は完了です。個別の演習の実行方法を以下で解説していきます。

p.243, ブラウザでLEDのオンオフを制御する

9.3 章(p.243)の演習を実行するためには、まず図9-4の回路を作成します。 その後、FastAPI を用いて書かれた Web サーバーを下記の手順で実行します。
まず、ターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「09-01-led」に移動します。
cd 09-01-led
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/09-01-led
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/9-1
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/9-1 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.246 の図 9-6 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

p.234, IP アドレスを調べるためのコマンド

ifconfig

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

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

以下の環境では、IPアドレスを用いずに「raspberrypi.local」のような名前でRaspberry Piにアクセスできます。
  • iTunesをインストールしたWindows(iTunesに含まれるBonjourというアプリケーションが必要なためです)
  • macOS
  • iPhoneやiPad
上記の環境では、ブラウザのアドレス欄に例えば下記のように入力すればIPアドレスを用いずにアクセスできます。
  • http://raspberrypi.local:8000/9-1
これは、Raspberry Pi OS上で動作しているavahiというソフトウェアの働きによります。


p.252, ブラウザで温度センサの値の表示

9.4 の演習も FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

それが済んでいるなら、p.253 の図9-8 の回路を作成しましょう。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「09-02-temp」に移動します。
cd 09-02-temp
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/09-02-temp
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/9-2
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/9-2 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.254 の図 9-9 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

p.257, ブラウザでフルカラーLEDの制御

9.5 の演習も FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

それが済んでいるなら、p.257 の図9-10 の回路を作成しましょう。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「09-03-rgbled」に移動します。
cd 09-03-rgbled
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/09-03-rgbled
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/9-3
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/9-3 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.259 の図 9-11 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

p.263, ブラウザでDCモーターの速度制御

9.6 の演習も FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

それが済んでいるなら、p.264 の図9-12 の回路を作成しましょう。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「09-04-dcmotor」に移動します。
cd 09-04-dcmotor
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/09-04-dcmotor
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/9-4
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/9-4 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.266 の図 9-13 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

PDF19, ブラウザでサーボモーターの制御

追加 PDF 19ページにある 9.7 の演習も FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。 さらに、ハードウェアPWMを使いますので、 本ページ上部「p.214, ハードウェアPWMを利用するための準備」の指示に従い、 /boot/firmware/config.txt の末尾に「 dtoverlay=pwm-2chan 」を追記しておく必要があります。

以上が済んでいるなら、PDF 20 ページ の図9-14 の回路を作成しましょう。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「09-05-servo」に移動します。
cd 09-05-servo
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/09-05-servo
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/9-5
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/9-5 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は PDF21 の図 9-15 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

ハードウェアPWMのトラブル

2025年5月にリリースされたOSでは、Linuxのコアである kernel のバージョンが 6.12 となり、Pi 5 でハードウェアPWMを出力するための仕様が変わりました。
そのため、その対応を施したサンプルファイルでしか動作しなくなっております。2025年6月22日にサンプルファイルを更新しましたので、それ以降にダウンロードした方でしたら問題なく動作します。 古いサンプルファイルをご利用の方は、最新のファイルをダウンロードし直してください。
変更を受けたのは下記の4ファイルです。
  • 08-04-servo.py
  • 08-06-2servos.py
  • 09-05-servo/app.py
  • 10-03-servo/app.py

10章

全般, FastAPI の準備が必要

第10章でも第9章と同様、 WebIOPi ではなく FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。


p.281, ブラウザでツインモーターギヤーボックスの動作確認

10.3 の演習 (p.281) も FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

FastAPI の準備が済んでいるなら、p.282 ページ の図10-4 の回路を作成しましょう。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「10-01-tank」に移動します。
cd 10-01-tank
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/10-01-tank
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/10-1
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/10-1 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.284 の図 10-5 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている

p.286, FastAPI を用いたプログラムの自動起動

p.286 には WebIOPi の自動起動の方法が記されていますが、本ページでは、これを「FastAPI を用いたプログラムの自動起動」、すなわち「python3 app.py コマンドの自動起動」に置き換えて解説します。

「python3 app.py コマンドの自動起動」を実現するためには、このコマンドをサービスとして登録するのが確実です。 そのために必要なファイルは、サンプルファイルの中の 10-01-tank ディレクトリにある webtank.service というテキストファイルとして保存されています。 このファイルを活用する前に、その内容を皆さんの環境に合わせてカスタマイズする必要があります。

このファイルは単なるテキストファイルのですので、テキストエディタ(mousepad)で開いてみましょう。

管理者権限は不要ですのでファイルマネージャから開いても良いですし、コマンドで開く場合、「 cd 10-01-tank 」または「 cd blubacks/10-01-tank 」でディレクトリを移動した後、下記コマンドで開けます。
mousepad webtank.service
すると、以下の内容がみられます。
[Unit]
Description=WebTank
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/pi/10-01-tank
#WorkingDirectory=/home/pi/bluebacks/10-01-tank
ExecStart=/usr/bin/python3 -m app
TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target
変更しなければならないのは下記の部分、すなわち、プログラムが存在するディレクトリを指定している部分です。
WorkingDirectory=/home/pi/10-01-tank
#WorkingDirectory=/home/pi/bluebacks/10-01-tank
2行ありますが、2行目の先頭に「#」がついていますのでこちらは無効化された状態です。
1行目がサンプルファイルをホームディレクトリに直に展開した場合、2行目がサンプルファイルを bluebacks ディレクトリ内に展開した場合ですので、 自分に合った方を有効にしてください。

次に着目して頂きたいのは、ディレクトリの「/home/pi」の部分です。この「pi」はユーザー名を現していますので、これを皆さんのユーザー名に変更してください。 私の場合でしたら、「pi」の部分を「kanamaru」に変更、ということです。 変更が済んだら上書き保存し、mousepad を閉じてください。

その後、下記のコマンドで webtank.service ファイルを /etc/systemd/system ディレクトリに管理者権限でコピーします。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo cp webtank.service /etc/systemd/system/
そうすると、ブラウザでキャタピラ式模型を操作するためのプログラムが「webtank」という名前のサービスとして利用できるようになります。サービスの起動と終了を行うコマンドは以下の通りです。これらのコマンドは、どのディレクトリで実行しても構いません。

サービス起動(python3 app.py を実行するのと同等)
sudo service webtank start
サービス終了(python3 app.py の終了と同等)
sudo service webtank stop
なお、サービスが起動しているかどうかは、下記のように ps ax コマンドの出力から「python3」を含むものを抽出することで確認することができます。
kanamaru@raspberrypi:~ $ ps ax | grep python3
    914 ?        Ssl    0:00 /usr/bin/python3 -m app
   1947 pts/0    S+     0:00 grep --color=auto python3
1行目の「/usr/bin/python3 -m app」が、プログラム app.py が実行されていることを表します。

なお、以上の service コマンドでサービスを起動しても、Raspberry Pi を終了や再起動するとサービスは終了し、自動起動することはありません。 Raspberry Pi の起動時にこのサービスを自動起動するには、下記のコマンドを用います。このコマンドも、どのディレクトリで実行しても構いません。
sudo systemctl enable webtank
このコマンドを実行後、Raspberry Pi を再起動すると、自動で webtank が起動されるようになります。ps ax コマンドで確認してみましょう。

自動起動を無効に戻すには、以下のコマンドを用います。
sudo systemctl disable webtank

p.287, IPアドレスの自動表示

IP アドレスを自動表示する方法は書籍の解説通りです。/etc/rc.local を管理者権限のテキストエディタで開くコマンドは下記の通りです。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo mousepad /etc/rc.local
さて、このコマンドを実行したとき、既存ファイルである /etc/rc.local がテキストエディタ mousepad で開かれます。そうなった方は先に進んで構いません。
しかし、2024年11月以降の OS では、ファイル /etc/rc.local が削除され存在しないため、mousepad は空白の状態で開きます。そうなった場合、一旦 mousepad を閉じ、以下の3コマンドを順に実行することにより、新たにファイル /etc/rc.local を作成しましょう。
wget https://raw.githubusercontent.com/neuralassembly/raspi/refs/heads/master/rc.local

chmod a+x rc.local

sudo mv rc.local /etc
この3コマンドを実行してファイル /etc/rc.local を作成したら、上記の mousepad で /etc/rc.local を開くコマンドを実行し、以下に進みましょう。

p.287, IPアドレスをLCDに表示するために /etc/rc.local に記入するコマンド

IPアドレスをLCDに表示するために /etc/rc.local の「exit 0」の行の上に記入するコマンドは下記の通りです。
python3 /home/pi/07-02-LCD.py $_IP
なお、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「python3 /home/kanamaru/07-02-LCD.py $_IP」となる、ということです。

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

なお、p.289 の「ネットワークを待つ (Wait for network)」の設定は今はありません。そのため、 Raspberry Pi がネットワークに接続されるより前に上記コマンドが実行され、 LCD に IP アドレスが表示されない、ということが起こりえます。
そのような状態になった場合、以下の3つの対策が思いつきます。
  • 上記コマンドの1行上に「sleep 10」と書かれた行(10秒待つ、の意味)を挿入して保存する
  • 「p.234:IPアドレスでのURLの指定について」を参考に、IPアドレスではなく、raspberrypi.local でブラウザのアドレスを指定する(LCDへのIPアドレスの表示が不要になる)
  • IPアドレスのLCDへの表示プログラムを、/etc/rc.local に書くのではなく、service として登録する
1番目か2番目の対策が簡単だと思います。3番目の対策は、希望があったら公開します。

p.291, シャットダウンプログラムの自動実行のために /etc/rc.local に記入するコマンド

シャットダウンプログラムの自動実行も、おおむね書籍の解説の通りです。実行するファイル名が、「10-01~」から「10-04~」に変更されていますので注意してください。 このプログラムも RPi.GPIO から gpiozero の利用へ変更されています。

/etc/rc.local の「exit 0」の行の上へ記入する行は下記です。末尾の「&」も忘れずにコピーしましょう。
python3 /home/pi/10-04-sw-poweroff.py &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

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

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

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

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

p.292, Raspberry Pi 5 でのカメラの取り付けについて

Raspberry Pi 5 でカメラモジュールを用いる場合、別途ケーブルを購入しなければいけないわけですが、キャタピラ式模型に搭載する場合、必要な長さを考えると下記のものが良いのではないかと思います。標準のものよりケーブルが硬いので取り扱いに注意してください。

p.293, mjpg-streamer のインストールコマンド

p.293 で紹介したmjpg-streamerのインストール手順は、以下に変更してください。パスワードの入力を求められたら、入力してEnterキーを押してください。
(1) sudo apt update
(2) sudo apt -y install libjpeg-dev cmake libcamera-dev
(3) git clone https://github.com/neuralpi/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 が利用する libcamera が 2026年2月にバージョン 0.6 から 0.7 に上がったタイミングで、それ以前の mjpg-streamer は動作しなくなりました。 その問題への対応として 2026年4月30日に mjpg-streamer を更新しました。それ以前に mjpg-streamer をインストールした方は、下記の方法で一旦 mjpg-streamer を削除し、もう一度上記の方法で mjpg-streamer を再インストールする必要があります。
# 古い mjpg-streamer の削除方法

(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf ~/mjpg-streamer
削除を実行した後で再インストールを行うことで mjpg-streamer は動作するようになるはずです。

また、OS として Bullseye やリリース直後の Bookworm をお使いの方は、上記の (5) で LibCamera.cpp のビルド中にエラーが起こると思います。その場合、エラーが出た状態から以下の 8 コマンドを一つずつ順に実行してください。この 8 コマンドが上記 (5)~(7) の代替、というイメージです。
rm -rf _build
mkdir _build
cd _build
cmake -DLIBCAMERA_USES_TRANSFORM=ON ..
cd ..
make
cd
sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer


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

mjpg-streamerの実行用ファイルは、書籍から名称が変わり 10-05-stream.py です。以前まではこのファイルは拡張子が sh のシェルスクリプトでしたが、Python によるスクリプトに変更しました。
理由は、libcamera 対応の mjpg-streamer が時折異常終了するため(典型的には 30 分おきくらい)、2秒おきに実行状況をチェックして必要に応じて mjpg-streamer を再起動させるためです。
お手元のファイルが Python ファイル (拡張子 py) ではなくシェルスクリプトのまま(拡張子 sh)の場合は、raspi1a-sample-pi5.zip をダウンロードしなおしてください(2024.2.28更新)。

このファイルを実行する前に、使用しているカメラモジュールの設定が必要な場合があります。 まず、mousepad で 10-05-stream.py を開いてみましょう。7行目に下記の内容が見えるはずです。
opt_in = 'input_libcamera.so -camver 1 -fps 15 -r 640x480 -s 640x480'
このうち
-camver 1
の部分が、カメラモジュールのバージョンの数字を指定している部分です。お使いのカメラモジュールがバージョン 2 か 3 なら、この数字を 2 または 3 に変更し、それからファイルを上書き保存してください。

その後、mjpg-streamer の実行コマンドを /etc/rc.local の「exit 0」の行の上に記すことになります。記す内容は下記の通りです。
python3 /home/pi/10-05-stream.py &
ただし、「pi」の部分は自分のユーザー名に変更する必要があります。

なお、サンプルファイルを bluebacks ディレクトリに展開したのならば、記すコマンドは下記です。
python3 /home/pi/bluebacks/10-05-stream.py &
こちらも、「pi」の部分は自分のユーザー名に変更する必要があります。

p.296, カメラ付きキャタピラ式模型を制御するためのプログラム

p.296 におけるカメラ付きキャタピラ式模型を制御にも FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

FastAPI の準備が済んでいるなら、p.282 ページ の図10-4 の回路を作成しましょう。さらに、mjpg-streamer が起動済である必要があります。 そしてターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「10-02-image」に移動します。
cd 10-02-image
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/10-02-image
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/10-2
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/10-2 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は p.297 の図 10-9 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている
なお、このカメラ付きキャタピラ式模型を制御するためのプログラムを自動起動したい場合、webtank.service の中身の WorkingDirectory を 10-02-image に変更した上で /etc/systemd/system にコピーすれば良いでしょう。

なお、ブラウザ上のカメラの映像ですが、上述した mjpg-streamer が異常終了の問題が起こった場合、映像がそこで停止しているでしょう。その場合、ブラウザで再読み込みを実行すると、映像が再び流れ始めると思います。

PDF 26, カメラ+サーボモーター付きキャタピラ式模型を制御するためのプログラム

PDF 26 におけるカメラ+サーボモーター付きキャタピラ式模型を制御にも FastAPI を用います。本ページ上部にある「p.227, WebIOPi ではなく FastAPI を用いる」の解説により、FastAPI をインストールしておく必要があります。

FastAPI の準備が済んでいるなら、PDF29 ページ の図10-13 の回路を作成しましょう。さらに、mjpg-streamer が起動済である必要があります。さらに、ハードウェアPWMを使いますので、 本ページ上部「p.214, ハードウェアPWMを利用するための準備」の指示に従い、 /boot/firmware/config.txt の末尾に「 dtoverlay=pwm-2chan 」を追記しておく必要があります。

以上の準備のもとターミナルを新規に開き、下記のコマンドを実行することで Webサーバーのプログラムが存在するディレクトリ「10-03-servo」に移動します。
cd 10-03-servo
サンプルプログラムを bluebacks ディレクトリに展開した場合の移動コマンドは以下です。
cd bluebacks/10-03-servo
移動したら、下記のコマンドで Web サーバーを実行します。
python3 app.py
このコマンドが実行されたままの状態で、ブラウザで下記のアドレスにアクセスします。ブラウザは Raspberry Pi のものでも、同一ネットワーク内にある PC やスマートフォンのものでも構いません。
http://(Raspberry PiのIPアドレス):8000/10-3
例えば、Raspberry PiのIPアドレスが 192.168.1.3 ならば、ブラウザのアドレス欄に「 http://192.168.1.3:8000/10-3 」を記入して Enter キーを押す、ということです。 Raspberry PiのIPアドレスの調べ方は、本書 p.234 に載っているように ifconfig コマンドを用いても良いですし、Raspberry Pi のデスクトップ右上の Wifi アイコンにマウスポインタを重ねることでも調べられると思います。

現れるページの見た目と機能は PDF30 の図 10-14 と同じです。なお、「{"detail":"Not Found"}」というエラーが表示される場合、もう一度 raspi1a-sample-pi5.zip をダウンロードして頂けますでしょうか?2024.02.25 にサンプルファイルを更新したためです。

なお、ここで実行したプログラムで重要なファイルは下記のものです。必要に応じて参照してください。
app.py : Pythonプログラム。Webサーバーの構築と、GPIO の利用など

static/javascript.js:JavaScript プログラム。ブラウザからの指令などを app.py に送る

templates/index.html:HTML ファイル。ページの見た目を決めている
なお、このカメラ+サーボモーター付きキャタピラ式模型を制御するためのプログラムを自動起動したい場合、webtank.service の中身の WorkingDirectory を 10-03-servo に変更した上で /etc/systemd/system にコピーすれば良いでしょう。

PDF 29, DCモーターとサーボモーターを同時に使うとサーボモーターが不安定になる場合(図10-13)

図10-13のようにDCモーターとサーボモーターを同時に使うとサーボモーターが不安定になる場合があります。

これは、DCモーターの回転により発生するノイズがサーボモーターに影響を与えているためです。この問題に対する簡単な対処法は、下図のように サーボモーターの電源用配線を、Raspberry Pi の 5V ピンに接続することです。
このような接続をすると、今度はサーボモーターの負荷により Raspberry Pi が不安定になる可能性がありますが、以下の条件が満たされれば Raspberry Pi は安定して動作します。
  • サーボモーターにあまり大きな負荷をかけない。この演習の例では、Raspberry Pi のカメラモジュールという軽いものを動かすだけなので問題にはなりにくいでしょう
  • Raspberry Piを動作させるためのモバイルバッテリーの流せる電流量(「A」や「mA」で表示されているもの)が大きい。筆者は Raspberry Pi 4 に対して 3.0 A のバッテリーを用意しました
なお、この DC モーターによるノイズの問題に関しては、本書p.213の図8-12のように、DCモーターに3つのコンデンサを取り付けることでも改善が期待できます。

付録

p.308, サンプルファイルの展開先(図B-4)

/home/pi/bluebacks
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上の記述の pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「/home/kanamaru/bluebacks」となる、ということです。

p.310, nano の設定ファイル .nanorc に記す内容

set tabsize "4"
set tabstospaces

p.310, vi の設定ファイル .vimrc に記す内容

set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4

p.312, 日本語入力ソフトウェアのインストールコマンド

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

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

そして、fcitx-mozc のインストールは下記のコマンドで行います。
sudo apt update

sudo apt -y install fcitx-mozc
再起動後、半角/全角キーや Ctrl+スペースキーにより、日本語入力をオンオフできます。

p.313, 日本語フォントのインストールコマンド

パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo apt -y install fonts-vlgothic

補足PDF



PDF 11, デジタル温度計の自動実行のために /etc/rc.local に記すコマンド

ファイル /etc/rc.local を管理者権限の mousepad で開くためのコマンドは以下の通りです。パスワードの入力を求められたら、入力してEnterキーを押してください。
sudo mousepad /etc/rc.local
さて、このコマンドを実行したとき、既存ファイルである /etc/rc.local がテキストエディタ mousepad で開かれます。そうなった方は先に進んで構いません。
しかし、2024年11月以降の OS では、ファイル /etc/rc.local が削除され存在しないため、mousepad は空白の状態で開きます。そうなった場合、一旦 mousepad を閉じ、以下の3コマンドを順に実行することにより、新たにファイル /etc/rc.local を作成しましょう。パスワードの入力を求められたら、入力してEnterキーを押してください。
wget https://raw.githubusercontent.com/neuralassembly/raspi/refs/heads/master/rc.local

chmod a+x rc.local

sudo mv rc.local /etc
この3コマンドを実行してファイル /etc/rc.local を作成したら、上記の mousepad で /etc/rc.local を開くコマンドを実行し、以下に進みましょう。

さて、デジタル温度計の自動実行のために /etc/rc.local の「exit 0」の行の上に記すべきコマンドは以下の通りです。末尾の「&」も忘れずにコピーしましょう。
python3 /home/pi/07-03-LCD-temp.py &
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「python3 /home/kanamaru/07-03-LCD-temp.py &」となる、ということです。

また、サンプルファイルを bluebacks ディレクトリに展開した方の場合、記入する行は以下です。
python3 /home/pi/bluebacks/07-03-LCD-temp.py &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

読者の方々の声

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









2023年3月29日水曜日

書籍で用いたコマンドおよび補足情報(Pi Zero~Pi 4までの古い情報)

より新しい情報

Raspberry Pi 5 が海外で発表され、それに対応した OS Bookworm がリリースされるに伴い、本ページの内容は古くなっています。下記の新しいページをご覧ください。 以下は、それ以前の古い情報を残しておいたものです。

サンプルプログラムと回路配線図について

サンプルプログラム、回路配線図、応用PDFは下記のリンクからダウンロードしてください。 回路配線図の PDF と応用PDF は Raspberry Pi 上のブラウザでも見られますが、ブラウザ上の「↓」(ダウンロード)ボタンでダウンロードし、ファイルマネージャーで PDF ファイルを右クリックし「アプリケーションで開く」→「アクセサリ」→「ドキュメントビューア」などで開いてもよいでしょう。
「選択したアプリケーションをこのファイルタイプのデフォルトのアクションとする」にチェックを入れればそのアプリケーションで開くのがデフォルト動作となります。

本ページで表示するコマンドの利用方法

本ページには、本書の演習を実行するために必要なコマンドを全て記し、さらに、本書への補足情報を記していきます。コマンドを本ページからコピーして実行することにより、書き写すことによるミスの恐れがなく確実に実行できます。

本ページのコマンドをコピーにより活用するためには、まずRaspberry Pi上のブラウザ(Chromium)で本ページを開きます。

そして、コピーしたいコマンドをマウスでなぞり色を反転してください。その状態からそのコマンドをコピーするには下記の二つの方法のうちどちらかを実行してください。
  • 色を反転した領域をマウスで右クリックして「コピー」を選択する
  • キーボードの「Ctrl」キーを押しながら「c」キーを押す(Ctrl-c)
そして、コピーされたコマンドをターミナルソフトウェアに貼り付けるには、下記の三つの方法のうちどれかを実行してください。
  • LXTerminalのメニューから「編集」→「貼り付け」を選択する
  • LXTerminal上でキーボードの「Ctrl」キーと「Shift」キーを押しながら「v」キーを押す(Ctrl+Shift+v)
  • LXTerminal上でマウスのホイールを押し込む(ただし、この方法は正確には「コピーされた文字を貼り付ける」のではなく「マウスで色が反転された文字を貼り付ける」という動作になります)
いずれかの方法でLXTerminalにコマンドが貼り付けられたら、そのままキーボードの「Enter」キーを押せばコマンドが実行されます。

なお、複数のコマンドが複数行にわたって連続して書かれている場合、コピー、貼り付け、実行はコマンド一つごとに行ってください。

2章

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

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

p.33, microSDカードの容量について

書籍では、容量が16GB以上のmicroSDカードを推奨しました。しかし、2023年10月にリリースされたOSでは、16GBでは容量が足りなくなることを確認しています。容量が32GB以上のmicroSDカードを用意して下さい。

p.49, Raspberry Pi Zero W 系の機種に対する周辺機器の取り付け

Raspberry Pi Zero W 系の機種へ周辺機器を取り付けて電源を入れる方法は以下のページをご覧ください。

3章

p.65, 秋月電子通商のパーツセット

本書用の秋月電子通商のパーツセットは、以下のリンク先で購入できます。

5章

p.128, Bookworm (Raspberry Pi OS 2023-10-10 以降) および Bullseye (Raspberry Pi OS 2021-10-30 以降) でのカメラの利用について

Raspberry Pi OS 2023-10-10 からはじまったバージョン Bookworm および
Raspberry Pi OS 2021-10-30 からはじまったバージョン Bullseye では
カメラモジュールの利用方法に大きな変更が加えられ、libcamera というライブラリを用いるようになりました。 これは、本書でカメラを用いるプログラムは、そのままでは動かなくなるということを意味します。

ただし、Bullseye では「Legacy Camera」という、これまでと互換性のあるカメラの利用方法が可能になっています。この Lecgacy Camera を用いれば本書でカメラを用いるプログラムはそのまま動作しますが、 残念ながら Bookworm では Legacy Camera は削除されてしまいました。

以上を踏まえて現状をカメラの利用方法について整理すると、以下のようになります。将来を見据えると、最新の OS で「本書の演習を picamera2 (libcamera) で実行する方法」を使っていただくのが良いのではないかと思います。

32-bit 版 および 64-bit 版 Bookworm および Bullseye本書の演習を picamera2 (libcamera) で実行する方法」で配布しているサンプルファイルを利用する。なお、2023年1月に発売された Camera Module v.3 はこの手法でしか使えません。
32-bit 版 BullseyeLegacy Cameraモードを有効にした上で、本書付属のサンプルファイルをそのまま用いる。これが一番簡単。
64-bit 版 BullseyeLegacy Cameraモードを有効にした上で、「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイルを利用する

さて、上記の方法のうち、Bullseye で Legacy Camera モードを有効にする方法を用いる場合は、以下の方法で「Legacy Camera」のサポートを有効にする必要があります(デフォルトは無効です)。

ターミナルを開いて以下の手順に従うことで、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」キーを押す
以上で、Legacy Camera モードが有効になりますので、あとは上の表に従ってプログラムを利用してください。

p.129, Raspberry Pi Zero WH にカメラモジュールを取り付ける方法

Raspberry Pi Zero WH にカメラモジュールを取り付ける方法以下のページをご覧ください。

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

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

p.132, mplayer のインスト―ルコマンド

以下のコマンドは、インストール可能なソフトウェアのリストを更新します。
sudo apt update
以下のコマンドで、mplayerをインストールします。
sudo apt install mplayer
途中で「続行しますか?」や「検証なしにこれらのパッケージをインストールしますか?」と質問された場合、それぞれで[y]をタイプしたあと[Enter]キーを押して続行しましょう。

p.133, mplayer の実行コマンド

プログラムの存在するディレクトリ(フォルダ)で以下のコマンドを実行すると、test.mp3 というサンプル音声を再生することができます。音が鳴らない場合は引き続き以下もお読みください。
mplayer test.mp3
なお、サンプルプログラムを bluebacks ディレクトリ(フォルダ)に保存した場合は、上記コマンドを実行する前に以下のコマンドを実行して bluebacks ディレクトリ内に移動する必要があります。
cd bluebacks

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

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

<2023-10-10版以降の Raspberry Pi OS をご利用の場合(Bookworm)>

もし、デフォルトでピンジャックから音が出ていない場合、以下の指示に従ってください。なお、raspi-config コマンドを実行中は、キーボードの Esc キーが「戻る」に対応しますので、困ったら Esc キーを何度か押してみると良いでしょう。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く
  2. キーボードの「↓」キーを五回押し、「6 Advanced Options」にフォーカスを合わせる
  3. キーボードの「Enter」キーを押し、「6 Advanced Options」に入る
  4. キーボードの「↓」キーを六回押し、「A7 Audio Config」にフォーカスを合わせる
  5. キーボードの「Enter」キーを押し、「A7 Audio Config」に入る
  6. キーボードの「上」キーを一回押し、「1 PulseAudio」にフォーカスを合わせる
  7. キーボードの「Enter」キーを押し、「1 PulseAudio」を選択する
  8. キーボードの「Enter」キーを押し、「了解」を選択する
  9. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  10. キーボードの「Enter」キーを押すと、再起動され設定が有効になる


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

2020-12-02版およびそれ以降の Raspberry Pi OS をご利用で、なおかつイヤフォンジャックから音が鳴らない場合、raspi-configというコマンドで音声の出力先をイヤフォンジャックに切り替えます。 以下の手順に従ってください。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く
  2. キーボードの「Enter」キーを押し、「1 System Options」に入る
  3. キーボードの「↓」キーを一回押し、「S2 Audio」にフォーカスを合わせる
  4. キーボードの「Enter」キーを押し、「S2 Audio」の設定画面に入る
  5. キーボードの「↓」キーを一回押し、「1 Headphones」にフォーカスを合わせる
  6. キーボードの「Enter」キーを押し、「1 Headphones」を選択する
  7. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  8. キーボードの「Enter」キーを押し、raspi-config の設定画面を終了する

以上で、下記コマンドで
mplayer test.mp3
イヤフォンジャックから音声が出るようになります。

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

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

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

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

p.134, 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、13行目が以下の状態になっているものです。
            args = ['mplayer', 'test.mp3']
            #args = ['mplayer', '-ao', 'alsa:device=hw=1,0', '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、13行目に以下の行が見つかります。
            args = ['mplayer', 'test.mp3']
            #args = ['mplayer', '-ao', 'alsa:device=hw=1,0', 'test.mp3']
一つ目の行が実際に実行される行であり、二つ目の行は「#」があるので無効な行です。これを、以下のように「#」の有無が逆になるよう編集してファイルを保存してください。
            #args = ['mplayer', 'test.mp3']
            args = ['mplayer', '-ao', 'alsa:device=hw=1,0', 'test.mp3']
以上により、2020-5-27版および2020-8-20版の Raspberry Pi OS で 05-05-sw-mp3.py をイヤフォンジャックからの音声出力で実行できるようになります。

6章

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

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

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

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

7章

p.165, 接続されている I2C デバイスのアドレスを表示するコマンド

接続されている I2C デバイスのアドレスを表示するコマンドは以下の通りです。
i2cdetect -y 1

p.178, LCD へ文字を表示するプログラムの実行コマンド

ターミナルから 07-02-LCD.py を実行するコマンドは以下の通りです。付録C.3「タブによる補完」を学ぶと、ターミナルでのプログラムの実行が格段に楽になりますので興味のある方は参考にしてください。
python3 07-02-LCD.py
なお、サンプルプログラムを bluebacks ディレクトリに保存した場合は、上記コマンドを実行する前に以下のコマンドを実行して bluebacks ディレクトリ内に移動する必要があります。
cd bluebacks

p.179, LCD へ文字を表示するプログラムをコマンドライン引数つきで実行するコマンド

python3 07-02-LCD.py 'test'

8章

p.203, 用いるモータードライバ

本書では「DRV8835使用ステッピング&DCモータドライバモジュール」というモータードライバを用います。 本書のパーツセットを購入する際、本書の旧版用のパーツセットを購入してしまうと、 TA7291P というモータードライバが同梱されています。手元にこのモータードライバしかないという場合、 「旧版との違いについて」ページにある TA7291P 用の回路の配線図を参考にしてください。

なお、「DRV8835使用ステッピング&DCモータドライバモジュール」が品切れの場合でも、 このモータードライバが同梱された本書のパーツセットは入手可能なことがありますのでチェックしてみてください。

p.217, pigpiod の開始・停止・再起動コマンド

pigpiod の開始・停止・再起動コマンドはそれぞれ以下の通りですので、必要なコマンドをコピーしてご利用ください。
sudo service pigpiod start
sudo service pigpiod stop
sudo service pigpiod restart

9章

p.228, WebIOPi のインストールコマンド

WebIOPi のインストールコマンドは下記の通りです。全てのコマンドが長いので、一つずつ順番にコピーして確実に実行していきましょう。なおコピーの際、先頭の「(1)」、「(2)」などの数字を含めないよう注意してください。
(1) wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
(2) tar zxf WebIOPi-0.7.1.tar.gz
(3) cd WebIOPi-0.7.1/
(4) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi-pi2bplus.patch
(5) patch -p1 -i webiopi-pi2bplus.patch
(6) sudo ./setup.sh
なお、(6) のコマンド終了後に 「Do you want to access WebIOPi over Internet ? [y/n]」 という質問が出た場合は、キーボードの n をタイプして Enter するのでした(現在はこの質問は出ません)。

WebIOPi のインストールが終了したらそのまま以下の 2 つのコマンドも一つずつコピー&貼り付けにより確実に実行しましょう。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
(2) sudo mv webiopi.service /etc/systemd/system/
なお、一度 WebIOPi のインストールに失敗するなどして、もう一度やり直したい場合、以下の 2 つのコマンドをコピー&貼り付けにより順番に実行し、WebIOPi のファイルを一度削除してからインストールコマンドを再実行しましょう。
(1) sudo rm -f WebIOPi-0.7.1.tar.gz
(2) sudo rm -rf WebIOPi-0.7.1

p.230, WebIOPi の起動コマンド

sudo service webiopi start

p.230, WebIOPi が起動されているか確認するためのコマンド

ps ax |grep webiopi 

p.231, WebIOPi の停止コマンド

sudo service webiopi stop

p.232, WebIOPi を自動起動するためのコマンドとその解除コマンド

sudo systemctl enable webiopi
sudo systemctl disable webiopi

p.234, IP アドレスを調べるためのコマンド

ifconfig

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

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

以下の環境では、IPアドレスを用いずに「raspberrypi.local」のような名前でRaspberry Piにアクセスできます。
  • iTunesをインストールしたWindows(iTunesに含まれるBonjourというアプリケーションが必要なためです)
  • macOS
  • iPhoneやiPad
上記の環境では、ブラウザのアドレス欄に例えば下記のように入力すればIPアドレスを用いずにアクセスできます。
  • http://raspberrypi.local:8000/bb/01/
これは、Raspberry Pi OS上で動作しているavahiというソフトウェアの働きによります。

p.241, サンプルファイルを WebIOPi のフォルダにコピーするコマンド

このコマンドを実行し忘れると、9章、10章の演習を実行できませんので確実に実行しましょう。 2つのコマンドがありますので、 1つずつ順番に実行してください。サンプルファイルが存在するフォルダで実行する必要がありますので、サンプルファイルを bluebacks フォルダに保存した方は、事前に「cd bluebacks」コマンドを実行しておく必要があります。
sudo chown -R $USER /usr/share/webiopi/htdocs
cp -r 09-samples/bb /usr/share/webiopi/htdocs

p.242, WebIOPi の設定ファイルを管理者権限のテキストエディタで開くコマンド

sudo mousepad /etc/webiopi/config
なお、NOOBS 3.2.1 (Raspbian 2019-09-26) より前の OS ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo leafpad /etc/webiopi/config

p.243, WebIOPi のパスワードを変更するためのコマンド

sudo webiopi-passwd

p.245, WebIOPi の設定ファイルに追加する内容

こちらの記述も、間違えると9章、10章の演習を実行できません。具体的には、記述間違いにより WebIOPi が起動しなくなります。そのため、コピー&貼り付けにより確実に記述するのが良いでしょう。
myscript = /usr/share/webiopi/htdocs/bb/01/script.py
なお、この行を記述した後に WebIOPi が起動しなくなった場合、行の記述し間違い以外には、
  • サンプルファイルを /usr/share/webiopi/htdocs ディレクトリにコピーしていない
という原因もありえます。その場合、本ページ上部の「p.241, サンプルファイルを WebIOPi のフォルダにコピーするコマンド」を参照してください。

10章

p.287, /etc/rc.local を管理者権限のテキストエディタで開くコマンド

sudo mousepad /etc/rc.local
なお、NOOBS 3.2.1 (Raspbian 2019-09-26) より前の OS ではテキストエディタとしてleafpadではなくmousepadを用います。
sudo leafpad /etc/rc.local

p.287, IPアドレスをLCDに表示するために /etc/rc.local の「exit 0」の行の上に記入するコマンド

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.291, シャットダウンプログラムの自動実行のために /etc/rc.local の「exit 0」の行の上に記入するコマンド

末尾の「&」も忘れずにコピーしましょう。
python3 /home/pi/10-01-sw-poweroff.py &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

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

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

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

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

p.293, mjpg-streamer のインストールコマンド

mjpg-streamer のインストールコマンドは下記の通りです。全てのコマンドが長いので、一つずつ順番にコピーして確実に実行していきましょう。

ただし、Bookworm や Bullseye を用いていて、libcamera 対応の mjpg-streamer をインストールする場合は、ここで紹介するコマンドではなく、「本書の演習を picamera2 (libcamera) で実行する方法」で紹介するコマンドを実行する必要がありますのでページを移動してください。

さて、ここで紹介するコマンドは、libcamera を用いない場合すなわち、Bullseye の Legacy Camera モードでカメラを利用する場合です。 コピーの際、先頭の「(1)」、「(2)」などの数字を含めないよう注意してください。
(1) sudo apt update
(2) sudo apt install libjpeg-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
なお、古い OS を用いている方は、(2) のコマンドを
(2) sudo apt install libjpeg8-dev cmake
に変更しなければならいない場合があります。

また、 Bullseye を用いている方は、本ページの 「p.128, Bookworm (Raspberry Pi OS 2023-10-10 以降) および Bullseye (Raspberry Pi OS 2021-10-30 以降) でのカメラの利用について」の項目を参考に、Legacy Camera モードを有効にする必要がありますのでその点もご注意ください。 さらに、64-bit版 Bullseye を用いている方は、実行時に「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイル内の 10-02-stream-webcam.sh を用いる必要があります。

また、一度 mjpg-streamer のインストールに失敗するなどして、もう一度やり直したい場合、以下の 2 つのコマンドをコピー&貼り付けにより順番に実行し、mjpg-streamer のファイルを一度削除してからインストールコマンドを再実行しましょう。
(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf mjpg-streamer

p.294, mjpg-streamer の自動実行のために /etc/rc.local の「exit 0」の行の上に記入するコマンド

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.308, サンプルファイルの展開先(図B-4)

/home/pi/bluebacks
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上の記述の pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「/home/kanamaru/bluebacks」となる、ということです。

p.310, nano の設定ファイル .nanorc に記す内容

set tabsize "4"
set tabstospaces

p.310, vi の設定ファイル .vimrc に記す内容

set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4

p.312, 日本語入力ソフトウェアのインストールコマンド

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

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

そして、fcitx-mozc のインストールは下記のコマンドで行います。
sudo apt update

sudo apt install fcitx-mozc
再起動後、半角/全角キーや Ctrl+スペースキーにより、日本語入力をオンオフできます。

p.313, 日本語フォントのインストールコマンド

sudo apt install fonts-vlgothic

補足PDF

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

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

<2022年 9 月以降の Raspberry Pi OS をご利用の場合>

2022年 9 月以降の Raspberry Pi OS をご利用の場合、音声出力先がHDMI、イヤフォンジャックのどちらの場合も、ファイル 06-03-volume.py の変更が必要となります。

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

<2020-12-02版から 2022年春までの Raspberry Pi OS をご利用の場合>

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

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

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

2020-5-27版および2020-8-20版の Raspberry Pi OS で音声出力先をイヤフォンジャックにしたい場合、 書籍に記述してある通りに実行します。すなわち、音声再生コマンドを以下のコマンドに置き換えるのでした。
mplayer -ao alsa:device=hw=1,0 test.mp3
そして、06-03-volume.py に対しては、変更が必要となるのでした。Thonny でプログラムを開くと、57、58行目に以下の行が見つかります。
            args = ['amixer','-q','cset','numid=1',vol]
            #args = ['amixer','-q','-c1','cset','numid=1',vol]
一つ目の行が実際に実行される行であり、二つ目の行は「#」があるので無効な行です。これを、以下のように「#」の有無が逆になるよう編集してファイルを保存してください。
            #args = ['amixer','-q','cset','numid=1',vol]
            args = ['amixer','-q','-c1','cset','numid=1',vol]
以上で、06-03-volume.py によりボリュームを変更可能になります。

PDF 11, デジタル温度計の自動実行のために /etc/rc.local の「exit 0」の行の上に記すコマンド

末尾の「&」も忘れずにコピーしましょう。
python3 /home/pi/07-03-LCD-temp.py &
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「python3 /home/kanamaru/07-03-LCD-temp.py &」となる、ということです。

また、サンプルファイルを bluebacks ディレクトリに展開した方の場合、記入する行は以下です。
python3 /home/pi/bluebacks/07-03-LCD-temp.py &
上と同様に、「pi」は自分のユーザー名に置き換えてください。

PDF 29, DCモーターとサーボモーターを同時に使うとサーボモーターが不安定になる場合(図10-13)

図10-13のようにDCモーターとサーボモーターを同時に使うとサーボモーターが不安定になる場合があります。

これは、DCモーターの回転により発生するノイズがサーボモーターに影響を与えているためです。この問題に対する簡単な対処法は、下図のように サーボモーターの電源用配線を、Raspberry Pi の 5V ピンに接続することです。
このような接続をすると、今度はサーボモーターの負荷により Raspberry Pi が不安定になる可能性がありますが、以下の条件が満たされれば Raspberry Pi は安定して動作します。
  • サーボモーターにあまり大きな負荷をかけない。この演習の例では、Raspberry Pi のカメラモジュールという軽いものを動かすだけなので問題にはなりにくいでしょう
  • Raspberry Piを動作させるためのモバイルバッテリーの流せる電流量(「A」や「mA」で表示されているもの)が大きい。筆者は Raspberry Pi 4 に対して 3.0 A のバッテリーを用意しました
なお、この DC モーターによるノイズの問題に関しては、本書p.213の図8-12のように、DCモーターに3つのコンデンサを取り付けることでも改善が期待できます。

本書の演習を picamera2 (libcamera) で実行する方法

1. はじめに

注意!)本ページは、Pi 4 までに対応した古いサンプルファイル (raspi1a-sample.zip)を用いながら、picamera2 (libcamera) を利用する、という趣旨のページです。
本書の内容を Pi Zero ~ Pi 5 で実行する方法」に従って Pi 5 対応の新しいサンプルファイル(raspi1a-sample-pi5.zip)を用いる場合は本ページの内容は不要です。
ご注意ください。

Raspberry Pi OS 2023-10-10 からはじまったバージョン Bookworm および
Raspberry Pi OS 2021-10-30 からはじまったバージョン Bullseye では
カメラモジュールの利用方法に大きな変更が加えられ、libcamera というライブラリを用いるようになりました。 これは、本書でカメラを用いるプログラムがそのままでは動かなくなる、ということを意味します。

ただし、Bullseye では「Legacy Camera」という、これまでと互換性のあるカメラの利用方法が可能になっています。この Lecgacy Camera を用いれば本書でカメラを用いるプログラムはそのまま動作しますが、 残念ながら Bookworm では Legacy Camera モードは削除されてしまいました。

そこで、本ページでは、Legacy Camera に頼らずに最新の OS で本書の演習を実行する方法を解説します。具体的には、libcamera ライブラリを利用する Python モジュールである picamera2 を使ってプログラムを実行します。

本書のサンプルプログラムは picamera の旧バージョンを使って書かれていました。しかし、picamera2 は picamera とは互換性がありませんので、picamera2 用に書き換えられたプログラムをダウンロードして利用することになります。

2. 準備

サポート環境は Bookworm および Bullseye 以の 32-bit または 64-bit 版の Raspberry Pi OS です。Bullseye の場合は、なるべく新しいバージョンを用いましょう。そうしないと、本ページで利用する picamera2 (python3-picamera2) がインストールされていないことがあるからです。

また、Bullseye の場合、Legacy Camera モードは無効にしておく必要があります。OS インストール直後の状態ではあらかじめ無効になっています。一度有効にしてしまった方は、 ターミナルを開いて以下の手順に従うことで、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. 「Legacy camera support is disabled」と表示されるので、「了解」が選択された状態で「Enter」キーを押す
  6. raspi-configを起動した状態の画面に戻るので、「TAB」キーを二回クリックし、「Finish」を選択した状態で「Enter」キーを押す
  7. 再起動を促されるので、「はい」が選択された状態で「Enter」キーを押す
以上で、Legacy Camera モードが無効になります。

次に、お使いのカメラモジュールのバージョンを把握してください。2023年3月現在、Raspberry Pi のカメラモジュールにはバージョン1から3があり、下図のような外観をしています。
左から、バージョン1(基板が四角)、バージョン2(基板の角が丸く、レンズ周辺が黒)、バージョン3(基板の角が丸く、レンズ周辺が銀)です。基板上にもバージョンの記載がありますね。

後でダウンロードして頂くプログラムでは、このカメラモジュールのバージョンにより設定が変わる箇所があります。

3. ダウンロードと準備

それでは、picamera2 を利用するプログラムをダウンロードしましょう。

ターミナルを開き、本書のサンプルファイル(数字で始まるファイル)が存在するディレクトリに移動してください。 サンプルファイルをホームディレクトリに展開した方は移動の必要はありません。bluebacksディレクトリに展開した方は下記のコマンドを実行するのでした。
cd bluebacks
次に、下記の3つのコマンドを順に実行して、必要なファイルのダウンロードと展開を行ってください。コマンドはコピー&貼り付けで実行することを推奨します。展開後はダウンロードした圧縮ファイルは不要となるので削除しています。
wget https://github.com/neuralassembly/raspi/raw/master/raspi1a-picamera2.zip
unzip raspi1a-picamera2.zip
rm raspi1a-picamera2.zip
なお、展開されるファイルの名前は既存のサンプルファイルとは異なりますので、サンプルファイルが上書きされることはありません。展開により現れるファイルは下記の通りです。 mjpg-streamer を起動するためのスクリプトはシェルスクリプト (*.sh) から Python プログラムに変更されております(*.py)。
05-04-sw-camera-picamera2.py
10-02-stream-libcamera.py
以下では、これらのファイルの使い方を解説していきます。

4. 実行方法

さて、ダウンロードして展開したファイルの使い方を解説していきます。

p.128 タクトスイッチをカメラのシャッターに (5.6)

5.6章ではタクトスイッチをカメラのシャッターにするため、プログラムでカメラの映像を表示する必要がありました。

そのプログラムの picamera2 版が 05-04-sw-camera-picamera2.py です。このプログラムを実行するには、画像処理用のライブラリである OpenCV をインストールする必要があります。 ターミナルを起動して下記のコマンドを実行すると、OpenCV をインストールできます。
sudo apt update
sudo apt install python3-opencv
プログラムは、下記のコマンドで(または Thonny で)実行します。
python3 05-04-sw-camera-picamera2.py
なお、libcamera.so.0.X.X のバージョンに関するエラーが出た場合、下記のコマンドで libcamera-dev と python3-picamera2 を更新すると良いかもしれません。
sudo apt update
sudo apt install libcamera-dev python3-picamera2


p.292 mjpg-streamer の代替

映像配信用に、mjpg-streamer をインストールして用いますが、これも libcamera に対応したバージョンをインストールする必要があります。

libcamera 対応の mjpg-streamer は ArduCAM さんが公開していますが、これをこのまま用いると、 本書のように低解像度 (640x480) の映像を指定したときに以下の問題が現れます。
  • 映像の画質が非常に悪い (カメラモジュール v.1)
  • 映像の範囲が非常に狭い (カメラモジュール v.2 と 3)
この問題を筆者が独自に修整した版をここでは利用することにします。

まず、これまでダウンロードまたはインストールした mjpg-streamer を削除するため、ターミナルを起動して以下のコマンドを実行しましょう。
sudo rm -rf mjpg-streamer /opt/mjpg-streamer
そして、以下の手順で修整済の libcamera 対応 mjpg-streamer をインストールしましょう。
(1) sudo apt update
(2) sudo apt install libjpeg-dev cmake libcamera-dev
(3) git clone https://github.com/neuralpi/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
なお、OS として Bullseye やリリース直後の Bookworm をお使いの方は、上記の (5) で LibCamera.cpp のビルド中にエラーが起こると思います。その場合、エラーが出た状態から以下の 8 コマンドを一つずつ順に実行してください。この 8 コマンドが上記 (5)~(7) の代替、というイメージです。
rm -rf _build
mkdir _build
cd _build
cmake -DLIBCAMERA_USES_TRANSFORM=ON ..
cd ..
make
cd
sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
mjpg-streamerの実行用ファイルは、書籍から名称が変わり 10-02-stream-libcamera.py です。以前まではこのファイルは拡張子が sh のシェルスクリプトでしたが、Python によるスクリプトに変更しました。
理由は、libcamera 対応の mjpg-streamer が時折異常終了するため(典型的には 30 分おきくらい)、2秒おきに実行状況をチェックして必要に応じて mjpg-streamer を再起動させるためです。

このファイルを実行する前に、使用しているカメラモジュールの設定が必要な場合があります。 まず、mousepad で 10-02-stream-libcamera.py を開いてみましょう。7行目に下記の内容が見えるはずです。
opt_in = 'input_libcamera.so -camver 1 -fps 15 -r 640x480 -s 640x480'
このうち
-camver 1
の部分が、カメラモジュールのバージョンの数字を指定している部分です。お使いのカメラモジュールがバージョン 2 か 3 なら、この数字を 2 または 3 に変更し、それからファイルを上書き保存してください。

その後、mjpg-streamer の実行コマンドを /etc/rc.local の「exit 0」の行の上に追記することになります。記す内容は下記の通りです。
python3 /home/pi/10-02-stream-libcamera.py &
ただし、「pi」の部分は自分のユーザー名に変更する必要があります。

なお、サンプルファイルを bluebacks ディレクトリに展開したのならば、追記するコマンドは下記です。
python3 /home/pi/bluebacks/10-02-stream-libcamera.py &
こちらも、「pi」の部分は自分のユーザー名に変更する必要があります。

なお、最新の OS では、起動時に実行するコマンドを列挙するファイル /etc/rc.local は存在しません。その場合、上記の記述をする前に、以下のコマンドを実行して /etc/rc.local を作成しておいてください。
wget https://raw.githubusercontent.com/neuralassembly/raspi/refs/heads/master/rc.local

chmod a+x rc.local

sudo mv rc.local /etc
この3コマンドを実行してファイル /etc/rc.local を作成したら、書籍通りに /etc/rc.local へコマンドを追記できるようになります。

以上、お疲れさまでした。

2021年4月4日日曜日

本書の演習をウェブカメラで実行する方法

1. はじめに

本書では、Raspberry Piの公式カメラモジュールを用いた電子工作の例を2つだけ紹介しました。 タクトスイッチをカメラのシャッターにする例(第5章)およびキャタピラ式模型へカメラを搭載する例(第10章)です。

本ページでは、カメラモジュールではなく市販のウェブカメラで演習を行う方法を紹介します。こちらで動作検証したカメラはロジクール社のC270およびC920です。

本ページでは「××社の○○と言うカメラで動くか」という質問や「××社の○○と言うカメラで動くようにして欲しい」という要望には応えることができません。

カメラが異なることによるそのようなトラブルを避けるために、本書ではRaspberry Pi専用のカメラモジュールを使用する方針としたのだったからです。 本ページは上級者向けのサービスという位置づけとしますのでご理解ください。

ところで、2022年2月、Raspberry Pi OS Bullseye の 64-bit 版が正式にリリースされました。この 64-bit 版 OS では、本書でこれまで用いていたカメラモジュールを用いるプログラムをそのまま利用することができません。カメラモジュールの利用法が大きく変わったためです(32-bit 版 OS ではこれまでどおり利用可能)。 本ページの「本書の演習をウェブカメラで実行する方法」を用いると、「64-bit 版 OS でカメラモジュールを用いた演習」が可能になる、という副作用があります。ただし、この方法は準備がやや面倒ですので、カメラモジュールを用いた演習を行いたい方はこれまで通り 32-bit 版 OS の利用をお勧めします。

2. 手順

それではターミナルアプリケーションLXTerminalを開き、本書のサンプルファイル(「04-」などの数字で始まるファイル)が存在するディレクトリに移動してください。 サンプルファイルをユーザーpiのホームディレクトリに展開した方は移動の必要はありません。bluebacksディレクトリに展開した方は下記のコマンドを実行するのでした。
cd bluebacks
次に、下記の3つのコマンドを順に実行して、必要なファイルのダウンロードと展開を行ってください。コマンドはコピー&貼り付けで実行することを推奨します。展開後はダウンロードした圧縮ファイルは不要となるので削除しています。
wget https://github.com/neuralassembly/raspi/raw/master/raspi1a-webcam.zip
unzip raspi1a-webcam.zip
rm raspi1a-webcam.zip
なお、展開されるファイルの名前は既存のサンプルファイルとは異なりますので、サンプルファイルが上書きされることはありません。展開により現れるファイルは下記の通りです。ファイル名の末尾付近に全て「-webcam」がついていることに注意してください。
05-04-sw-camera-webcam.py
10-02-stream-webcam.sh
あとは、以下に従って実行します。

3. 実行

実行に関する注意を、いくつか例を挙げながら解説します。

例えば、本書 p.130 にファイル 05-04-sw-camera.py を実行するよう指示があります。
このファイル「05-04-sw-camera.py」に対しては、ウェブカメラ対応の代替ファイル「05-04-sw-camera-webcam.py」が存在します。 そのような場合、代替ファイルを実行して欲しい、ということです。

ただし、05-04-sw-camera-webcam.py の実行には、下記の2つのコマンドを順に実行することで OpenCV という画像処理ライブラリをインストールする必要があります。
sudo apt update

sudo apt install python3-opencv
同様に、p.294 には下記のコマンドを /etc/rc.local に記述するよう指示があります。
sh /home/pi/10-02-stream.sh
このファイル「10-02-stream.sh」に対しては、ウェブカメラ対応の代替ファイル「10-02-stream-webcam.sh」が存在します。 そのような場合、上記コマンドの代わりに下記のコマンドを記述して欲しい、ということです。
sh /home/pi/10-02-stream-webcam.sh
なお、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されています。そのため、上のコマンドの pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「sh /home/kanamaru/10-02-stream-webcam.sh」となります。

本書の電子工作パーツを Raspberry Pi Pico シリーズで利用する

本ページは下記に移動しました

ラズパイ5対応 カラー図解 最新 Raspberry Piで学ぶ電子工作

2020年6月11日木曜日

旧版との違いについて

はじめに

「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」は旧版である「 カラー図解 最新 Raspberry Piで学ぶ電子工作」の改訂版です。

旧版とどのような違いがあるのか、本ページでまとめます。

旧版との違い


全体に関して

全体的には最新のハードウェアと OS に対応したことが大きな変更点です。
  • Raspberry Pi 4 対応
  • 最新の OS (2020年5月リリースのRaspberry Pi OS) への対応

2章:インストール法

旧版では、OS のインストールに NOOBS というパッケージを用いた方法を解説しましたが、新版では 2020年2月に新たに公開された Raspberry Pi Imager というソフトウェアによるインストール法を解説しています。

NOOBS ではインストール作業が Raspberry Pi 上で行われたのですが、Raspberry Pi Imager では、皆さんが普段お使いの Windows か macOS でインストールが行われます。そのため、インストールの難易度が少し下がることが期待されます。

4章:用いる開発環境

旧版では IDLE という開発環境を紹介しましたが、新版では Thonny という開発環境を用いるよう変更しています。それに伴い、推奨する Python のバージョンは Python2 から Python3 となりました。ただし、旧版からどちらのバージョンの Python でも動作するように記述されていました。

5章:タクトスイッチで用いる GPIO

旧版では、タクトスイッチで用いる GPIO が以下のように章ごとに異なっていました。
  • 5章:GPIO 24
  • 10章 : GPIO 17
新版ではこれを以下のように統一しました。サンプルプログラムもそれに伴って変更されていますので、旧版用のプログラムを新版用に用いることのないようにしてください。
  • 5章、10章:GPIO 27
また、タクトスイッチをカメラシャッターにすサンプルプログラム 05-04-sw-camera.py では、よりカメラに似た挙動となるよう、実行中にプレビュー画面を表示するようにしました。
さらに、タクトスイッチで音声ファイルを再生するサンプルプログラム 05-05-sw-mp3.py では、音声再生用プログラムとして mpg321 から mplayer に変更しました。これによりプチプチいっていたノイズが消えます。

7章:小型LCD

I2C 接続する小型 LCD を「Raspberry Pi キャラクタ液晶ディスプレイモジュール完成品」に変更しました。

8章:DCモーター用のモータードライバ

旧版で用いたモータードライバ TA7291P は入手困難になりましたので、代替品として「DRV8835使用ステッピング&DCモータドライバモジュール」を用いるように回路を変更しました。このモータードライバを「電池ボックス 単3×3本 リード線・スイッチ付」により乾電池3本で用います。

8章:ハードウェアPWM信号を出力する方法

旧版ではサーボモーターを制御するためのハードウェアPWM信号の出力に WiringPi-Python を用いましたが、新版では pigpio というライブラリを用いるよう変更しました。

旧版用のパーツセットを購入してしまった場合

本書の旧版用のパーツセットを購入してしまった場合、モータードライバ TA7291P が同梱されています。手元にこのモータードライバしかない場合、以下に示す回路の配線図を代替として用いてください。

図8-11 を TA7291P で実現する方法


図9-12 を TA7291P で実現する方法


図10-4 を TA7291P で実現する方法


図10-6 を TA7291P で実現する方法


図10-13(応用PDF内) を TA7291P で実現する方法