2024年2月16日金曜日

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

はじめに

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

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

以下では、Raspberry PiのOSの更新に伴う内容の変更や、正誤情報などを記していきます。

補足情報一覧


追加コンテンツ


知っておくと便利な設定など


感想など



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

本書の演習を Raspberry Pi 5 で行いたいという場合、本書の最新版の解説サイトである下記をご覧ください。Raspberry Pi 5 対応のサンプルファイルをダウンロードできます。 もちろん、Pi 5 以前のモデルでも動作します。 Raspberry Pi 5 登場以前の本書の補足ページは下記に残されていますが、今後需要は減っていくでしょう。

読者の方々の声

発売以来、たくさんの方にご愛読頂きありがとうございます。
ここでは、読者の方々のレビューなどをご紹介したいと思います。

ご利用に感謝

         書籍をご紹介頂いています。
         AD変換やI2Cの演習を試されています。

         電子工作の参考書としてご利用頂いております。

         電子工作セミナーの教材としてご利用頂いています。

         ロボット制作教室の教材としてご利用頂いています。

         参考書としてご紹介頂いています。

          AD変換のプログラムをErlang環境に移植されています。

          手作り目覚まし時計を作る際にタクトスイッチを利用されています。

          本書をベースに様々な電子工作の例を試されており、解説も充実しています。

          遠隔操作できるカメラを作成する際、10章や追加コンテンツの内容の一部を
          参考にして頂いております。

          人感センサーを利用する際に6章のA/D変換の章を参考にして頂いております。

          Raspberry Pi 2で本書の内容を順に試されています。
          動作確認がとれている範囲は問題なく動いているようで安心しました。

          フィッシャーテクニックのブロックキットで作成した自走ロボットに
          10章のカメラつき回路を搭載してブラウザ経由で操作されています。

          LED点滅から順にプログラムの改造を加えながら試されていて参考になります。

レビュー

2020年12月30日水曜日

本書発売後の追加情報(Pi Zero~Pi 4までの古い情報)

より新しい情報

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

はじめに

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

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

電子書籍版について

2016年7月、本書の改訂版が発売されるに伴い、kindle版を始めとする電子書籍は
  • 新規の購入はできないが、過去に購入した方はダウンロードできる
という状態に移行しています。新規に電子書籍版を購入されたいという方は、改訂版のものをお求めください。

回路配線図について

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


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

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


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

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

第2章

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

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

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

p.39:NOOBSのバージョン

本書はNOOBS 1.3.10をベースに解説しておりますが、発売以来下記のようにNOOBSの新バージョンがリリースされています。

2014/12/24NOOBS 1.3.11Wheezy
2015/2/2NOOBS 1.3.12
2015/2/18NOOBS 1.4.0
2015/5/11NOOBS 1.4.1
2015/9/24NOOBS 1.4.2Jessie
2015/11/21NOOBS 1.5.0
2016/2/3NOOBS 1.6.0
2016/2/9NOOBS 1.7.0
2016/2/26NOOBS 1.8.0
2016/3/18NOOBS 1.9.0
2016/5/10NOOBS 1.9.1
2016/5/27NOOBS 1.9.2
2016/9/23NOOBS 1.9.3
2016/10/5NOOBS 2.0.0
2016/11/29NOOBS 2.1.0
2017/2/27NOOBS 2.2.0
2017/3/3NOOBS 2.3.0
2017/4/10NOOBS 2.4.0
2017/6/23NOOBS 2.4.1
2017/7/5NOOBS 2.4.2
2017/8/17NOOBS 2.4.3Stretch
2017/9/8NOOBS 2.4.4
2017/11/29NOOBS 2.4.5
2018/3/14NOOBS 2.6.0
2018/3/14NOOBS 2.7.0
2018/4/18NOOBS 2.8.0
2018/4/24NOOBS 2.8.1
2018/6/27NOOBS 2.8.2
2018/10/11NOOBS 2.9.0
2018/11/15NOOBS 3.0.0
2019/4/8NOOBS 3.0.1
2019/6/24NOOBS 3.1.1Buster
2019/7/10NOOBS 3.2.0
2019/9/30NOOBS 3.2.1
2020/2/7NOOBS 3.3.0
2020/2/14NOOBS 3.3.1
2020/5/27Raspberry Pi OS 2020-05-27
2020/8/20Raspberry Pi OS 2020-08-20
2020/12/2Raspberry Pi OS 2020-12-02
2021/1/11Raspberry Pi OS 2021-01-11
2021/3/4Raspberry Pi OS 2021-03-04
2021/5/7Raspberry Pi OS 2021-05-07
2021/10/30Raspberry Pi OS 2021-10-30Bullseye
2022/1/28Raspberry Pi OS 2022-01-28
2022/4/4Raspberry Pi OS 2022-04-04
2022/9/6Raspberry Pi OS 2022-09-06
2022/9/22Raspberry Pi OS 2022-09-22
2023/2/21Raspberry Pi OS 2023-02-21
2023/5/4Raspberry Pi OS 2023-05-3
2023/10/10Raspberry Pi OS 2023-10-10Bookworm
2023/12/5Raspberry Pi OS 2023-12-5

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

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

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


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

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

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

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

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

第3章

p.64:Arduino Sidekick Basic Kitについて

電子工作に必要なパーツを集めたセットの1つとして、本書ではArduino Sidekick Basic Kitを紹介しましたが、この商品は現在千石電商オンラインショップやamazonではバージョン2に切り替わっています。
旧バージョンとの違いは以下の通りのようですが、本書のために用いる際には影響のない変更です。
  • ジャンプワイヤの本数が減っている(50本→25本)
  • LEDの個数が減っている(10個→5個)
  • 抵抗早見表が付属しない
  • 収納用ケース(4仕切り)の追加
  • RGBフルカラーLEDが8mmサイズの大きなものになり、光拡散キャップが不要なパッケージに変更されている
電子工作のセットはこれ以外にも様々なものが販売されております。ここで紹介した「Arduino Sidekick Basic Kit」も含め、どのセットを購入するにせよ本書で必要なパーツが全て揃うわけではないことはあらかじめご了承ください。

さらに下記のような注意がありますので御注意ください。

  • 含まれる半固定抵抗において、値が大きくなる回転の向きが旧版と異なる
    これについては、本ページ「p.145:半固定抵抗の回転の向きについて」の注意をご覧ください
  • 含まれるRGBフルカラーLEDが共通カソード(カソードコモン)である
    共通カソード(カソードコモン)用の回路を作成した上で、書籍の注意に基づきサンプルファイルを編集して用いる必要があります。

p.64:非公認の電子工作キットについて

Amazonにて、本書の名前を冠したキットが販売されているのですが、私や出版社が関わった製品ではありませんし、本書の方法では動作しない電子工作パーツが含まれているようです。本ページではそれらの電子工作パーツのサポートは行えませんので御了承ください。

p.70:5Vピン、3.3Vピン、GPIOに流すことのできる電流について

本書では、Raspberry Pi Model Bの5Vピン、3.3Vピン、GPIOに流せる電流を解説していますが、Model B+以降は5Vから3.3Vへ降圧するレギュレータの効率が上がったことと、Raspberry Pi自体の消費電力が変更になった影響で、このデータが大きく変わっています。 公式情報ではありませんが、インターネット上の議論に基づいたデータを下記にまとめます。参考にしたサイトを表の下に記します。

