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 に記入するコマンド

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 に記入するコマンド

末尾の「&」も忘れずにコピーしましょう。
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 に記入するコマンド

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 に記すコマンド

末尾の「&」も忘れずにコピーしましょう。
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つのコンデンサを取り付けることでも改善が期待できます。

12 件のコメント:

  1. p.228 Linuxコマンドの件

    ファイルのダウンロードをし直したら、解凍しました。最初のファイルは容量が25.3kしかなかったので、失敗してたのですね。
    追伸 サイトの時刻が12月30 2020になってます。2019ですね。

    返信削除
    返信
    1. ダウンロードに成功してのでしたら良かったです。なおページの日付の違いですが、「日時が新しいページほどサイト上部に表示される」という性質を意図的に使って、サイトの見た目を調整しているためです。よろしくお願いします

      削除
  2. WebIOPiについて教えてください。
    ● WebIOPi のインストールが終了したらそのまま以下の 2 つのコマンドも一つずつコピー&貼り付けにより確実に実行しましょう。
    (1) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
    (2) sudo mv webiopi.service /etc/systemd/system/
    とありますが、これはなぜ行う必要があるのでしょうか。

    ● ①を実行せずに、ホームディレクトリ上にできたWebIOPi-0.7.1を利用してテキストの課題を実行することは可能でしょうか。サンプルファイルをWebIOPi-0.7.1フォルダにコピーして実行できそうな気がするのですが、誤った考えでしょうか。そうすれば、サンプルファイルをわざわざ以下の操作で書き換えが面倒な場所へコピーする必要もないのではと思うのですが、ご教授よろしくお願いします。
    sudo chown -R $USER /usr/share/webiopi/htdocs
    cp -r 09-samples/bb /usr/share/webiopi/htdocs

    返信削除
    返信
    1. お問い合わせありがとうございます。
      二つの質問に対して回答します。

      ・webiopi.serviceの役割

      webiopi.serviceというファイルはテキストファイルで、
      中身をテキストエディタで見ることができます。

      このファイルは、
      「インストールした WebIOPi の実行などを、
      システム(OS)に管理させるために必要なもの」
      です。

      sudo service webiopi (start|stop)
      で WebIOPI を実行、終了したり、
      sudo systemctl enable webiopi
      で OS 起動時に WebIOPI を自動実行したり、ということが可能なのは
      このファイルがあるためです。

      ですから、本来は、WebIOPi のインストール時に
      一緒にインストールされるべきものです。

      しかし、このファイルは
      「昔の OS では不要だったが、 OS の更新により必要になったもの」
      ですので、後から手動でインストールしている、
      という経緯があります。
      (2つのコマンドで、ファイルのダウンロードおよび
      適切な場所への移動を行っています)



      ・サンプルファイルの移動をせずに済ませられないか?

      結論を先に書きますと、
      「不可能ではないが、手続きが面倒になりトラブルが増える。
      そのため、書籍で紹介する方法としては適切ではない」
      ということになります。

      少し長くなりますが、解説を書きます。

      WebIOPi は、簡易的な Web サーバーですので、
      「Web ページとして開いたときに開かれるフォルダ」が
      存在します。

      具体的に言えば、ブラウザで例えば「http://192.168.1.4:8000/」
      にアクセスしたときに開くフォルダということです。

      それは、デフォルトでは
      /usr/share/webiopi/htdocs/
      に設定されています。

      どこで設定されているかというと、
      /usr/local/lib/python3.9/dist-packages/WebIOPi-0.7.1-py3.9-linux-xxxxx.egg/webiopi/protocols/http.py
      です。「xxxxx」の部分は、用いている Raspberry Pi の種類で変わります。
      「python3.9」や「py3.9」の部分は用いている OS のバージョンにより変わるでしょう。

      その http.py の中に、

      WEBIOPI_DOCROOT = "/usr/share/webiopi/htdocs"

      という行があり、この行を書き換えれば、
      「http://192.168.1.4:8000/」にアクセスしたときに見えるフォルダが
      理論的には変わります。

      しかし、http.py の WEBIOPI_DOCROOT を書き換える方法には
      下記のように2つの厄介な点があります。

      (1) 厄介な点1
      まず、「サンプルファイルを移動させない」場合、
      WEBIOPI_DOCROOT を例えば下記のように書き換えることになるでしょう。

      WEBIOPI_DOCROOT = "/home/pi/bluebacks/09-samples"

      しかし、現在、Raspberry Pi ではユーザー pi は廃止されていますので、
      「/home/pi」の部分は人により異なった内容となります。
      例えば、私の場合は「/home/kanamaru」となります。

      これを読者の方に適切に判断させて書き換えさせるのは
      なかなか大変なことだと私は考えます。
      (http.py の中では /home/$USER のような記法は使えないはずです)

      (2) 厄介な点2

      デフォルトの WEBIOPI_DOCROOT である /usr/share/webiopi/htdocs には、
      いくつかの重要なファイルが存在します。それが存在しないと
      WebIOPI は正常に動作しないでしょう。

      ですから、
      「/usr/share/webiopi/htdocs に存在するファイルやフォルダを、
      (例えば) /home/pi/bluebacks/09-samples にコピー」
      する必要があります。

      それはそれでやはり厄介なことです。
      なぜなら、ユーザー名 pi の部分は人により異なりますし、
      bluebacks フォルダを作成しているかどうかも人により異なるからです。

      以上から、書籍では「/usr/share/webiopi/htdocs にサンプルファイルを移動する」
      という方針をとっています。

      以上です。

      削除
    2. もしかしたらこういう回答を期待されているのかもしれない、
      と思いましたのでもう一点コメントを追加します。

      本書では「サンプルファイルを /usr/share/webiopi/htdocs/ にコピーする」
      という方針をとっています。

      一方、サンプルファイルをコピーした後、そのサンプルファイルに
      簡単にアクセスする方法はあります。

      サンプルファイルを /usr/share/webiopi/htdocs/ にコピーするという
      手続きを済ませた後、以下のコマンドをターミナルで実行します。
      (コピー&貼り付けでの実行が安全です)

      ln -s /usr/share/webiopi/htdocs/bb ~/web

      このコマンドは、ホームディレクトリに「web」という
      シンボリックリンク(Windows で言うショートカット)を
      作成します。

      これにより、web フォルダにアクセスすることで、
      コピー後のサンプルファイルを簡単に開くことができます。

      以上です。

      削除
  3.  sudo service webiopi startを実行している途中(コマンドプロンプトが表示される前)にキーボードを誤って押してしまって,何らかの文字が入力された状態で実行されてしまってWebIOPi が起動しなくなってしまいました。
     sudo service webiopi stopしてから再度sudo service webiopi startを実行してもps ax |grep webiopiで確認するのですが,起動していません。
     また,再度webiopiをインストールし直してみました(一度 WebIOPi のインストールに失敗するなどして、もう一度やり直したい場合、以下の 2 つのコマンドをコピー&貼り付けにより順番に実行し、WebIOPi のファイルを一度削除してからインストールコマンドを再実行しましょう。(1) sudo rm -f WebIOPi-0.7.1.tar.gz (2) sudo rm -rf WebIOPi-0.7.1を実行)が,起動しなくなってしましました。
     解決策はないでしょうか。よろしくお願いいたします。

    返信削除
    返信
    1. 書いていただいた内容から何が起こっているのかを判断するのは難しいです。
      実行した内容に対してどのようなエラーメッセージなどが出たか
      を記していただければ何か出掛かりになるかもしれません。

      なお、書いていただいた内容だけから判断すると、
      「元々インストールに失敗しているのでは?」
      という気が少しします。

      現時点から、WebIOPi を再インストールする方法を
      全て書き出すと以下のようになります。
      (すべて本ページ上部からの再掲です)

      まず、以下の2コマンドでインストールに使ったファイルを一旦削除します。
      (先頭の「(1)」や「(2)」はコマンドに含めないでください)

      (1) sudo rm -f WebIOPi-0.7.1.tar.gz
      (2) sudo rm -rf WebIOPi-0.7.1

      次に、以下の6コマンドで、WebIOPi をインストールします。

      (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 します。
      (これは書籍に書いてあります)

      なお、上記6コマンドに対する注意点は、以下の2つです。
      ・Raspberry Pi がインターネットに接続されていること
      ・(1) と (4) のコマンドは長いので、途中で切れないようにすること

      最後に、以下の2コマンドで、WebIOPi の起動用ファイルを設置します。

      (1) wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
      (2) sudo mv webiopi.service /etc/systemd/system/

      やはり、(1) は長いコマンドなので、途中で切れないようにしてください。

      以上でインストールは成功するはずです。

      なお、念のためですが、下記の点にも注意してください。

      ・上記のコマンドは全て Raspberry Pi 状で実行すること
       (たまにmacOSのターミナルで実行する方がいらっしゃいます)
      ・上記のコマンドは Raspberry Pi の Full インストール版で実行すること
       (私は Full インストール版でしか動作検証していません)

      以上です。

      削除
    2.  どうやらWebIOPi の設定ファイルに追加指定したscript.pyに誤りがあり,自動起動させたときに,WebIOPi が起動しなくなってしまったようです。
       どうもありがとうございました。

      削除
  4. bb/08の課題を自動実行させるために
    ①sudo systemctl enable pigpiod
     sudo systemctl enable webiopi
    を実行し,
    ②/etc/rc.localの exit 0の前に以下のコマンドを追加記入して
    sh /home/pi/bluebacks/10-02-stream.sh
    python3 /home/pi/bluebacks/07-02-LCD.py $_IP
    python3 /home/pi/bluebacks/10-01-sw-poweroff.py &
    ③再起動する
    のですが,サーボモータが全く動きません。pigpiodもwebiopiも両方起動しています。カメラの映像も映りますし,DCモータも動くのですが,どうしてかわからず困っています。使用しているOSはBuster5.10.17-v7l+です。よろしくお願いいたします。

    返信削除
    返信
    1. 実現しようとしているのは
      10.5 章 (PDF26) のカメラ付きキャタピラ式模型
      ということで良いでしょうか?

      また、文面から、以下のことは既に実現できていると思ってよいでしょうか?

      ・LCDにIPアドレスが表示される
      ・ブラウザにカメラ映像が表示され、キャタピラ式模型の前後・旋回動作ができる
       (ブラウザのアドレスは http://x.x.x.x:8000/bb/08/ )

      仮にそうだとして、その状況でサーボモーターだけが動かない場合、
      以下をチェックしてみてください。

      (1) 図10-13 の回路が正しいか
       (PWM0(18) が使われているか、上下の「-」ラインがワイヤで結ばれているか)

      (2) /etc/webiopi の設定が正しいか
       (myscript は /usr/share/webiopi/htdocs/bb/08/script.py に設定)

      特に、(2) で、「08」のディレクトリに設定することに注意してください。
      ここが「05」や「06」のままだと、「DCモーターは動くがサーボモーターは動かない」
      状態になります。

      以上、よろしくお願いします。

      削除
  5. bb/08のキャタピラ式模型プログラムでキャタピラの左右の速度差を補正するには,どうすればよいのか教えてください。javascriptプログラムで補正ができるようになっていると思うのですが,よろしくお願いいたします。

    返信削除
    返信
    1. javascript の書き換えは本書のサポート外の内容ですので、
      以下の内容を試す場合は自己責任でお願いします。

      まず、前提となる知識として、デフォルトでの動作を記します。

      操作用のタッチエリアの中央部に、模型の前進・後退を制御できるエリアがあります。
      このエリアは、タッチエリア全体を見たとき中央3分の1のサイズです。
      後の説明の都合上、このエリアを「前進後退エリア」と呼ぶことにします。

      さて、この「前進後退エリア」は、その左端付近、中央付近、右端付近のどのあたりを
      タッチ(マウスクリック)するかで、
      左右のキャタピラの回転速度が変わるようになっています。

      具体的には下記のようになっています。

      左端付近:
       左のキャタピラ:0.8の速さ
       右のキャタピラ:1.2の速さ
       →若干左にそれながら前進

      中央付近:
       左のキャタピラ:1.0の速さ
       右のキャタピラ:1.0の速さ
       →前進

      右端付近:
       左のキャタピラ:1.2の速さ
       右のキャタピラ:0.8の速さ
       →若干右にそれながら前進

      正確には、1.0 を超えた値は後で 1.0 に補正されるのですが、
      話がややこしくなるのでその点は以下では省略して解説します。

      javascript.js を変更する前に、まずここまでの挙動を確認しておいてください。

      もしこの挙動で納得のいく動作をするのでしたら、
      javascript.js を変更しない方が無難です。

      さて、以上の動作は、「左右のモーターが同じ速さで回転する」ことを
      前提としています。
      何らかの理由で左右のモーターの速さが異なるのでしたら、
      「左のキャタピラ:1.0の速さ、右のキャタピラ:1.0の速さ」に
      設定しても、直進はせずどちらかの方向にそれていくでしょう。

      以下はそれを補正する方法を記します。
      上で記したように、ここから先はサポート外ですのでご注意ください。

      なお、編集するのは /usr/share/webiopi/htdocs/bb/08
      以下にある javascript.js です。
      このファイルの181~182行目および274~275行目に
      以下の2行があります。

      var modL = (1.2-0.8)*(touch.pageX - mTouchOffsetLeft - mTouchWidth/3)/(mTouchWidth/3) + 0.8;
      var modR = (0.8-1.2)*(touch.pageX - mTouchOffsetLeft - mTouchWidth/3)/(mTouchWidth/3) + 1.2;

      181~182行目はタッチ動作に関する設定、
      274~275行目はマウスクリック動作に関する設定です。

      この2行に含まれる、0.8 および 1.2 の数字を適切に変更すれば、
      左右のキャタピラの回転のバランスを変えることができます。

      例えば、
      var modL の方だけ
      0.8 → 0.7 (2か所)
      1.2 → 1.1 (1か所)
      の変更を行うと、
      下記のように、左のキャタピラの回転が弱くなり、
      結果的に右のキャタピラを相対的に強めに回す設定になります。

      左端付近:
       左のキャタピラ:0.7の速さ
       右のキャタピラ:1.2の速さ

      中央付近:
       左のキャタピラ:0.9の速さ
       右のキャタピラ:1.0の速さ

      右端付近:
       左のキャタピラ:1.1の速さ
       右のキャタピラ:0.8の速さ

      逆に、
      var modR の方だけ
      0.8 → 0.7 (1か所)
      1.2 → 1.1 (2か所)
      の変更を行うと、左のキャタピラを相対的に強めに回す設定となります。

      なお、上記は「modL と modR のどちらかを小さくする」という方針で記しています。
      「どちらかを大きくする」方針にはしないのが無難です。
      なぜなら、上で補足したように、「1.0 を超えた値は後で 1.0 に補正される」
      からです。

      解説は以上です。ファイルを変更する際は、
      ・/usr/share/webiopi/htdocs/bb 以下にあるファイルを編集すること
      ・181~182行目と274~275行目のうち、適切な方を編集すること
      ・modL と modR の適切な方を編集すること
      に注意してください。

      以上、サポート外の内容ですので、これ以上の内容の解説はご容赦ください。

      削除