2017年12月31日日曜日

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

はじめに

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

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

パーツセット

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

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

補足情報一覧

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

旧版の記事へのリンク

本書の旧版「Raspberry Piで学ぶ電子工作」のサポートページには、新版の読者の方にも役立ちそうな記事がいくつかあります。それらへのリンクを貼ります。

感想など


2017年12月30日土曜日

本書の補足情報

ここでは、本書の補足情報や、OSのバージョンアップに伴う変更点などを記していきます。

はじめに

回路配線図について

本書では、公式サイトより回路の配線図のPDFをダウンロードできます。 その回路配線図をWindowsやOS X上のAdobe Readerで閲覧する際、「編集」→「環境設定」を選択し、下図のように「細い線を拡張」のチェックを外すと、より綺麗な配線図を見ることができます。


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

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

2章

p.33:microSDカードのサイズについて

書籍では「8GB以上のmicroSDカード」と記しましたが、OSであるRaspbianのバージョンが上がるに従い、必要なmicroSDカードの容量も増えています。8GBでも動作はしますが、可能な限り大きな容量のmicroSDカードを用いることを推奨します。入手しやすい容量としては16GBのものがあります。

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

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

2016/9/23NOOBS 1.9.3Jessie
2016/10/5NOOBS 2.0.0
2016/11/29NOOBS 2.1.0
2017/2/27NOOBS 2.2.0
2017/3/3NOOBS 2.3.0
2017/4/10NOOBS 2.4.0
2017/6/23NOOBS 2.4.1
2017/7/5NOOBS 2.4.2
2017/8/17NOOBS 2.4.3Stretch
2017/9/8NOOBS 2.4.4

OSのベースバージョンは長らくJessieでしたが、2017年8月にリリースされたNOOBS 2.4.3からは Stretchというバージョンに切り替わっています。Stretchはまだリリースされてから日が浅く、バグも多く含まれると思いますが、可能な限りこのページに対応方法などを記していきます。 上記のどのバージョンでも動作確認を行いますが、手順の変更や注意がある場合以下に追記していきます。このページを「NOOBS」で検索すると変更点などを知ることができるでしょう。

p.46:NOOBS でのOSの選択について

2017年4月にリリースられたNOOBS 2.4.0以降では、インストール時のOSの選択肢として下図のように「LibreELEC_RPi2」と「Raspbian with PIXEL」の2種類が現れるようになりました。下図のように「Raspbian with PIXEL」にチェックを入れて作業を進めてください。なお、RaspbianとLibreELECの表示の順番はNOOBSのバージョンにより異なることがありますのでご注意ください。



p.44:SDメモリーカードフォーマッターについて

SDメモリーカードフォーマッターを用いたSDカードのフォーマットに関する注意です。 書籍執筆時は、バージョン4でしたが、現在、バージョン5に上がっています。

古いSDメモリーカードフォーマッターを用いてRaspberry Piで一度用いたSDカードをフォーマットする場合、 最近のNOOBS (Raspbian)では 「一度目のフォーマットに失敗し、二度目のフォーマットで成功する」ようになっていました。
細かく言えば、「一度目でパーティション(ドライブのようなもの)が統合され、二度目でフォーマットに成功する」 状態です。
二度目のフォーマットで成功するため大きな問題はありませんが、 SDメモリーカードフォーマッターを最新版にアップグレードすると、一度でフォーマットに成功するようになりましたので、 気になる方はお試しください。

p.48:NOOBS 1.9.3以降のデスクトップについて

NOOBS 1.9.3以降に含まれるRaspbianでは、下記のように、デスクトップやアイコンのデザインが一新されました。また、ブラウザがGoogle ChromeのベースとなったChromiumブラウザに変更されています。しかし、デザイン以外の変更はあまり大きくありませんので、書籍の指示のまま変更の必要がない部分がほとんどです。

もし最新のNOOBSを用いて違和感を感じる部分があったら、下記に補足や注意点がないか、チェックしてみてください。



p.50:キーボードの設定について

NOOBS 2.4.3に含まれる設定アプリケーションでは、「Set Keyboard」ボタンを押してもキーボード設定画面が現れないバグがあるように思われます。ターミナルソフトウェアLXTerminalを起動し、下記のようにlxkeymapというアプリケーションを起動すればキーボード設定画面が現れますので、そこで設定を行ってください(先頭の「$」の入力は不要です)。
$ lxkeymap
なお、NOOBS 2.4.4以降ではこの問題は解決しています。

p.51:日本語フォントのインストールについて

NOOBS 1.4.2~1.9.2およびNOOBS 2.4.3にはデフォルトで日本語フォントが含まれておらず、「2.4.7 日本語フォントのインストール」節のようにネットワークから日本語フォントをインストールする必要があります。