5Vピン3.3VピンGPIO(1本)GPIO(トータル)
Model BマイクロUSBの電源が流すことのできる電流 - 700mA50mA8mA (注)50mA
Model B+マイクロUSBの電源が流すことのできる電流 - 600mA1000mA - 600mA = 400mA (程度)
Raspberry Pi 2マイクロUSBの電源が流すことのできる電流 - 900mA1000mA - 900mA = 100mA (程度)
(注)デフォルトでの値です。こちらを参考に設定するとこの上限を2mAから16mAまで変化させられるようですが私は未確認です。

参考サイト

p.75:Raspberry Pi Model B+/Raspberry Pi 2/Raspberry Pi 3のGPIOについて

図3-12で解説したように、Model BとModel B+はGPIOポートのピン数が異なり、上から13段目まで(ピン1からピン26まで)が両モデルで共通となっています。本書ではこの共通部分のみを使うようにしておりますので、本書の回路は全てModel BとModel B+の両方で動作します。また、Raspberry Pi 2とRaspberry Pi 3はModel B+と同じピン配置なので、Model B+と同様に回路を作成します。

ただし、ピンを使う際にその「ピンの数え方」に注意しないとModel B+/Raspberry Pi 2/Raspberry Pi 3で間違った回路を作成してしまう可能性がありますので、その点について補足したいと思います。

下図をご覧ください。この図は「Model B」と「Model B+/Raspberry Pi 2/Raspberry Pi 3」におけるGPIO 25の数え方を解説したものです。図のように、GPIO 25を「図の上から(ピン番号の小さいほうから)11番目」のように数えることで、本書の回路図を「Model B+/Raspberry Pi 2/Raspberry Pi 3」でも用いることができます。88ページの図4-4をModel B+/Raspberry Pi 2/Raspberry Pi 3のGPIOポートを用いた図に変更したものが下図の(C)ですので参考にしてください。

また、公式サポートページにて回路の配線図(PDF)の提供を開始しました。「Model B用(26ピン)」と「Model B+およびRaspberry Pi 2用(40ピン)」がありますので、ディスプレイで閲覧するか、印刷するなどしてご活用ください。


第4章

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

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

Thonny Python IDEはpython3用のプログラムを実行するための環境です。本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。 Python 3用ツールのインストール法は本ページで解説されておりますので注意して本ページをお読みください。

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


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

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


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

p.89:Python2とPython3について

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

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

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

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

p.89:NOOBS 2.8.2 (Raspbian 2018-06-27) 以降でのIDLEの通常起動について

NOOBS 2.8.2 (Raspbian 2018-06-27) から、デスクトップのメニューから開発環境IDLEの項目が削除されています。そのため、その代替としてThonny Python IDEを用いる方法を上で解説しました。通常はこのThonny Python IDEを用いてください。
ここでは、それでも敢えてIDLEを用いたいという方のためにその方法を解説します。

ターミナル LXTerminal を起動し、下記の2つのコマンドを順に実行してください。Python 3 用のIDLEがインストールされます。
sudo apt update
sudo apt install idle-python3.7
Python 3用のIDLEの実行は、やはりターミナルから下記のコマンドにより行います。
idle-python3.7 &
を実行します。

p.89:Jessie 以降における、アプリケーション実行時の管理者権限について

Raspbian Wheezyでは、PythonでGPIOにアクセスするプログラムを実行するためには管理者権限が必要でした。すなわち、本書でプログラムを実行する際、
  • ターミナルで「sudo idle &」を実行して起動したIDLEからプログラムを実行
  • ターミナルで「sudo python プログラムファイル名」を実行して起動
のどちらかの方法を用いる場合がほとんどでした。
Raspbian Jessie 以降は、PythonでGPIOにアクセスするプログラムでも、管理者権限が不要になりました。

第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:ファイルマネージャから画像ファイルを開く方法

カメラで撮影した画像をファイルマネージャーから開く方法が解説されていますが、Raspbian のバージョンによっては、画像閲覧用のアプリケーションが起動せず、「ファイル"JPEG画像"を開くアプリケーションを選択してください」というウインドウが開く場合があります。その場合、そのウインドウ上で「アクセサリ」→「イメージビューワ」を選択してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第6章

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

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

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


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

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

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

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


第7章

p.158:電子工作キットの温度センサとLCDモジュールについて

Amazonにて、本書の名前を冠したキットが販売されているのですが、私や出版社が関わった製品ではありませんのでご注意ください。
 さらに、そのキットには本書のプログラムでは動作しない温度センサとLCDモジュールが含まれているようです(「DS18B20使用温度センサ」および「SainSmart IIC/I2C/TWI 16*02 LCD液晶 モジュール」)。この温度センサはI2C通信を行なうセンサではなく、LCDモジュールは本書使用のものと仕様が異なります。そのため、本ページではそれらのパーツのサポートは行えませんので御了承ください。

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

LCDを用いたプログラムを実行するためには、Raspberry PiからLCDが認識されていることが必要です。LCDが認識されているかどうかのチェック方法は、書籍に記さなかったのですが、ここで紹介します。

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

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

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


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

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

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

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

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

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

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


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

他に用いることのできるLCDとしては、例えばストロベリーリナックスで取り扱われている以下のものがあります。どちらも16文字x2行ですので、本書で取り扱ったものの倍の文字数を表示できます。
下図は、
  • python3 bb2-04-03-lcd-practice.py 'Hello, Raspberry Pi!'
を実行した様子です。現在のRaspbianでは管理者権限を表す「sudo」は不要です。

ただし、この2つのLCDでは、本書p.115図4-11の文字コード表の一番左の列(0x06~0x0f)の文字は表示されないようです。ご了承ください。

これらのLCDが本書のLCDと共通でのプログラムで利用可能な理由は、コントローラーICとしてST7032iと呼ばれるものが共通で用いられているためです。そのため、書籍で紹介したLCDにあったロットによる問題が将来起こらないとは限りません。その場合はやはり上記の暫定的対処法を試すことになるでしょう。


なお、回路の接続は本書のものとは少し異なります。上図のどちらの液晶を用いる場合も下図を参考にしてください。


プログラムは、一行だけ変更が必要です。LCDを用いるプログラムには下記のようにLCDの文字数を設定している行があります。これらは8x2の液晶であることを示しています。
chars_per_line = 8
display_lines = 2
これを下記のように変更して保存すれば完了です。
chars_per_line = 16
display_lines = 2
この変更をしなければ、単に8x2の液晶として動作します。

また、「I2C低電圧キャラクタ液晶モジュール(16x2行)」(小さいほう)を用いるとデフォルトでは文字がやや薄くなります。2019/6/25に更新されたサンプルファイルでは文字の濃さを調整できるよう変更されていますので、必要に応じて raspi2-sample.zip をダウンロードしなおし、展開した上で利用してください。

更新されたそれぞれのファイルで下記の行を見つけ、contrastの値を40に変更し保存してください。必要に応じて、上で記した「chars_per_line」を16にする変更も行なってください。
contrast = 32 # 0から63のコントラスト。通常は32、文字が薄いときは40を推奨

p.159:以前のLCDを購入した場合の暫定的な対処法

<LCD対処法:予備知識>

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

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

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

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


一般に、プルアップ抵抗はI2C接続時に必要になるものですが、Raspberry Pi内部に既にこのプルアップ抵抗が存在するので、LCDモジュールの基板上では必ずしもこのプルアップ抵抗の有効化は必要ありませんでした。そのため、7章において正常動作するLCDでは「PUなし」、「PUあり」のどちらでもLCDは動作しました。

既に述べたように、「PUなし」から「PUあり」の状態にするには、凸と凹の電極にまたがるようにはんだを盛ります。逆に、「PUあり」から「PUなし」の状態に戻すには、上図(C)のように、はんだ吸い取り線を用いてPU部からはんだを除去するのが簡単です。

