2024年2月13日火曜日

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

はじめに

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

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

その他の補足情報

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

Raspberry Pi Zero W 系を利用したい方はこちらをご覧ください。
2021年1月に発表された Raspberry Pi Pico で電子工作してみたい方は以下のページをご覧ください。

職場や学校などで、プロキシ(Proxy)環境下で Raspberry Pi を使う方は以下のページをご覧ください。

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

感想やレビューなど

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

本書の内容を 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 で実行できるようになります。

対象とする 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
2023/12/5Raspberry Pi OS 2023-10-10

なお、それ以前の古い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 をインストールする必要があります。
sudo apt update
sudp apt 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 のインスト―ルコマンド

以下のコマンドは、インストール可能なソフトウェアのリストを更新します。
sudo apt update
以下のコマンドで、mplayerをインストールします。
sudo apt 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 」コマンドを実行し、設定画面を開く
  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 」コマンドを実行し、設定画面を開く
  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
イヤフォンジャックから音声が出るようになります。

6章

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

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

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

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

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

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

7章

全般:7章のプログラム

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

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

I2Cを利用するためには、以下の手順で設定アプリケーションのインターフェイスにおける「I2C」を有効にする必要があります。
  1. デスクトップ左上のメニューから、「設定」→「Raspberry Piの設定」を起動
  2. 「インターフェイス」タブをクリック
  3. 「I2C」のスイッチをONにして有効化する
なお、Pi 5で kernel 6.6.20 をお使いの場合、本書で紹介する LCD を用いるときにエラーが頻発する問題があります。
お使いのカーネルのバージョンは、ターミナルで「uname -r」を実行することで調べられます。
kernel 6.1.0 や、将来リリースされるだろう kernel 6.6.25 以降ではこの問題は起こらないはずです。
Pi 5 で kernel 6.6.20 を使う方向けに、この問題が起こる頻度を緩和する方法を記します。次の設定を行ってください。
まず、ターミナルを起動し、次のコマンドを実行することで、設定ファイル/boot/firmware/config.txtを管理者権限のテキストエディタで開きましょう。
sudo mousepad /boot/firmware/config.txt
ファイルが開いたら、ファイルの末尾までスクロールし、末尾に次の1行を追記しましょう。
dtparam=i2c_baudrate=50000
ファイルを保存したら、テキストエディタを閉じ、Raspberry Piを再起動してください。 この設定は、I2Cの動作速度をデフォルトの100kHzから50kHzに落とす働きがあります。

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/config.txt に一行追加する設定を行ってください。

まず、管理者権限の mousepad で /boot/config.txt を編集用に開きましょう。下記のコマンドで行うのでした。
sudo mousepad /boot/config.txt
なお、将来は /boot/config.txt は /boot/firmware/config.txt に変更されるようです。その場合コマンドは以下のようになるでしょう。
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 も利用可能です。

なお、Pi 5 をお使いで、アップデートした OS や 2024年3月リリースの OS で kernel 6.6.20 をお使いの方は、ハードウェアPWMを使うプログラムが動作しなくなっています。この問題は kernel 6.6.21 以降で修正される予定ですが、
それまでは、サーボモーターを用いた演習を後回しにするか、2023年12月にリリースされたOSをアップデートせずに用いるのが良いでしょう。

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 をインストールします。
sudo apt update
sudo apt 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/config.txt (将来は /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 ファイル。ページの見た目を決めている

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 ディレクトリに管理者権限でコピーします。
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 を管理者権限のテキストエディタで開くコマンドは下記の通りです。
sudo mousepad /etc/rc.local

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

IPアドレスをLCDに表示するために /etc/rc.local に記入するコマンドは下記の通りです。
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 へ記入する行は下記です。末尾の「&」も忘れずにコピーしましょう。
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個)」などを購入して交換しましょう。
  4. ギアボックスで空回りしているシャフトがないかチェック:ギアボックスの作成の際、イモネジを六角レンチで締めてシャフトを固定している部分があります。そこが緩んで空回りしていないかチェックしましょう。
  5. ブレッドボードのチェック:ブレッドボードを長くつかっていると、なんらかの理由でブレッドボード内部の抵抗が大きくなりモーターがあまり回転しなくなることがあります。筆者は複数回そのような経験をしています。安価なもので良いのでテスターを購入すると内部の抵抗の大きさをチェックできます。内部の抵抗が大きく計測されたブレッドボードは消耗品と考えて捨ててしまった方がよいでしょう。
  6. モーターのチェック:上のどの問題にも該当しなかった場合、モーターに問題がある可能性があります。新品の「AO-1001 FA-130タイプノーマルモーター」を購入して交換してみるのも手です。
  7. モータードライバーのチェック:上のどの問題にも該当しなかった場合、モータードライバに問題がある可能性があります。新品のモータードライバーを購入して交換してみるのも手です。

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

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

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

p.293 で紹介した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


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 に記すことになります。記す内容は下記の通りです。
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/config.txt (将来は /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 install fcitx-mozc
再起動後、半角/全角キーや Ctrl+スペースキーにより、日本語入力をオンオフできます。

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

sudo apt install fonts-vlgothic

補足PDF



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

末尾の「&」も忘れずにコピーしましょう。
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」は自分のユーザー名に置き換えてください。

読者の方々の声

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