ただし、NOOBS 1.9.3~NOOBS 2.4.2およびNOOBS 2.4.4~には日本語フォントは含まれておりますので、2.4.7節を飛ばして2.4.8に進んで頂いても文字化けは起こりません。

p.53:シャットダウン時のLEDの状態について

Raspberry Pi 3をシャットダウンした後のLEDの状態について、本書では「ACTの点滅後、緑色に点灯した状態になります」と記しました。

NOOBS 1.9.3およびNOOBS 2.0.0以降では、Raspberry Pi 3のシャットダウン後にACTは消灯状態になりますのでご注意ください。なお、これはRaspberry Pi 2などと同じ挙動です。

3章

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

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

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

4章

p.88:NOOBS 1.9.3におけるIDLEのデフォルトフォントについて

NOOBS 1.9.3に含まれるRaspbianでIDLEを起動し、プログラム04-02-led.pyを開くと下図(左)のようになります。

このバージョンでは、デフォルトのフォントとしてプロポーショナルフォント(文字により太さが異なるフォント)が用いられてしまっています。そのため、下図(左)の注釈に示したように、本来4個または8個ある空白文字(スペース)の個数が非常に少なく見えてしまっています(本書p.88の図4-9と比べてください)。

Pythonでは空白文字の個数による字下げの区別は重要ですので、空白文字の個数が一目でわかるフォントを用いるべきです。

そのために、IDLEのメニューにある「Options」→「Configure IDLE」を選択し、「DejaVu Sans Mono」や「Droid Sans Mono」のように、名前に「Mono」が含まれるフォントを選んでください。下図(右)のように等幅フォントが選択され、空白の個数がよくわかるようになります。


6章

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

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

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

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

7章

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

2017年4月に、秋月電子通商さんより上記のLCDを正式にRaspberry Piで利用可能にしたモジュールキットが販売開始され、さらに2017年6月にはその完成版が販売開始されましたのでここで紹介します。なお、キットの方は狭いピッチ(ピン間隔)の半田付けが必要になりますので、半田付けにある程度慣れている方向けとなります。商品へのリンクは下記になります。
組み立てキットに含まれるパーツを図示したのが下図(左)となっています。ピンソケットが2種含まれていますので、お好みの方を半田付けします。 完成品にはLCDを立てて使うためのピンソケットがあらかじめ取り付けられているようです。

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

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

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

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


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

8章

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

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

なお、2017年6月23日にリリースされたNOOBS 2.4.1以降では、Raspbianのカーネルと呼ばれるソフトウェアがバージョン4.9になった影響で、「sudo apt-get upgrade」コマンドでOSをアップグレードした後、これまでのWiringPi-Pythonをそのまま使おうとするとエラーがでて正常動作しません。その場合、まずターミナルを起動して下記のコマンドを実行し、古いWiringPi-Pythonを削除して新しいバージョンをインストールしなおしてください。NOOBSをSDカードに新規インストールした場合はその必要はありません。
rm -rf WiringPi-Python
あとは、以下のWiringPi-Pythonのインストール用コマンドを順に実行していきます。WiringPi-Pythonが更新された影響で、書籍に記したコマンドに対してコマンド(5)と(6)を追加しています。これらを省くと、誤って管理者権限(sudo)なしでWiringPi-Pythonを利用した時にRaspbianが異常停止してしましますのでご注意ください。

下記のコマンドをブラウザで1行ずつコピーし、ターミナルソフトウェアLXTerminalへ貼り付けて1つ1つ実行するとトラブルが少ないでしょう。コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。
(1) sudo apt-get update
(2) sudo apt-get install python-dev python-setuptools swig
(3) git clone --recursive https://github.com/WiringPi/WiringPi-Python.git
(4) cd WiringPi-Python/WiringPi
(5) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/wp-pwm-warning.patch
(6) patch -p2 -i wp-pwm-warning.patch
(7) sudo ./build
(8) cd ..
(9) swig -python wiringpi.i
(10) sudo python setup.py install

9章

p.223:WebIOPiのダウンロードについて

WebIOPiのダウンロードサイトでは、Cayenneというソフトウェアのダウンロードが可能になっていますが、書籍に記した通りWebIOPi 0.7.1をダウンロードし、インストールを行ってください。

p.224:WebIOPiのインストールコマンド