以上の予備知識のもと、どなたにでも容易に実現可能な暫定的対処法と、上級者向けの正式な対処法との2つを紹介します。

<LCD対処法:暫定版>

まずは、どなたにでも容易に実現可能な暫定的対処法を紹介しましょう。
Raspberry Piから認識されない完成品LCD(AQM0802)に対して、回路に下図のようにSDA部からGNDの間に抵抗を追加すると、動作を確認することができました。

抵抗の大きさRとしては、下記の範囲のものが有効でした。
  • PUありの場合のR:2kΩ
  • PUなしの場合のR:2kΩ~4.7kΩ程度
  • ただし、8章でサーボドライバとともに用いる場合「PUなし、R=2kΩ」のみ。サーボドライバにプルアップ抵抗が含まれており、実質「PUあり」と同じ状態になるためです。
後に述べるように、私はPUなし(PU部のはんだをはんだ吸い取り線で除去した状態)で4.7kΩの抵抗を用いることを推奨します。4.7kΩでI2C通信のエラーの頻度が高い場合は3.9kΩが良いかもしれません。抵抗は例えば、2kΩ3.9kΩ4.7kΩなどが購入できます。

なお、この方法を用いると、3.3VピンからGNDまで1.8kΩ+RkΩの抵抗で接続されることになるので、約0.5mAから1.0mA程度の電流が流れ続けます(1.8kΩの抵抗は、Raspberry Pi本体内部にあるI2C用のプルアップ抵抗です)。この程度の大きさの電流がRaspberry Piに問題を起こすことはないと思われますが、本来不要な電流が流れる手法であることは注意しておいてください。なお、比較のために記すと、2章でLEDを点灯したときに流れる電流は約5mAです。

以上で、暫定的対処法の解説は終わりますが、以下、動作しない完成品LCDで何が起こっているか、そしてこの方法により何が起こるのかを簡単に記しておきます。

まず、「動作しない完成品LCD」の何が問題かを記したのが下図です。I2C通信時にLCDから Raspberry Piに対してACK信号と呼ばれるLOW信号を出力する場面があります。正常動作するLCDでは、このACK信号は約0.8Vとなっています。これはこのLCDの仕様の範囲内の動作です。しかし、「動作しない完成品LCD」ではこれが約1.2Vとなってしまっています。これをRaspberry PiがLOWと認識できないため、処理がそこで止まっているようです。


これに対し、暫定的な対応法ではこのACK信号を下図のように約1.0Vまで引き下げています。ただし、下図に示されている通り、3.3VであるべきHIGH信号まで下げてしまいますので、下げすぎると、Rapberry PiからHIGH信号も認識できなくなってしまいます。図を見るとわかる通り、「PUあり、R=2kΩ」ではHIGHが2Vまで下がっており、HIGHと認識されなくなる直前だろうと思います。これが「PUなし、R=4.7kΩ」を推奨する理由です。
 

ただし、いずれにせよこれはあくまで暫定的な対処法です。正常なI2C通信では必要のない対処法ですのでご注意ください。

<LCD対処法:正式版(ただし上級者向け)>

最後に、LCD(AQM0802)を用いるための正式な方法を紹介します。ただし、これは「表面実装用」と呼ばれるタイプのチップをはんだづけする必要があり、かなりの上級者向けとなりますので、自信のある方のみお試しください。

この方法には、I2CバスリピーターPCA9515ADと呼ばれるチップが必要となります。これをブレッドボードで用いるためには、下記の3点が必要となり、下図のようにはんだづけする必要があります。

なお、上図の「EN」はENABLEの略で、利用時はHIGH(3.3V)に接続します。

PCA9515ADはリンク先の写真で分かる通り、表面実装用と呼ばれるタイプの部品であり、これを基板上にはんだづけするには、やや高度な技術が必要です。そのため、この方法は上級者向けと言えるでしょう。

表面実装用の部品のはんだづけする方法は、例えば下記のYouTube動画が参考になるでしょう。
さらに、この動画にあるように、ピンセットやフラックスもあると良いでしょう。例えば下記のようなものです。
このPCA9515を利用するための概念図が下図です。


この小型液晶AQM0802の新しいロットを使う上で問題になるのが、Raspberry Pi上にあるプルアップ抵抗1.8kΩが小さすぎることです。新しいロットのAQM0802を使う上では10kΩが推奨されています。しかし、Raspberry Piのプルアップ抵抗は基板上に固定されており、そのため、プルアップ抵抗を小さくすることは容易なものの(接続するプルアップ抵抗の数を増やせばよい)、大きくすることは簡単ではありません。

そこで、上図のようにPCA9515を用いてRaspberry Piおよび温度センサ側と小型液晶側を切り離し、左側をプルアップ抵抗1.8kΩで、右側をプルアップ抵抗10kΩで利用できるようにするというわけです。

そのためには、ブレッドボード上で下図のような回路を組みます。図を簡単にするために、小型液晶側のプルアップ抵抗は、小型液晶モジュールのプルアップ抵抗PUを用いることにしました。上の解説「<LCD対処法:予備知識>」を参考に、2箇所のPUに半田を盛り、基板上のプルアップ抵抗を有効にしてください。


7章全般:LCDにカタカナを表示する

本書で用いたLCD、および上で紹介した16x2のLCDはどちらもカタカナを表示することができます。 07-02-LCD.pyを開いて見ると、末尾に下記の記述があります。
    # アルファベットと記号は「''」でくくってそのまま表示可能
    write_string('Hello World')

    # カタカナや特殊記号は文字コードを一文字ずつ入力
    # 以下は「ラズベリー パイ」と表示する例
    #s = chr(0xd7)+chr(0xbd)+chr(0xde)+chr(0xcd)+chr(0xde)+chr(0xd8)+chr(0xb0)+' '+chr(0xca)+chr(0xdf)+chr(0xb2)
    #write_string(s)
このうち、「write_string('Hello World')」の先頭に「#」を記述して無効にし、 「s = chr(0xd7)+(略)」と「write_string(s)」の先頭の「#」を削除して有効にします。これを保存して実行すれば、下図のように「ラズベリー パイ」と表示されます。


上のコードでは「ch(0xd7)」が「ラ」を表しており、それを「+」記号でつないでいます。空白文字だけは英数字と同じ扱いで「' '」と表記しています。カタカナと記号の対応表は下記になります。色々試して見ると面白いでしょう。

ただし、上で紹介したストロベリーリナックスの2つのLCDでは、下記対応表の一番左の列の文字(0x06~0x0f)は表示されないようです。ご了承ください。


第8章

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

6章の注釈でも既に述べたように、「半固定抵抗の3.3VピンとGNDへの接続を入れ替える」ことで、AD変換の値が大きくなる回転の向きを逆にすることができます。

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


p.181:RGBフルカラーLEDについて

Arduino Sidekick Basic Kitに含まれるRGBフルカラーLEDは共通アノード(アノードコモン)、秋月電子通商のパーツセットに含まれるRGBフルカラーLEDは共通カソード(カソードコモン)です。

共通カソード(カソードコモン)のRGBフルカラーLEDを用いる場合、書籍とサンプルファイルの指示に従い、プログラムを編集してから用いる必要がありますので、御注意ください。

回路の配線も異なりますので書籍中の図をよく見て配線しましょう。

p.181:LED光拡散キャップ白(5mm)

8章および9章で5mmサイズのRGBフルカラーLEDを使う際、光拡散キャップを取り付けると色が見やすくなるため使用を推奨しました。

上で紹介した「Arduino Sidekick Basic Kit バージョン2」を購入された場合、含まれるRGBカラーLEDは光拡散キャップが不要なパッケージに変更されておりますので、使用する必要はありません。

下記の写真は、左から順に「Arduino Sidekick Basic Kit バージョン1に含まれるRGBフルカラーLED(端子カット済)」、「光拡散キャップ」、「Arduino Sidekick Basic Kit バージョン2に含まれるRGBフルカラーLED」です。


p.204:DCモーターのノイズについて

書籍でも触れたように、DCモーターを動かすと大きなノイズが発生します。Wifiを使ってRaspberry Piをネットワークに接続している場合、 ある条件が重なったときにDCモーターのノイズによりWifiの接続が切れてしまう現象が見られました。USB機器の相性に起因するようですが、起こる確率はあまり高くないように思います。もし運悪くそのような状況に遭遇した場合、下記の対策を検討してみてください。
  1. Raspberry Piに接続してるUSB機器、典型的にはキーボードとマウスを別のものに変更する
  2. 書籍p.212の図8-12のように、DCモーターにコンデンサを3個とりつける(端子間1個、端子-外装間2個)。書籍p.212の図8-12をカラーで再掲しますので、参考にしてみてください。
筆者の場合、上記2つのどちらの方法でも解決できました。なお、このDCモーターのノイズの問題は9.6章および10章でも起こりえますので注意してください。


p.181:サーボモーター

本書の発売後、秋月電子通商では安価なサーボモーターとして下記のものも取り扱われるようになりました。
amazonではSG-90の複数個セットも取り扱われております。
このSG-90やSG92Rを用いて本書の演習を行うこともできるのですが、このような安価なサーボは故障や動作不良もあり得ると考え、1個ではなく複数個購入すべきだと思います。そういう意味では、これらのサーボモーターはトラブルがあった時に対処できる上級者向けの商品であると個人的には思います。

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

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


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



p.212:wiringPiを用いたハードウェアPWM信号によるサーボモーターの制御

本書ではwiringPiを用いてGPIO 18に対して精度の高いハードウェアPWM信号を出力し、サーボモーター1個の角度を制御しました。

Raspberry Pi Model BではハードウェアPWM信号はGPIO 18からの1つのみしか出力できなかったのですが、Raspberry Pi Model B+以降(Raspberry Pi 2 Model B含む)では、ハードウェアPWM信号を2つ出力できます。

下図のように、1つ目のPWM0はGPIO 18かGPIO 12のどちらかから、2つ目のPWM1はGPIO 13かGPIO 19のどちらかから出力できます。その方法は本書で解説した方法と同じですので試してみてください。


p.213:wiringPiのインストール

現在のRasbianでは、wiringPiのインストール作業は不要です。そのままこの下のWiringPi2-Pythonのインストールに進んでください。

p.214:WiringPi2-Pythonのインストール

p.214のWiringPi2-Pythonのインストールですが、やや長いコマンドが多いので、コピー&貼り付けできる形で以下に再掲します。必要に応じて活用してください。なお、(3)のダウンロードサイトは、書籍に記したサイトでは更新が終了されたので変更してあります。
(2020.10.23: python3用のインストール法のみを記すようにしました)
(1) $ cd
(2) $ sudo apt update
(3) $ sudo apt install python3-dev python3-setuptools
(4) $ git clone https://github.com/neuralassembly/WiringPi2-Python.git
(5) $ cd WiringPi2-Python
(6) $ sudo python3 setup.py install

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

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

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

第9章

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

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

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

コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「$」の記号はコピーする必要はありませんのでご注意ください。
$ wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
$ tar zxf WebIOPi-0.7.1.tar.gz
$ cd WebIOPi-0.7.1/
$ wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi-pi2bplus.patch
$ patch -p1 -i webiopi-pi2bplus.patch
$ sudo ./setup.sh
最後に、下記のような質問が出た場合は、キーボードの n をタイプして Enter するのでした(現在はこの質問は出ません)。
Do you want to access WebIOPi over Internet ? [y/n]


そして、以下のコマンドを実行し、起動用ファイルを適切な位置に配置します。このコマンドもやや長いので、コピー&貼り付けにより実行しましょう。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi2/master/webiopi.service
$ sudo mv webiopi.service /etc/systemd/system/
以上の方法に従わずにそのままWebIOPi 0.7.1をインストールすると、下図のようにデモアプリケーションであるGPIO Headerにおいて、「IN/OUT」などの文字が現れるべきボタンが灰色のみのボタンとなってしまいます(書籍237ページ図9-6に対応)。

その場合、WebIOPiを再インストールしてみましょう。そのためには、まずユーザーpiのホームディレクトリ(フォルダ)で下記の2つのコマンドを一つずつ実行し、過去のインストール時のファイルを一旦削除します。
$ sudo rm -f WebIOPi-0.7.1.tar.gz
$ sudo rm -rf WebIOPi-0.7.1/
その後、WebIOPi 0.7.1を再インストールしてみてください。なお、この「ボタンに文字がなく灰色一色になる」状況を解決しないと、9章の残りの内容は正常に動作しませんのでご注意ください。

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


p.229:WebIOPiについての各種コマンド

WebIOPiの起動/停止、自動起動/自動起動の停止、などのコマンドは現在では書籍と異なっています。下記の通りですので、コピーするなどしてご活用ください。

WebIOPiの起動コマンド
sudo service webiopi start
WebIOPiの停止コマンド
sudo service webiopi stop
WebIOPiが動作確認しているか確認するコマンド
ps ax |grep webiopi 
WebIOPiの自動起動
sudo systemctl enable webiopi
WebIOPiの自動起動の停止
sudo systemctl disable webiopi

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

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

このIPアドレスの指定を簡単化する方法としては、以下の2つが考えられます。
  • Raspberry PiのIPアドレスを固定し、毎回同じアドレスの指定で済むようにする
  • IPアドレスではなく、「raspberrypi.local」のような名前で指定する
1つ目については、解説がやや長くなるため「Raspberry PiのIPアドレスを固定する」というページにまとめましたので興味のある方は御覧ください。

以下では、2つめの「raspberrypi.local」のような名前で指定する方法について記します

NOOBS 1.4.2以降に含まれるRaspbian(Jessie, Stretch, Buster)では、IPアドレスを用いずに「raspberrypi.local」のような名前でRaspberry Piにアクセスできます。ただし、この方法でRaspberry Piにアクセスできるのは下記のみです。
  • iTunesをインストールしたWindows(iTunesに含まれるBonjourというアプリケーションが必要なためです。ただし、Windows 10にApril 2018 Updateを適用すると、この方法が一時的に使えなくなります。WindowsからiTunesとBonjourを一旦削除してからiTunesをインストールしなおすとまた使えるようになるようです)
  • Mac OS X
  • iPhoneやiPad
Androidスマートフォンでは現時点ではこの方法ではRasbperry Piにはアクセスできないように思われます。

上記の条件が満たされた場合、方法は簡単で、ブラウザのアドレス欄に例えば下記のように入力すればOKです。
  • http://raspberrypi.local:8000/bb/01/
すなわち、IPアドレス「192.168.1.3」などの代わりに「raspberrypi.local」という記法が使える、というわけです。これは、Jessie、Stretch、Buster上で動作しているavahiというソフトウェアの働きによります。

なお、Jessie以前のWheezyで同じことを実現したい場合、LXTerminalを起動して下記のようにavahi-daemonをインストールする必要があります。
  • sudo apt update
  • sudo apt install avahi-daemon
インストール後に再起動すると、自動的にavahiが起動し、「raspberrypi.local」でのアクセスが可能になります。