WebIOPiをインストールするためのコマンドはやや長く、写し間違えると正しくインストールが行なわれません。 下記にコピーできる形で再掲しますので、ブラウザで表示して1行ずつコピーし、ターミナルソフトウェアLXTerminalへ貼り付けて1つ1つ実行していけばトラブルが減るでしょう。コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。なお、(1)のコマンドの実行する前に、p.223の指示に従ってWebIOPi-0.7.1.tar.gzをダウンロードし、ユーザーpiのホームに移動しておく必要がありますのでご注意ください。
(1) tar zxf WebIOPi-0.7.1.tar.gz
(2) cd WebIOPi-0.7.1/
(3) wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
(4) patch -p1 -i webiopi-pi2bplus.patch
(5) sudo ./setup.sh
(5)の処理が終わると最後に「Do you want to access WebIOPi over Internet ? [y/n]」という質問をされますので、キーボードで「n」を入力したあとEnterするのでした。 その後、OSとしてJessieをお使いの方は下記のコマンド(p.226のコマンド)を実行し、起動用ファイルを適切な位置に配置します。これでWebIOPiのインストールは完了です。
(1) wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
(2) sudo mv webiopi.service /etc/systemd/system/
なお、上記の手順でWebIOPiをインストールしてもp.234の図9-5において「IN/OUT等が現れるはずのボタンに文字が現れず灰色のまま」という場合、 まずはWebIOPiの再インストールを試してみましょう。そのためには、ターミナルを起動して下記のコマンドで過去のインストールファイルを一旦削除します。
sudo rm -rf WebIOPi-0.7.1
その後、もう一度上記のコマンドでWebIOPiをインストールします。 それでも症状が改善されない場合、原因はわかりませんが、OSであるRaspbianが壊れているという可能性もないとは言えません。余力があればOSを再インストールしてみることも検討してみると良いでしょう(私自身、OSの再インストールが必要だったことはないのですが、読者の方にはそれで改善したという方が複数名いらっしゃるようです)。

10章

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

mjpg-streamerをインストールするためのコマンドやや長く、写し間違えると正しくインストールが行なわれません。 下記にコピーできる形で再掲しますので、ブラウザで表示して1行ずつコピーし、ターミナルソフトウェアLXTerminalへ貼り付けて1つ1つ実行していけばトラブルが減るでしょう。コピーはブラウザ上でキーボードで「Ctrl+c」、貼り付けはLXTerminalのメニューから「編集」→「貼り付け」(またはCtrl+Shift+v)です。なお、行頭の「(1)」などの数字はコピーする必要はありませんのでご注意ください。
(1) sudo apt-get update
(2) sudo apt-get install libjpeg8-dev cmake
(3) git clone https://github.com/jacksonliam/mjpg-streamer.git
(4) cd mjpg-streamer/mjpg-streamer-experimental
(5) make
(6) cd
(7) sudo mv mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
なお、mjpg-streamerのインストールに一度失敗し、その後何度試行錯誤してもうまくいかない、という方は、上記の7つのコマンドの実行前に、下記の2コマンドにより過去にインストールしたmjpg-streamerを一度削除した方が安全かもしれません。ターミナルLXTerminalを起動した直後の状態で順に実行してください。
(1) sudo rm -rf /opt/mjpg-streamer
(2) rm -rf mjpg-streamer

応用PDF

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

追加PDFでは、spidevとADコンバータMCP3208を用いてAD変換を行うプログラム06-04-spidev.pyを紹介しました。 やや高度な解説になりますが、このプログラムではMCP3208に4バイトのコマンドを送信することで4バイトのデータを受信し、さらにそこから必要な12ビットを切り出してデータとしています。 このデータの送受信をそれぞれ3バイトで実現するプログラムを作成しましたので、プログラムの効率を高めたいという方はお試しください。ただし、結果自体が変わるわけではありません。 ターミナルを起動し、下記のコマンドを実行することで、変更版プログラム06-04-spidev-mod.pyをダウンロードできます。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/06-04-spidev-mod.py
実行方法は、06-04-spidev.pyと同じです。

PDF17:LDCの文字コード表

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

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

これまで同様、Python3用WiringPi-Pythonのインストールコマンドを、コピーできる形式で再掲します。8章で、Python2用WiringPi-Pythonをインストール済みであることを前提としていますので、御注意ください。
(1) sudo apt-get update
(2) sudo apt-get install python3-dev python3-setuptools
(3) cd WiringPi-Python
(4) swig -python wiringpi.i
(5) sudo python3 setup.py install


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

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

もし、この「CLI起動によるWebIOPiの自動起動」でもサーボモーターが正常動作しない場合、以下を試してください。 まず、以下のコマンドを実行し、WebIOPiの自動起動を無効にします。
sudo systemctrl disable webiopi
次に、以下のコマンドで、/etc/rc.localファイルを管理者権限で編集できる状態にします。
sudo leafpad /etc/rc.local
そして、「exit 0」の上の行に、以下の2行を追記して保存し、再起動してください。
sleep 10
sudo service webiopi start
以上で、/etc/rc.localからWebIOPiが起動され、サーボモーターが正常動作することを期待しています。 なお、「sleep 10」は「10秒待機する」の意味です。 安全のために「10秒」と大きな数値を選びましたが、 私の環境では「sleep 3」(3秒待機)程度でも正常動作しました。 さらに、この方法ではCLI起動ではなくGUI起動のままでもサーボモーターが正常動作しました。

2017年12月29日金曜日

読者の方々の声

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

レビュー


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