なお、同じネットワーク内でavahiが起動したRaspberry Piが2台以上あると、同じ名前「raspberrypi」のマシンが2つ以上ある状態になり、名前の衝突が起こります。その場合、2台目以降のRaspberry Piには「raspberrypi-2.local」などの名前が自動的につけられますのでご注意ください。名前が衝突しないよう、あらかじめ「raspberrypi」というマシン名を変更しておく方法もありますが、ここでは省略します。

p.240:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー

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

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

9.3以降の演習は設定ファイル /etc/webiopi/config の[SCRIPT]セクションに、Pythonスクリプトの場所を示す行を記す必要があります。 記述に間違いがあるとWebIOPiが起動しませんので、コピーできるように正しい記述を以下に記しておきます。
myscript = /usr/share/webiopi/htdocs/bb/01/script.py
なお、この行を記述した後に WebIOPi が起動しなくなった場合、行の記述し間違い以外には、
  • サンプルファイルを /usr/share/webiopi/htdocs ディレクトリにコピーしていない
という原因もありえます。その場合、本ページ上部の「p.240:WebIOPi用サンプルファイルの/usr/share/webiopi/htdocsディレクトリへのコピー」を参照してください。

p.251:Python3でI2Cを用いる方法について

現在のRaspbianでは、インストール作業なしにPython3でI2Cを用いることができるようになっています。そのため、サンプルファイルに含まれていた 09-samples/smbusmodule.c はいずれ削除する予定です。

p.255:デジタル温度計のloop関数について

9.4節において、WebIOPiを用いて温度計の値をブラウザから読み取る方法を紹介しました。書籍のように、手動でWebIOPiを起動する場合は問題ないのですが、10章のキャタピラ式模型のようにWebIOPiを自動起動する場合、9.4節のプログラムがうまく動作せず温度がブラウザで読み取れないことがわかりました。

これは、WebIOPiのloop関数が、手動起動した場合は問題なく動作するものの、自動起動ではうまく機能しないことが原因のようです。

修正プログラムは以下の手順で導入できますので、デジタル温度計プログラムを自動起動で実行したい方は試してみてください。WebIOPiのloop関数を用いず、スレッドという機能で温度を読み取るように変更しています。もちろん、自動起動ではなく手動起動でも動作します。
$ sudo rm -r /usr/share/webiopi/htdocs/bb/02
$ rm -r 02
$ rm 02.zip
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/02.zip
$ unzip 02.zip
$ mv 02 /usr/share/webiopi/htdocs/bb/
2番目と3番目の命令では既存のディレクトリとファイルの削除を行っており、「そのようなファイルは存在しない」というメッセージが出る場合がありますが気にしなくとも構いません。

p.256:RGBフルカラーLEDについて

Arduino Sidekick Basic Kitに含まれるRGBフルカラーLEDは共通アノード(アノードコモン)、秋月電子通商のパーツセットに含まれるRGBフルカラーLEDは共通カソード(カソードコモン)です。

共通カソード(カソードコモン)のRGBフルカラーLEDを用いる場合、書籍とサンプルファイルの指示に従い、プログラムを編集してから用いる必要がありますので、御注意ください。

回路の配線も異なりますので書籍中の図をよく見て配線しましょう。

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

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



p.262:DCモーターのノイズについて

もし、DCモーターを動かしたときにWifiの接続が切れるような現象が見られた場合、本ページ上部の「p.204:DCモーターのノイズについて」にある対策を御覧ください。

10章

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

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


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




p.276:DCモーターのノイズについて

もし、DCモーターを動かしたときにWifiの接続が切れるような現象が見られた場合、本ページ上部の「p.204:DCモーターのノイズについて」にある対策を御覧ください。

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

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

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

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

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

しかし、「p.232:IPアドレスでのURLの指定について」の注意で紹介しましたように、avahiという仕組みを用いると、IPアドレスではなく、下記のようなアドレスでのアクセスが可能になるのでした。
  • http://raspberrypi.local:8000/bb/05/
これを用いると、回路からLCDが不要になるなどのメリットがあります。具体的には下記の通りです。
  • p.286の図10-6からLCDを取り外して良い
  • p.288での/etc/rc.localへの「python3 /home/pi/07-02-LCD.py $_IP &」の記述が不要
さらに、Raspberry PiのIPアドレスを固定する、という方法でも、毎回IPアドレスを調べる必要がなくなりますね。こちらについては「Raspberry PiのIPアドレスを固定する」にまとめましたので、興味のある方は御覧ください。

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

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

起動時にLCDへIPアドレスを表示する方法を記しましたが、IPアドレスの表示に成功するのは、「Raspberry PiにIPアドレスが割り振られる」→「LCDにIPアドレスが表示される」という順番で処理が行なわれたときのみです。
ネットワーク環境や Raspbian のバージョンによっては、Raspberry PiにIPアドレスが割り振られるタイミングが遅く、LCDにIPアドレスが表示されない、ということがありました。その場合、LCDには「Raspberry Pi」と表示されます。

そのような問題に直面した場合、下記の2つの方法を試し、LCDにIPアドレスを表示するタイミングを遅らせてみましょう。

まず、Jessie 以降の Raspbian を用いている方向けの方法です。 Jessie以降に含まれる設定アプリケーションでは、下図(左)のように「Network at Boot」という項目があります。この「Wait for network」にチェックを入れて再起動すると、Raspberry Piのネットワークへの接続が完了してから起動が完了するようになります。その結果、LCDにIPアドレスが表示されるようになる、というわけです。

下図(右)のように以前からの設定アプリケーションraspi-configにも「Wait for Network at Boot」という項目が追加されており、「Slow Wait for network connection before completing boot」を選択することで、同様の効果が得られます。


次に、Raspbian Wheezy を用いている方向けの方法です。
/etc/rc.localの下記の位置に下記のように「sleep 10」と記入して、LCDへのIPアドレスの表示を10秒遅らせると、LCDへのIPアドレスの表示に成功することがあります。「10」という数字はLCDの表示を遅らせる秒数ですので、環境により適切な秒数に調節してください。
(略)
# By default this script does nothing.

sleep 10

# Print the IP address
(略)
ただし、こうするとRaspberry Piの起動が10秒遅くなることになりますので御了承ください。

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

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

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

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

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

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

p.292:mjpg-streamerインストール用コマンド

mjpg-streamerのインストールコマンドを全て書くと下記の通りです。長いコマンドが多いので一つずつコピーして実行しても良いでしょう。

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

さて、ここで紹介するコマンドは、libcamera を用いない場合(すなわち、Legacy Camera モードでカメラを利用する場合です。 コピーの際、行頭の「(1)」などの数字はコピーしないよう注意しましょう。
(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 で Legacy Camera モードを用いている方は、本ページの 「p.128, Bookworn (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のインストールに失敗し、何度も試行錯誤しているという方は、上記の7つのコマンドの実行前に、下記の2コマンドにより過去にインストールしたmjpg-streamerを一度削除した方が安全かもしれません。ターミナルLXTerminalを起動した直後の状態で順に実行してください。
(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf mjpg-streamer

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

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

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

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

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

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

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

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

(3') 補足ページ「p.292:mjpg-streamerのインストールコマンド」に掲載したのコマンドを
 正しく(コピーするなどして)実行したことを確認してください。
 /opt/mjpg-streamer/mjpg_streamer というファイルが存在すれば問題ないでしょう。
 一つ目の「mjpg-streamer」はディレクトリ名、二つ目の「mjpg-streamer」は
 ファイル名です。
 二つ目の「mjpg-streamer」が存在しなければインストールに失敗しています。

(4') mjpg-streamerの起動法は下記の2通りあります。
 (a) ターミナルで「sh 10-02-stream.sh」を実行する
 (b) /etc/rc.local に記述して自動起動する
 まずは(a)の手動での起動が成功するか確認しましょう。
 mjpg-streamerは起動済みだと思ったら、
 ターミナルで「ps ax | grep mjpg」と実行してそれを確認してみましょう。
 下記のように表示されれば起動に成功しています。細かな数字は人によって異なります。
 
 2393 pts/0 Sl 0:00 /opt/mjpg-streamer/mjpg_streamer -i input_raspicam.so
   -fps 15 -q 50 -x 640 -y 480 -o output_http.so -p 9000 -w /opt/mjpg-streamer/www
 2545 pts/0 S+ 0:00 grep --color=auto mjpg
 
 一方、下記のような表示しかなければ起動に失敗しています。
 ここまでの内容を見直す必要があります。
 
 2545 pts/0 S+ 0:00 grep --color=auto mjpg

(5')「適切なPCやスマートフォンなど」とは、本書図9-1に記されているように、
 Raspberry Piと同じネットワークに属しているPCやスマートフォンのことです。
 スマートフォンの場合は本書図9-1のようにWifiで
 Raspberry Piと同じネットワークに続している必要があります。
 自信がなければRaspberry PiのChromiumブラウザからアクセスするのが確実ですので、
 まずはRaspberry Piからのアクセスに成功することを目指しましょう。

(6') 図10-8のテスト用画面を確認するためにブラウザに記すアドレスは
  http://xxx.xxx.xxx.xxx:9000/ です。
 もちろん、「xxx.xxx.xxx.xxx」の部分はRaspberry Piに割り当てられているIPアドレスで
 読み替える必要があります。

p.296:誤字について

このページに下記の誤字があることをお知らせ頂きました。お知らせ頂きありがとうございました。
金属のビス
→
金属のビス

付録A

p.300:Wifi Config

現在のRaspbianでは、Wifiの設定をするための方法が下図のようにシンプルになり、さらに接続状況がひと目でわかるようになっています。


付録B

p.305:USBメモリの利用について

このページでは、USBメモリを用いて本書のサンプルファイルをRaspberry Piへコピーする方法を解説していますが、Raspbian が更新されGUIが大きく変更されたため、この部分の操作に少し変更があるので補足します。

まず、USBメモリをRaspberry Piにさすと、下図のようにファイルマネージャで開くかどうかの確認画面が現れます。ここでOKをクリックしてください。USBメモリの中身が見える状態でファイルマネージャが起動します。


USBメモリの中身をRaspberry Piにコピーする操作は書籍から変更ありません。

最後に、USBメモリをRaspberry Piから抜く操作です。Jessie 以降を用いている方は、下図のように画面右上に「安全な取り外し」に相当するボタンがありますので、それを押してからUSBメモリを抜くようにしましょう。Windowsなどと同じ手順ですね。



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

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



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

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

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

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

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

PDF10:spidevのインストールについて

公式サポートページでダウンロードできる追加PDFの内容についてです。spidevを用いてADコンバータから値を取得する方法を紹介しておりますが、 現在はspidevはデフォルトでRaspbianに含まれておりますので、インストール作業は必要ありません。

PDF11:spidevを用いてAD変換を行うプログラムについて

追加PDFでは、spidevとADコンバータMCP3208を用いてAD変換を行うプログラム06-04-spidev.pyを紹介しました。
kernel 4.9.43以降 (NOOBS 2.4.5 (Raspbian 2017-11-29) 以降) のRaspberry Piでは、執筆時の06-04-spidev.pyはそのままでは動作しません。具体的には、kernelの変更により、プログラム内で「spi.max_speed_hz = 1000000」のように最大周波数の設定が必要になったのです。

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

2016年4月18日月曜日

ディスプレイ・マウス・キーボードを接続せずにRaspberry Piを利用する

はじめに

Raspberry Piは名刺サイズの超小型コンピュータですが、ディスプレイを接続して利用するとRaspberry Piの省スペース性が犠牲になるという問題がありました。

それを解消する方法のひとつとして、本サイトでは「Raspberry Pi公式タッチディスプレイで本書の演習を実行する」というページにて、7インチの小型ディスプレイを用いる方法を紹介しました。

それでもRaspberry Piにキーボードやマウスを接続する必要はあり、ある程度のスペースが必要であることは変わりません。

そこで、本ページではタイトルにあります通り、「Raspberry Piにディスプレイ・マウス・キーボードを接続せずに利用する」ことを目指します。

具体的には、下記のように一つのネットワークにRaspberry PiとPCが属しており、PCからRaspberry Piを利用する、というスタイルになります。


この図だけ見ると、本書の9章や10章で行ったように「PCのブラウザからRaspberry Piの回路にアクセスする」方法とあまり変わらないように思えるかもしれません。

9章や10章と異なるのは、Raspberry Piにディスプレイ、マウス、キーボードを一切接続せず、「プログラムの作成」、「プログラムの実行」、「Raspberry Piのシャットダウン」などをすべてPCから行う、ということです。

この際、PCのデスクトップの外観は下図のようになります。右上のアプリケーションはTera TermというWindows用のターミナルアプリケーション、右下はRaspberry PiのターミナルアプリケーションであるLXTerminal、左はRaspberry PiのPython開発環境であるIDLEです。LXTerminalやIDLEがWindows上のウインドウとして表示されているのがポイントです。

以下、この動作を実現する方法を解説していきます。

なお、Windowsに対する解説を最初に行い、OS Xに対する解説はページ末尾で行います。


必要なツールのインストールと設定(Windows編)

上図の動作をWindowsで実現するためには、下記の2つのアプリケーションをインストールする必要があります。
  • Tera Term(ターミナル)
  • VcXsrv(Xサーバー)
Tera Termは、WindowsからRaspberry Piにログインするために利用するターミナルアプリケーションです。VcXsrvは、上図のようにRaspberry PiのアプリケーションをWindows上に表示するために必要なアプリケーションで、Xサーバーと呼ばれることもあります。

以下、順に解説していきます。

Tera Termのインストールと設定

Tera Termのサイトよりインストールファイルをダウンロードします。ここでは、執筆時の最新版である teraterm-4.90.exe をダウンロードしました。

ダウンロード後はファイルをダブルクリックしてインストールします。デフォルトの設定のままインストールを終えて構いません。

インストール後、Tera Termを起動すると、下記のようなウインドウが現れます。これは、Raspberry Piに接続するためのウインドウなのですが、接続前に設定が必要ですので、ここでは図のように「キャンセル」ボタンを押します。


その後、残ったウインドウで下記のように「設定」→「SSH転送」を選択します。


すると、下図のようなウインドウが現れますので、図のように「リモートの(X)アプリケーションをローカルのXサーバに表示する」にチェックを入れ、「OK」を押します。


その後、「設定」→「設定の保存」を選択し、今の設定を保存します。


保存するファイル名や場所は変更せず、そのまま「保存」ボタンを押せば設定が保存されます。

以上でTera Termの設定は終わりですので、一旦Tera Termのウインドウを閉じます。


VcXsrvのインストールと設定

次に、VcXsrvのインストールを行います。

まず、公式サイトよりファイルをダウンロードします。なお、ダウンロードされるファイルについては注意が必要で、こちらのダウンロードサイトより、自分に適したバージョンを選択してダウンロードする必要がある場合があります。

Windows 7以降をご利用の場合、最新版をダウンロードしますが、Windowsが64bit用か32bit用かで異なるファイルをダウンロードする必要があります。執筆時の場合、バージョン1.20.1.1の下記のようなファイルでした。
  • Windows 7以降(64bit)をご利用の場合:vcxsrv-64.1.20.1.1.installer.exe
  • Windows 7以降(32bit)をご利用の場合:vcxsrv.1.20.1.1.installer.exe
Windows XPをご利用の場合、VcXsrvの最新版ではXPは既にサポートされていませんので、旧バージョン1.14.2.1に該当する以下をダウンロードします。ただし、私はXPでの動作は確認していませんのでご注意ください。
  • Windows XP(64bit)をご利用の場合:vcxsrv-64.1.14.2.1.installer.exe
  • Windows XP(32bit)をご利用の場合:vcxsrv.1.14.2.1.installer.exe
ダウンロードが終わったら、デフォルトの設定でインストールします。インストール時に警告が出ますので、「詳細情報」リンクをクリックしてから実行します。

インストールが終了すると、デスクトップにいくつかアイコンが現れます。図には2つのアイコンを示していますが、最近のバージョンのVcXsrvではXLaunchアイコン一つしか現れません。


XLaunchアイコンをダブルクリックして起動してみましょう。幾つかウインドウで設定を求められますが、デフォルトのままで構いません。すなわち、
  • 「Multiple windows」にチェックが入った状態で「次へ」
  • 「Start no client」にチェックが入った状態で「次へ」
  • 「Clipboard」、「Primary Selection」、「Native opengl」にチェックが入った状態で「次へ」
  • 「完了」をクリックする前に「Save configuration」を押すと、そこまでの設定が保存できますので、場所を選んで保存しましょう。デスクトップ上でも構いません。「config.xlaunch」というファイルが保存されます
  • 最後に「完了」でXが起動されます
なお、保存された「config.xlaunch」をダブルクリックすると、その時の設定でXが起動されますので、次回からは「config.xlaunch」をダブルクリックしてXを起動するようにしましょう。

なお、「config.xlaunch」をダブルクリックしてXを起動できることを確認したら、デスクトップ上のXLaunchのアイコンは削除してしまっても構いません。

初回起動時に、下記のようにファイアウォールへのアクセス許可を求める警告が現れますが、そのまま「アクセスを許可する」ボタンをクリックします。チェックボックスの状態は環境により異なりますので、デフォルトのままで構いません。

なお、サードパーティ製のウイルス対策ソフトなどをインストールしている場合、そのソフトウェアのファイアウォール機能に対してVcXsrvへのアクセス許可を行う必要があるかもしれません。しかし、私はそのようなソフトウェアを持っておらず、その設定方法についての質問には答えられませんのでご了承ください。ここではWindows標準のファイアウォール機能のみを用いている場合について解説しています。



さて、VcXsrvが起動した状態では下図のようにタスクトレイに「X」というアイコンが現れます。以下で行うRaspberry Piへの接続時は、必ずこの「X」というアイコンが表示された状態で行ってください。

デフォルトではVcXsrvの起動は自動では行われませんので、Windowsを再起動するたびに手動でVcXsrvを起動する必要があります。

Raspberry Piでの準備

NOOBS 2.0.0までは、Raspberry Pi側の準備は必要なかったのですが、2016年11月29日にリリースされたNOOBS 2.1.0以降では、sshというソフトウェアが無効になったので、これをあらかじめ有効にしておく必要がでてきました。

Raspberry Piのデスクトップ左上にあるメニューから「設定」→「RaspberryPiの設定」と進み、下図のように「インターフェイス」タブの「SSH」を「有効」にしてから、Raspberry Piを再起動します。


これでsshが有効になり、以下の手順に進むことができるのですが、デスクトップに下記のように、パスワードを変更するよう警告が出るようになっています。


ユーザーpiのパスワードをデフォルトである「raspberry」のままにしておくと、外部から誰でもログインできてしまいセキュリティ上危険があるので、自分にしかわからないパスワードに変更するよう促されているわけです。

先ほどと同様に「RaspberryPiの設定」アプリケーションでパスワードを変更するとよいでしょう。

WindowsからRaspberry Piへの接続

以上の準備が終わったら、Raspberry Piへ接続してみましょう。あらかじめRaspberry Piを起動しておきます。慣れないうちは、これまで通りRaspberry Piにディスプレイ、キーボード、マウスを接続しておいてもよいでしょう。

その状況で、WindowsでTera Termを起動し、Raspberry Piに接続します。

下図のように、Tera Termの「新しい接続」ウインドウの「ホスト」欄に、Raspberry PiのIPアドレスを記入して「OK」を押します。

なお、本書10章で注意したように、ここでRaspberry Piに接続するためには、IPアドレスを知る必要があります。そのためには、Raspberry Piにディスプレイとキーボードを接続しておく必要があり、本末転倒です。

この問題を解決するためには、以下の2つの方法が有効です。興味のある方はトライしてみてください。
  • Raspberry PiのIPアドレスを固定する:別ページにその方法をまとめました
  • 「ホスト」欄に、IPアドレスではなく「raspberrypi.local」と記入する:RaspbianのバージョンがJessieであり、WindowsにiTunesがインストールされている必要がある(iTunesに含まれるBonjourというソフトウェアが必要なため)

さて、何らかの方法でRaspberry Piを「ホスト」欄に指定して「OK」を押すと、下記のようにユーザー名とパスワードが求められます。これらのデフォルト値は下記のようでした。
  • ユーザー名:pi
  • パスワード:raspberry
入力したら「OK」を押します。


なお、初回起動時に、上記プロセスの途中で下図のようなセキュリティ警告が現れますが、そのまま「続行」をクリックしてください。



最終的に下図のような状態になります。Raspberry PiでLXTerminalを起動した状態に似ていますね。これが、Windows上のターミナルソフトウェアTera TermでRaspberry Piに接続した状態になります。


このTera Term上でRaspberry Piのコマンドを実行してみます。例えば、LXTerminalを起動するためのコマンド「lxterminal」(すべて小文字であることに注意)を実行した様子が下図になります。本書で多く行ったように、末尾に「&」をつけて「lxterminal &」でももちろん構いません。

別ウインドウでLXTerminalが起動していることがわかります。これは、VcXservをあらかじめ動作させたことの効果です。


さらに、このLXTerminal上で「idle」コマンドでPythonの開発環境IDLEを起動したのが下図です。もちろん「idle &」でも構いません。このように、ターミナルからアプリを起動して利用できる、というのがポイントです。

そのため、よく使うアプリケーションのコマンド名を知っておくと便利です。本書に関連するのは下記のアプリやコマンドです。
  • ファイルマネージャ:pcmanfm
  • ブラウザ(chromium):chromium-browser
  • ブラウザ(epiphany):epiphany
  • テキストエディタ:leafpad (NOOBS 3.2.1以降では mousepad)
  • 設定アプリケーション(Jessie以降):rc_gui
  • シャットダウン:sudo poweroff
  • 再起動:sudo reboot

日本語入力は?

以上の方法では、テキストエディタなどに日本語を直接入力する方法がないように思えます。

ただし、Windowsアプリから文字をコピーしてRaspberry Piのアプリケーションに貼り付けることはできますので、Windowsのメモ帳などで日本語を書いてRaspberry Piのアプリケーションに貼り付けるという手はあります。

もし、よりスマートな方法をご存知の方はお知らせ頂けると幸いです。

管理者権限でGUIアプリケーションを実行する際の注意

上記の方法でWindowsからRaspberry Piのアプリケーションを実行できるようになったのですが、管理者権限でウインドウのあるGUIアプリケーションを実行しようとすると、エラーが出て実行に失敗します。例えば管理者権限でのテキストエディタの起動「sudo leafpad」などです(本書ではこれをしばしば用いました)。

本ページの方法でGUIアプリケーションを管理者権限で実行するには、例えばleafpadの場合、下記のコマンドで実行しなければなりません。
XAUTHORITY=/home/pi/.Xauthority sudo leafpad
これを毎回実行するのは非常に面倒ですね。

下記の手順に従うと、この長い実行コマンドを簡略化できますので、試してみると良いでしょう。

まず、.bashrcという設定ファイルをテキストエディタleafpadで開きます。ターミナルで下記を実行するのでした。
leafpad .bashrc
なお、NOOBS 3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .bashrc
このファイルの末尾に、下記の1行を追加します。これは「XAUTHORITY=/home/pi/.Xauthority sudo」という長い命令を「xsudo」で置き換える、という設定です。
alias xsudo="XAUTHORITY=/home/pi/.Xauthority sudo"
追加したらファイルを保存してleafpadを閉じます。

この設定を有効にするには、Raspberry Piを再起動してしまうのが簡単です。

その後、ターミナル(Tera TermでもLXTerminalでも可)にて、
xsudo leafpad
を実行すると、管理者権限のテキストエディタがWindows上に開く、というわけです。NOOBS 3.2.1以降では
xsudo mousepad
です。コマンドがかなり簡略化されたことがわかるでしょうか。

なお、この方法が必要なのは、GUIアプリケーションを管理者権限で実行する場合のみです。例えば、シャットダウンコマンド「sudo poweroff」は管理者権限ですが、GUIがないのでこれまで通りの実行方法でエラーはでません。

さらなる発展

以上で、Raspberry Piにディスプレイ、マウス、キーボードを接続せずに運用できるようになりました。

しかし、実際に使ってみると、Raspberry Pi上のGUIアプリケーションの動作がやや緩慢であることに不満を覚える方が多いのではないでしょうか。これは、GUIの描画をネットワーク経由で行っていることが原因です。

実際、よりLinuxに慣れている方は、上記のようにRaspberry PiのGUIアプリケーションをWindows上に表示して用いる、ということはほとんど行いません。

どうするかというと、Raspberry Pi上で行う全ての処理を、上記のターミナルソフトウェアTera Term上で行ってしまうのです。Tera TermはRaspberry Piとコマンド(文字)のやりとりしかしませんから、ネットワーク経由でも動作が軽快なわけです。

しかし、そのためには、例えば下記のような操作をすべてターミナル上で行えなければいけません。
  • ファイルの編集(プログラムや設定ファイルの記述)
  • ファイルの操作(削除、移動、名前の変更など)
  • プログラムの実行
一つ目の「ファイルの編集」について、本書ではleafpadというアプリケーションを用いましたが、これはターミナル外で動作するGUIアプリケーションなので、ターミナル上で動作するという条件を満たしません。

ターミナル内のみでファイルを編集できるアプリケーションとして良く知られているのは、
  • nano(起動したら、終了するにはCtrl-x)
  • vi
  • emacs
などです。viやemacsは、利用法の解説で一冊の本が書けるくらい奥が深いものなので、初めての方が試すならnanoでしょうか。

二つ目の「ファイルの操作」についてはamazonなどの書店で「Linux コマンド」などのキーワードで検索すると、参考書が多数見つかるでしょう。 ブルーバックスでもLinuxの入門書が出ましたね。とてもわかりやすいので、本書の読者の方にはお勧めです。

三つ目の「プログラムの実行」については本書付録Cに少し解説があります。


必要なツールのインストールと設定(OS X編)

さてここからは、OS Xで同じことを行う方法を記していきます。私はYosemiteで行いましたが、他のバージョンでも同様に動作すると思います。Windowsと同様、
  • ターミナル
  • Xサーバー
の2つが必要になります。OS Xは「アプリケーション / ユーティリティ / ターミナル」としてターミナルが既に含まれていますので、Xサーバーのインストールから行います。

XQuartzのインストールと起動

ここでは、OS X用のXサーバー(X11)であるXQuartzをインストールします。XQuartzの公式サイトよりファイルをダウンロードします。執筆時はXQuartz-2.7.8.dmgが最新版でした。

ダウンロード後はdmgファイルをダブルクリック→現れたpkgファイルをダブルクリック、という流れでインストールを行います。

インストール後は下記のようにアプリケーション→ユーティリティに「XQuartz」アイコンが現れます。また、本ページで多用する「ターミナル」も存在するのがわかるでしょう。


XQuartzをダブルクリックして起動すると、下記のようにドックにXQuartzのアイコンが現れます。下記でRaspberry Piに接続するときは、このアイコンが現れているときに行います(ただし、必要な時にXQuartzが自動的に起動するようですので、手動での起動は必ずしも必要ないかもしれません)。


なお、XQuartzを手動で起動すると、下記のような「xterm」というアプリケーションも同時に起動するのですが、これは用いませんので閉じてしまって構いません。以上で、XQuartzのインストールと起動は完了です。


sshの設定

次に、Raspberry Piに接続してGUIアプリケーションを表示するための設定を行います。

/etc/ssh_configという設定ファイルを管理者権限で編集する必要があります。ここではnanoというテキストエディタで行います。

まず、OS X上で「アプリケーション→ユーティリティ→ターミナル」を起動しましょう。そして、下図のようにターミナル上で
sudo nano /etc/ssh_config
を実行しましょう。すると、OS Xにログインする際のパスワードを聞かれますので、入力してください。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。

パスワードの入力に成功すると、下図のようにターミナル上でテキストエディタnanoが管理者権限で起動します。矢印キーでカーソルを移動できますので、操作はそれほど難しくないでしょう。

そして、下図のように「#    ForwardX11 no」という行を見つけ、その下に
ForwardX11 yes
という行を一行追記します。


追記が終わったら、保存してnanoを閉じます。以下の流れで行いましょう。
  • Ctrl-x(Ctrlキーを押しながらxキー)を入力
  • 変更を保存するか?(Save modified buffer?)と聞かれるので「y」を入力
  • ファイル名(File Name to Write)を聞かれるので、変更せずそのままEnterを入力
以上で変更が保存されnanoが終了するはずです。

OS XからRaspberry Piへの接続

以上で準備が整いましたので、OS XからRaspberry Piに接続しましょう。

なお、Windows編で注意したように、2016年11月29日にリリースされたNOOBS 2.1.0以降では、sshというソフトウェアが無効になったので、Raspberry Pi上でこれをあらかじめ有効にしておく必要がでてきました。Windows編の「Raspberry Piでの準備」を参考に、Raspberry Pi上でsshを有効にしてから先に進んでください。

準備ができたら、OS X上で「アプリケーション→ユーティリティ→ターミナル」を起動し、下図のように
ssh pi@raspberrypi.local
と入力してEnterキーを押しましょう。

なお、これは「raspberrypi.localというホストにユーザーpiでログインする」という意味になります。IPアドレスで指定したい場合、例えば「ssh pi@192.168.1.3」などとなります。


すると、パスワードの入力を求められますので、ユーザーpiのパスワード(デフォルトで「raspberry」)を入力してEnterキーを押します。その際、パスワード記入欄のカーソルは変化しませんが、気にせずに入力してEnterキーを押してください。

パスワードの入力に成功すると、下図のようにログインに成功します。


あとは自由にアプリケーションを起動してみましょう。下図は、Windowsで行ったように
  • ターミナルからlxterminalを起動
  • lxterminalからidleを起動
を実行した様子です。

なお、管理者権限でGUIアプリケーションの実行するとそのままではエラーが出ますので、本ページ中ほどにある「管理者権限でGUIアプリケーションを実行する際の注意」を参照してください。同様に、よく使うアプリケーションのコマンド名も本ページ中ほどで紹介しています。