4章

4.4

青色 LED に順方向電圧をかけて点滅させる（上級者向け）

プログラミングによるLEDの点滅

書籍の 4.2 で触れたように、Raspberry Pi の GPIO に流すことのできる電流のデフォルト値は８mA ですので、この LED

ここでは、上級者向けに「青色 LED を明るく点滅させる」に 10mA や 20mA を 流 す こ と は で き ま せ ん。ま た、青 色 のという演習を紹介します。書籍の４章の演習で必要な物品は、LED の 多 く は Vf =3.4V 程 度 で あ る こ と が 多 い の で す が、３章と同じでしたが、この演習では、表 4-1 に示す追加物品がRaspberry Pi の GPIO の 3.3V ではこの電圧に足りません。

必要になります。

LED に流れる電流が８mA でも十分明るいですし、青色
LED に与える電圧が 3.3V であっても（多少暗いですが）点灯
表 4-1

本節で必要な物品

物品

備考

青色 LED １個

必 須。秋月電 子 通 商の 通 販コードⅠ-06411（10 個入り）など

100Ωの抵抗１本必須。秋月電子通商の通販コード R-25101（100 本 入 り ）、 千 石 電 商 の コ ー ド 8ASS6UHG（10 本から）など

10kΩの抵抗１本必須。秋月電子通商のパーツセット（書籍の59 ページ）に含まれている。単品で購入する
場合は秋月電子通商の通販コード R-25103（100 本入り）、千石電商のコード 7A4S-6FJ4（10 本から）など

トランジスタ2SC1815-Y、
2SC1815-GR、2SC1815-BLのうちどれか１つ必須。秋月電子通商の通販コードⅠ-04268、
千石電商のコード 8Z2T-3SHL など

ブレッドボード用
ジャンパーワイヤ（ジャンプワイヤ）（オス－オス）

必須。3 章でも紹介。秋月電子通商のパーツセットに含まれているはしますので、実用上は大きな問題はありません。しかし、LED に 10mA ～ 20mA の電流を流す方法や、青色 LED に 3.3V
以上の電圧をかけて点滅させる方法を知っておくことは有用ですのでここで学んでおきましょう。ただし、５V ピンを用いること、以後の章では用いないトランジスタを用いることなどから、本節の内容は上級者向けとします。
目標は、青色 LED に順方向電圧をかけて点滅させることとしましょう。必要な回路を図 4-22 に示します。
右下に丸で囲まれた図記号であらわされた部品があります
が、これを「トランジスタ（特に NPN トランジスタと呼ばれ+5V
抵抗
R1=100Ω

4.4.1  トランジスタを用いた回路
３章と４章では、LED の取り扱いを学んできました。LED

GPⅠO 25には順方向降下電圧 Vf があり、そのときに流す電流は 10mAや 20mA 程度であることが多いのでした。
1

図 4-22B
抵抗
R2=10kΩC
E
GND

青色 LED を明るく点滅させるための回路図

2

4章

プログラミングによるLEDの点滅るもの）」といいます。トランジスタには３つの端子があり、それぞれ「コレクタ C」、「ベース B」、「エミッタ E」と呼ば5Vれます。このトランジスタを、ここではスイッチとして用いまGNDす。そのためには、GPIO 25 からトランジスタのベース B へ
流れる電流の hFE 倍（「直流電流増幅率」といいます）が、５V
ピンからコレクタ C へ向かって流れる、という性質を用います。

10kΩ BC

E 100Ω ＋ −GPⅠO 25

図 4-23 に即して言えば、GPIO 25 が HIGH のときは LED に電流が流れて LED が点灯し、LOW のときは電流が流れず
LED は点灯しない、ということになります。このとき、青色
LED は、抵抗を介して順方向降下電圧 Vf よりも大きい５V のピンに接続されていますから、明るく点滅させることができ

図 4-24

ブレッドボードによる回路の実現る、というわけです。
この回路をブレッドボード上で実現すると、たとえば図ル 04-02-led.py を 開 い て 実 行 ＊2 し ま す。 管 理 者 権 限 は4-24 のようになるでしょう。回路を作成したら、4.3.1 の方法

wheezy 系列の Raspbian をお使いの方のみ必要です。青色で起動した IDLE

＊1

から「File」→「Open」を選択し、ファイ
+5V

+5V

電流
流れる

電流
流れない

LED が明るく点滅することを確かめてください。
4.4.2  抵抗値の決定方法
さて、図 4-22（ ２ページ）では５V ピンには R1=100Ωの、
GPIO 25 には R2=10kΩの抵抗を接続しました。この R1 と R2 の決定方法を学びましょう。

HIGH
GPⅠO 25C

B

LOW
GPⅠO 25

E

電流流れる

B
電流流れないGND
図 4-23

3

まずは、LED が点灯している状態を考えます。この青色

LED 点灯しない

LED 点灯

トランジスタはスイッチとして働く
書籍の84ページを参照

＊1

C
E
GND

LED に対し、Vf =3.4V で流す電流が 20mA であるとしましょう。また、このときトランジスタの性質より、トランジスタの「コレクタ C」と「エミッタ E」の間の電圧は、ほぼ０V です。そのため、20mA（0.020A）の電流を流すためには、オームの法則より R1 を次のように定める必要があります。
書籍の93ページの図4-13を参照

＊2

4

5章

R1=(5-3.4)/0.020=80Ω
これより抵抗が大きく、入手しやすい抵抗として、100Ωを選びました。
次に、R2 の計算です。LED に 0.020A が流れるとき、R2 の抵
抗には 0.020/hFE A の電流が流れます。hFE は、トランジスタの種類によりさまざまな値を取りますが、ここでは典型的な値として、hFE=100 を用いましょう。

タクトスイッチによる入力

5.8 タクトスイッチで Raspberry Pi をシャットダウン
書籍の 5.6 と 5.7 では、タクトスイッチの状態に応じてアクションを起こす演習を２つ紹介しました。ここでは３つ目の演
習として、「タクトスイッチが押されたときに Raspberry Pi を
シャットダウンする演習」を紹介します。
用いる回路は、5.6 と 5.7 のときと同じく書籍の 113 ページの図 5-9 で、実行するプログラムが記述されたサンプルファイ

トランジスタの「ベース B」と「エミッタ E」の間の電圧

ルは、05-06-sw-poweroff.py です。4.3.1 にしたがって起動はほぼ 0.6V を取ることがやはりトランジスタの性質として知した IDLE から 05-06-sw-poweroff.py を開き、実行しましょ

られており、さらに GPIO 25 は HIGH 状態のとき 3.3V ですかう。wheezy 系列の Raspbian をお使いの方のみ、管理者権限

ら、オームの法則より下記のようになります。

が必要です。スイッチが押されると、プログラムから sudo

R2=(3.3-0.6)/(0.020/hFE)=2.7/(0.020/100)=13500Ω=13.5kΩ

poweroff コマンドが実行され、Raspberry Pi がシャットダウ
ンされます。

これに近く、入手しやすい抵抗として 10kΩを選びました。

このプログラムの７行目と８行目には、実行したいコマンド

以上、青色 LED に 20mA の電流を流すための回路と、そのを次のように「args」という変数に格納し、subprocess モジ

抵抗値の算出方法を学びました。この電流 20mA は GPIO では

ュールの Popen クラスに渡すように記述されています。

なく、５V ピンを通して流れることに注意してください。青色
LED に限らず、10mA ～ 20mA の電流を LED に流したい場合

7 args = ['sudo', 'poweroff']

は、この方法を用います。ただし、R1 の計算はその LED の Vf

8 subprocess.Popen(args)に応じて計算し直す必要があります。
では、このプログラムが必要となる場面について解説しておきましょう。これまで皆さんが行ってきたとおり、Raspberry
Pi の電源を切るには、Raspbian のデスクトップからシャット
ダウンする必要がありました。この方法を実行するには、
Raspberry Pi に最低限ディスプレイとマウスが接続されている必要があります。
5

6

6章

しかし、Raspberry Pi をロボットの頭脳にする、といった用途を考えた場合、ロボットの電源を切るたびに Raspberry

6.5

AD変換によるアナログ値の利用

半固定抵抗で音声のボリュームを変更する（要ネットワーク）

Pi にディスプレイとマウスを接続するのは不便ですね。ここ６章で学んだ AD 変換を用いた応用例として、半固定抵抗ので紹介したプログラムを用いると、ディスプレイとマウスを接

つまみを音声のボリューム変更に用いてみましょう。この例

続しなくても、タクトスイッチを押すだけでシャットダウンすは、書籍の 5.7 で MP3 の音を鳴らせた人を対象とするため、ることができる、というわけです。

ネットワークへの接続が必要になります。

なお、このプログラムを実用するためには、このプログラム

用いる回路は、書籍の 137 ページの図 6-5 および 138 ページ

が Raspberry Pi の起動とともに自動的に実行され、タクトスの図 6-6 の半固定抵抗を用いたものです。用いるプログラムがイッチの入力を常に待機した状態になっている必要がありま記述されたサンプルファイルは、06-03-volume.py です。0 か

す。そうした「プログラムの自動実行の方法」については、ら 4095 の値を、０% から 100% というボリュームに変換し、7.5（ 12 ページ）や 10.3.3（書籍の 281 ページ）で紹介しまamixer というコマンドでボリュームをセットするプログラム

す。

です。
プログラムを実行する前に、音声が再生されている状態にしておく必要があります。再生する音声ファイルは、5.7 でも用いた test.mp3 にします。
ターミナルを起動して、06-03-volume.py のあるディレクト
リで音声を再生するコマンドを実行しますが、巻末の付録 B
でサンプルファイルをホームディレクトリに用意した場合と、「bluebacks」ディレクトリに用意した場合では、実行する内容 が 異 な り ま す。ホ ー ム デ ィ レ ク ト リ に 用 意 し た 場 合、
mpg321 test.mp3 を実行します。
「bluebacks」ディレクトリに用意した場合、前述のコマンドを実行する前に cd bluebacksというコマンドで「bluebacks」ディレクトリに移動する必要があります。そのあと、mpg321 test.mp3 を実行します。
上記コマンドにより音声が再生され、test.mp3 の音が鳴るはずです。もし音が鳴らなかったら、5.7 に戻り、イヤフォ
ン・スピーカーの接続を見直してください。なお、音声の再生

7

8

6章

が終了してしまったら、ターミナル上でキーボードの［↑］キーを押してから［Enter］キーを押してください。もう一度同じコマンドが実行され、音が鳴ります。

AD変換によるアナログ値の利用● SPⅠモジュールの有効化
まず、Raspbian で SPI 用モジュールを有効にする設定を行います。jessie 系列の Raspbian をお使いの方は、2.4.1 の図では、音声が再生されている状態のまま、06-03-volume.py

2-16（書籍の 48 ページ）で紹介した設定用アプリケーション

を 4.3.1 にしたがって起動した IDLE で開いて実行してみましで「インターフェイス（Interfaces）」タブを選択し、「SPI」

ょう。wheezy 系列の Raspbian をお使いの方のみ、管理者権の項目を「有効（Enabled）」にしてください。
「OK」ボタン限が必要です。半固定抵抗のつまみで、音声のボリュームが調で設定用アプリケーションを終了すると再起動（reboot）を促整できるはずです。

されますので、再起動します。
wheezy 系列の Raspbian をお使いの方は、付録 H を参考に

6.6

spidev を用いた SPⅠ通信（上級者向け・要ネットワーク）

６章で用いたプログラムでは、AD コンバータと Raspberryraspi-config コマンドで設定を行ってください。
● spidev のインストール

Pi との間の通信に「SPI 通信」と呼ばれるものを用いていまし

次に、Python から spidev というモジュールを用いるためのた。書籍では解説しませんでしたが、この SPI 通信を実現してライブラリをインストールします。jessie 系列の Raspbian でいるのは、プログラムのファイル中に記述されている readadc

は下記の２行を順に実行してインストールしてください。

関数の実装です。
SPI 通信の実現には、それ以外にも Raspbian の「カーネルモジュール」と呼ばれるものを用いる方法があります。プログ

sudo apt-get update
sudo apt-get install python-spidev

ラミングに慣れている人にとっては、カーネルモジュールのほうが主流と言えるかもしれません。
ただし、カーネルモジュールを用いるには Raspberry Pi で

wheezy 系列の Raspbian では、ネットワークに接続の上、下記のコマンドを順番に実行すれば、準備が完了します。

の設定が必要になるなど、少しハードルが高くなります。そのため、書籍の演習では別の方法にしました。
この節では、上級者向けの内容として、spidev を用いて AD① sudo apt-get update② sudo apt-get install python-dev

コンバータと通信するプログラムを紹介します。いくつか準備③ git clone https://github.com/Gadgetoid/py-spidevが必要ですので、順に解説していきます。

④ cd py-spidev⑤ sudo python setup.py install

9

10

7章

●プログラムの実行
６章で用いてきたプログラム 6-1 ＊3（書籍の 139 〜 141 ペー

Ⅰ2Cデバイスの利用

7.5 デジタル温度計用プログラムの自動実行（上級者向け）

ジ）を、ここでインストールした spidev 用に変更したプログ

書籍の 7.4 でデジタル温度計を作成しました。しかし、作成

ラムのサンプルファイルが、06-04-spidev.py です。回路は、した状態のまま居間などで使うことを考えた場合、下記のよう

書籍の 138 ページの図 6-6 のものをそのまま用います。

な点で問題があります。

それでは、4.3.1 にしたがって起動した IDLE を起動してファイルを開いて実行してみましょう。wheezy 系列の Raspbian・Raspberry Pi を起動したあと、「温度センサで読み取った値をお使いの方のみ、管理者権限が必要です。プログラム 6-1 をを LCD に表示するプログラム」を手動で実行しなければな

実行したときと同じ結果となるはずです。readadc 関数を用いらないたプログラムより、spidev を用いたプログラムのほうが、若干高速に動作するというメリットがあります。
なお、spidev を用いた 06-04-spidev.py は、readadc 関数を・上記を実行するためには、Raspberry Pi にキーボード、マウス、ディスプレイを接続することになり、これでは温度計というより、むしろ単なる PC にすぎない

用いる 06-01-print.py や 06-02-led.py を実行したあと、そのまま実行しても正しく動作しません。一度 Raspberry Pi を再もし、Raspberry Pi が起動するときに「温度センサで読み起動してから実行してください。そのため、spidev と readadc

取った値を LCD に表示するプログラム」が自動で実行されれ関数は併用するのではなく、どちらを使うか決めて、それを使ば、Raspberry Pi にキーボード、マウス、ディスプレイを接い続けるのがよいでしょう。

続することなくデジタル温度計が実現できます。その方法を本もし、この節を終えたあと spidev を用いる予定がない方
は、設定用アプリケーションを再び起動して、SPI を「無効節で学びましょう。あらかじめ、書籍の 166 ページの図 7-6 の回路を作成しておきます。

（Disabled）」に戻すのもよいでしょう。
●コマンドによるプログラムの起動
まず、どのようなコマンドでプログラムが実行されるかを知る必要があります。これは書籍の 7.3 で紹介したように、「温度センサで読み取った値を LCD に表示するプログラム」が記述されたサンプルファイル 07-03-LCD-temp.py が存在するディレクトリで sudo python 07-03-LCD-temp.py を実行すればよいのでした（jessie 系列の Raspbian をお使いの方は「sudo」は11

プログラムが記述されたサンプル
ファイルは、06-01-print.pyです。

＊3

12

7章

Ⅰ2Cデバイスの利用

末尾の「&」は、書籍の 4.3 で初めて登場した、プログラム

省略できます。以下同様です）。
プログラムを自動実行する際には、このサンプルファイルがをバックグラウンドで実行するためのものです。ここでも必ず存在するディレクトリも含めて記述する必要があります。その記述してください。なお、/etc/rc.local により実行されるフため、sudo python /home/pi/07-03-LCD-temp.py を実行しまァ イ ル は 自 動 的 に 管 理 者 権 限 に な る の で、 実 は jessie とす。もし、サンプルファイルが「bluebacks」ディレクトリに

wheezy どちらの系列の Raspbian でも「sudo」は省略可能で

あ れ ば sudo python /home/pi/bluebacks/07-03-LCD-temp.py

す。正しく記述できたら、ファイルを保存してから Leafpad をと記述することになります。

終了しましょう。
以上が済んだら、Raspberry Pi を再起動してみましょう。

●プログラムを Raspberry Pi 起動時に自動実行プログラムが自動的に実行されているはずです。温度センサに

前述の内容を Raspberry Pi の OS が起動するときに実行されるようにします。そのため、起動するときに実行されるファイルである /etc/rc.local に記述します。

指を近づけるなどして、LCD 上の温度の読みが変動することを確認しましょう。
温度が変動しない場合、それは以前の LCD の表示がそのま

実際に記述してみましょう。まずターミナルを起動し、ま残っているだけであり、プログラムが自動的に実行されていsudo leafpad /etc/rc.local の コ マ ン ド で フ ァ イ ル /etc/ない可能性があります。もう一度ファイル /etc/rc.local の記

rc.local を管理者権限の Leafpad で開きます。なお、システ

述を見直してみましょう。

ム領域のファイルを編集するため、jessie と wheezy どちらの系列の Raspbian でもここでの「sudo」は必要です。

●タクトスイッチによる Raspberry Pi のシャットダウン

ファイル /etc/rc.local の末尾には「exit 0」という行があプログラムが自動的に実行されていることを確認したら、今ります。その行の手前に、前項で述べたプログラムを実行する

度は一旦 Raspberry Pi をシャットダウンし、キーボード、マためのコマンドを１行記述します。

ウス、ディスプレイを外した上で再び Raspberry Pi に電源を入れてみましょう。ここではネットワークケーブルも外して構いません。PC というよりはより「回路」らしい状態でデジタ

sudo python /home/pi/07-03-LCD-temp.py &exit 0

１行追加するル温度計が機能することがわかるはずです。
ただし、この状態のままでは Raspberry Pi にシャットダウ

サンプルファイルが「bluebacks」ディレクトリにある場合

ンの指令を与えることができません。そこで、次はこの部分をは、上記コマンドを「sudo python /home/pi/bluebacks/07-

改善します。ひとまずキーボード、マウス、ディスプレイを接03-LCD-temp.py &」に変更してください。

続し直して、これまでどおり Raspberry Pi を操作できるよう

13

14

7章

にしましょう。
キーボード、マウス、ディスプレイを接続せずに Raspberry

Ⅰ2Cデバイスの利用

ファイル /etc/rc.local を保存し、Raspberry Pi を再起動
すると、プログラムが自動実行されない状態で起動します。

Pi の電源を切る方法は、PDF ファイルの 5.8 に説明があります。ブレッドボード上に、書籍の 113 ページ図 5-9 の回路のタ
クトスイッチの部分だけを追加します。

7.6

小型 LCD にカタカナを表示する

タクトスイッチで Raspberry Pi をシャットダウンするプロ

7.3 で用いたプログラム 7-2（07-02-LCD.py）は実はカタカ

グ ラ ム が 記 述 さ れ た サ ン プ ル フ ァ イ ル は、05-06-sw-

ナも表示できるようなプログラムとなっています。その方法をpoweroff.py でした。これを自動実行するためのコマンドは、

ここで紹介しましょう。

「sudo python /home/pi/05-06-sw-poweroff.py &」となります。このコマンドは、サンプルを bluebacks ディレクトリに展

07-02-LCD.py の 82 ～ 83 行目に、「#」によるコメントアウ
トで無効にされた下記の２行があります。

開した場合は「sudo python /home/pi/bluebacks/05-06-swpoweroff.py &」となります。これを、前項のようにファイル#s = chr(0xd7)+chr(0xbd)+chr(0xde)+chr(0xcd)+chr(0xde)/etc/rc.local の「exit 0」の１つ上の行に追記すれば希望の+chr(0xd8)+chr(0xb0)+' '+chr(0xca)+chr(0xdf)+chr(0xb2)動作を実現できます。

#write_string(s)●プログラムの自動実行を無効に戻す
最後に、プログラムを自動実行する設定を無効にして、もとの設定に戻す方法を解説しましょう。

この２行は LCD に「ラズベリー パイ」というカタカナを表示するためのものなのですが、これを有効にするために下記の変更を行ってみましょう。

キーボードとマウスを接続して、ファイル /etc/rc.local を
管理者権限の Leafpad で開き、自動実行したコマンドの先頭に「#」を記述することでコメントアウトします。
「exit 0」の行には手を付けずにそのまま残してください。
#sudo python /home/pi/07-03-LCD-temp.py &exit 0
自動実行用のコマンドの先頭に「#」を記述してコメントアウトする・78 行目の write_string('Hello World') の先頭に「#」を記述して無効にする・その後、上記２行の先頭の「#」を削除して有効にする
その後、07-02-LCD.py を上書き保存してから実行すると、LCD にはカタカナで「ラズベリー パイ」と表示されます。
「chr(0xd7)」の「0xd7」がカタカナ「ラ」の「文字コード」を表します。
「0x」は 16 進法の数字の先頭につけるのでしたか

15

16

8章

ら、
「ラ」の文字コードは 16 進法で d7 ということになります。この LCD モジュールで表示できる文字の文字コードの一
覧をまとめたのが図 7-8 です。

PWMの利用8.6.3  サーボモーター２個を同時に用いる
8.6.2 にてサーボモーター１個を精度の高い PWM 信号で制

図 7-8 を見ると、先ほど示した２行はカタカナ一文字一文字

御できるようになりました。Pi 1 B+ 以降では精度の高いの文字コードを chr 関数に渡し、それを「+」演算子で結合しPWM 信号は同時に２個出力できますので、その方法をここでていることがわかります。ただし、空白文字だけは英数字と同紹介します。１個の場合とほとんど変わりませんので、手順のじ扱いで一重引用符「’」で囲って表現しています。一旦変数

みを簡単に解説します。

s に格納してから、関数 write_string に渡していることにも注必要な回路は次ページの図 8-14 です。書籍の 211 ページの
図 8-13 と比べると、操作用の半固定抵抗とサーボモーターが意しましょう。
以上と同じ方法を用いると、図 7-8 に示されたさまざまな文
字を表示できますので試してみてください。

それぞれ１つずつ増えていることがわかります。また、２つのサーボモーターは GPIO 18 と 19 にそれぞれ接続されているのも見て取れるでしょう。
この回路を動かすためのプログラムが 08-06-2servos.py です。4.3.1 にしたがって管理者権限の IDLE で開いて実行します。8.6.2 と 同 様、wiringPi を 用 い た プ ロ グ ラ ム で す の でjessie 系列の Raspbian をお使いの方でも管理者権限が必要なのでご注意ください。うまく実行できると、２つの半固定抵抗のつまみに応じて、２つのサーボモーターの角度が変化することがわかるでしょう。

図 7-8

17

LCD に表示できる文字のコード表

18

9章

WebⅠOPiを用いたPCやスマートフォンとの連携

3.3V

SPⅠMOSⅠ(10)SPⅠ MⅠSO (9)SPⅠSCLK (11)PWM1 (19)9.7 サーボモーターの制御
この節では、８章で用いたサーボモーターをブラウザから制御します。８章では半固定抵抗によりサーボモーターを動かしましたが、本章では 9.5 と同様にブラウザのスライダを利用しGND

PWM0 (18)

SPⅠ CE0 (8)ます。
9.7.1  動作させるための手順

サーボモーターサーボモーター

本節の内容を実行するためには 8.6.1 でインストールした
WiringPi-Python を Python3 用にインストールしなおす必要があります。8.6.1 では Python2 用に WiringPi-Python をインストールしたのでした。まず 8.6.1 のインストール作業を終え
コネクタ

コネクタ

てから先に進みましょう。
ターミナルを起動し、下記のコマンドを順に実行してくださ
い。

黒赤白
または
茶赤黄

黒赤白
または
茶赤黄

① sudo apt-get update
−
（黒）

＋
（赤）

電池ボックス
単３×４
図 8-14② sudo apt-get install python3-dev python3-setuptools③ cd WiringPi-Python④ swig2.0 -python wiringpi.i⑤ sudo python3 setup.py install

２つのサーボモーターの角度制御用回路①はインストールできるパッケージのリストを更新しますので、ネットワークの状態に応じて数分の時間がかかります。②の命令は必要なパッケージをインストールしていますが、やはり数分の時間がかかります。このコマンドを実行するときは、「続行しますか？」や「検証なしにこれらのパッケージをイン

19

20

9章

PWM1 (19)

ストールしますか？」と聞かれることがありますので、その場WebⅠOPiを用いたPCやスマートフォンとの連携

合はキーボードの「y」をタイプしたあと［Enter］キーを押して続行してください。③では、8.6.1 におけるインストール
作業で作られた WiringPi-Python ディレクトリの中に移動しています。④と⑤で Python3 用のインストールを行っていま
サーボモーターを制御するための回路は図 9-14 です。２つす。
サーボモーターの角度をブラウザで変更するためには、

サーボモーター

ボモーターを１個しか接続していない状態でも正常に動作しま

サーボモーターのサーボモーターを同時に操作できる回路としましたが、サー

GND

PWM0 (18)す。以上でインストールは完了です。

9.2.5 でコピーしたサンプルファイル一式に含まれている「/
黒赤白
または
茶赤黄

黒赤白
または
茶赤黄

ログラムを読み込むよう設定してからWebIOPiを起動します。

コネクタ

ァイルを用います。設定ファイルを、この演習用の Python プ

コネクタ

usr/share/webiopi/htdocs/bb/07/」ディレクトリ内にあるフまず、設定ファイル /etc/webiopi/config を管理者権限のLeafpad で開き、その中の［SCRIPTS］セクションに、以下#myscript = /home/pi/webiopi/examples/scripts/macros/script.py
myscript = /usr/share/webiopi/htdocs/bb/07/script.py

電池ボックス
単３×４てから次の１行を追加してください）
。

−
（黒）

の設定が残っている場合、その行頭に「#」をつけて無効化し＋（赤）のように１行追加します（9.3 以降の演習で追加した myscript

図 9-14

サーボモーター２個を制御するための回路［SCRIPTS］
セクションに１行追加する

ンドで WebIOPi がすでに起動していないか確認してから、追加したら、設定ファイルを保存してから Leafpad を閉じまsudo service webiopi start で起動してください。すでに起動す。そして 9.2.3 で学んだように、ps ax | grep webiopi コマ

されている場合、sudo service webiopi stop コマンドで停止

21

22

9章

してから起動しなおしましょう。

WebⅠOPiを用いたPCやスマートフォンとの連携

タッチしてつまみを移動すると操作しやすいでしょう。
以下ではこの実現方法の概略を解説します。

9.7.2  動作確認
動作確認するために、PC やスマートフォンのブラウザで9.7.3  サンプルの解説「http://192.168.1.3:8000/bb/07/」 に ア ク セ ス し て く だ さ い

9.3.3 と同様、このサンプルを実現しているのは、/usr/（IP アドレスの部分は、皆さんの Raspberry Pi に割り当てら

share/webiopi/htdocs/bb/07/ ディレクトリにある４つのフれたものを記述します）。
「http://」を省略せず、末尾の「/」ァイルです。

（スラッシュ）も忘れずに記述しましょう。

index.html では下記のようにスライダ用の場所を確保してい正しくページが開かれると、図 9-15 のようなページが現れます。slider0_servo と slider1_servo が２つのスライダに対ます。設定によってはパスワードを聞かれますので、9.2.4 で応します。9.5 と同様に jQuery UI に含まれるものを用います。

学んだように入力してください。なお、図 9-15 のアドレス欄の末尾に「/」はありませんが、これはブラウザが省略表示し<div id="text0_servo">サーボモーター0の角度調整</div>ているだけで、実際にはアドレス末尾の「/」は入力されてい<div id="slider0_servo"></div>

ますのでご注意ください。２つのスライダがあり、それぞれ<div id="text1_servo">サーボモーター1の角度調整</div>

GPIO 18 と GPIO 19 に接続したサーボモーターの角度に対応<div id="slider1_servo"></div>

します。
9.5 と同様、スライダのつまみをつかんで移動する際、スマ

実際にスライダを配置しているのは JavaScript ファイルートフォンやタブレットのブラウザではつまみをタッチでつかjavascript.js 内部の下記の部分です。変数にセットされた初期

みにくい場合があります。そのような場合、スライダのバーを設定を渡してスライダを作成しています。具体的にはスライダの最小値（min）は 0、最大値（max）は 20、刻み幅（step）は1、初期値（sliderValue0）は 10 です。さらに、スライダの値が確定されたとき（change）、スライダを移動している最中（slide）に呼ばれるイベントハンドラ sliderHandler0 も渡し

スライダのつまみ

図 9-1523ています。これと同様の命令が slider1_servo に対しても適用されています。

ブラウザでサーボモーター２個を制御するためのサンプル画面

24

9章

WebⅠOPiを用いたPCやスマートフォンとの連携

なお、得られた ratio を「webiopi().callMacro("setHwPWM$( "#slider0_servo" ).slider({min: sliderMin,", [0, ratio, commandID++]);」という命令で Python スクリ

max: sliderMax,

プ ト script.py に 送 っ て い ま す。 こ の イ ベ ン ト ハ ン ド ラ は

step: sliderStep,

slider0_servo 用ですのでスライダの ID として 0 も一緒に送っ

value: sliderValue0,ています。slider1_servo 用には 1 を一緒に送ります。また、change: sliderHandler0,

commandID は 9.6.3 と同様の理由で追加しています。
送られた ratio は、script.py 内で下記のように PWM のデュ

slide: sliderHandler0ーティ比としてセットされます。ID が 0 の場合は GPIO 18 の});PWM に、ID が 1 の場合は GPIO 19 の PWM にデューティ比がイベントハンドラは下記のように定義されています。スライセットされていることがわかります。

ダの現在の値（ui.value）をスライダの最大値（sliderMax、
実 際 は 20） で 割 っ た 0.0 か ら 1.0 の 値 を Python ス ク リ プ ト

39 @webiopi.macro

script.py に送ることになります。なお、サーボの向きを逆に

40 def setHwPWM(servoID, duty, commandID):

したい場合「ratio = 1.0 - ratio;」という行を無効に、とい41

id = int(servoID)

う指示がありますが、先頭に「//」をつけて「// ratio = 1.

42

duty = getServoDutyForWebIOPi(float(duty))

0 - ratio;」とすることで無効化できます。２つのサーボ用に

43

if id==0:

２つ同じ命令がありますので、２つとも無効化して保存してく

44

ださい。

45
46

wiringpi.pwmWrite(18, duty)
elif id==1:
wiringpi.pwmWrite(19, duty)

var sliderHandler0 = function(e, ui){
getServoDutyForWebIOPi は同じく script.py 内で下記のよう

var ratio = ui.value/sliderMax;// サーボの回転の向きを逆にしたい場合次の行を無効にに定義されています。これは 8.6.2 で解説した内容とほとんど

ratio = 1.0 - ratio;

同じですので解説は省略します。

webiopi().callMacro("setHwPWM", [0, ratio, commandID++]);};

25

5 def getServoDutyForWebIOPi(val):6

val_min = 0.07val_max = 1.0
26

10章

8

servo_min = 36

# 50Hz(周期20ms)、デューティ比3.5%:

3.5*1024/100=約36
servo_max = 102 # 50Hz(周期20ms)、デューティ比10%:910*1024/100=約102
duty = int((servo_max-servo_min)*(val-val_min)/(val_max-val_min) + servo_min)12

キャタピラ式模型に搭載したカメラを上下に動かす（オプション）

10.5.1  準備
10.4 にてキャタピラ式模型にカメラを搭載しましたが、本

10
11

10.5

WebⅠOPiを用いたキャタピラ式模型の操作

return duty

節ではさらにそのカメラをサーボモーター１個により上下に動
かしてみましょう。カメラの左右方向の移動はすでにキャタピ
ラ式模型の移動によって実現されていますので、より広い範囲
を映像で確認できるようになります。

紙面スペースの都合、プログラムの８行目、９行目、11行目は複数行になっています。
本来１行のもので、途中に改行は入りません。

そのためには、まず 10.4 の動作確認が済んでいる必要があります。さらに下記の２つのインストールが必要です。それぞれの章に戻って順にインストールを済ませて先に進みましょう。
・Python2 対応の WiringPi-Python → 8.6.1 で解説
・Python3 対応の WiringPi-Python → 9.7.1 で解説
なお、本節のプログラムを動かすには Pi 1 B+ ではややパワー不足ですので、Pi 2 B や Pi 3 B を用いることを推奨します。
10.5.2  組み立て
次ページの図 10-11 がカメラにサーボモーターを取り付けた様子です。カメラにアームが取りつけられており、そのアームがサーボモーターにより上下に動きます。
サーボモーター、アーム、カメラのみを取り外して表示したのが図 10-12 です。これまでどおり、可能な限り TAMIYA のキットで実現しています。図中で「UP」と記されているのはユニバーサルプレートの付属品であり、「UA」と記されてい

27

28

10章

WebⅠOPiを用いたキャタピラ式模型の操作り）などを用いると、代用できます。
このように、カメラとサーボモーターの取り付けは、耐久性やメンテナンス性を考えるとすべてねじ止めするのが理想です。しかし、試してみるとわかりますが、これは工夫が必要な作業です。どうしても難しい場合は両面テープなどによる仮止めでもよいと思います。
サーボモーター
図 10-11

カメラをサーボモーターで操作できるようにしたキャタピラ式模型

軸受け材 P1（UP）

サーボホーン
サーボホーン用ビス

L 型アーム（UA）

10.5.3  動作させるための手順
作成すべき回路は次ページの図 10-13 です。これは、書籍の284 ページの図 10-6 の回路にサーボモーターを追加しただけのものです。
ブラウザからこの回路にアクセスするためには、9.2.5 でコピーしたサンプル一式に含まれている「/usr/share/webiopi/

3×10mm 丸ビスと2mm 径のネジとナット ナット（UA）
サーボホーン用ビス
図 10-12 カメラとサーボモーターを固定する方法

htdocs/bb/08/」ディレクトリ内にあるサンプルファイルを用います。以下のように、設定ファイルを、演習用の Python プ
ログラムを読み込むように設定してから WebIOPi を起動しましょう。

るのはユニバーサルアームセットの付属品であることを示してまず、設定ファイル /etc/webiopi/config を管理者権限のいます。サーボホーンとサーボホーン用ビスはサーボモーター

Leafpad で開き、この中の［SCRIPTS］セクションに、次のの付属品です。ここでは書籍の 59 ページの秋月電子通商のパように１行追加します。過去の演習の設定が残っていますのーツセットに含まれるサーボモーター SG90 を用いました。２

で、その行頭に「#」をつけて無効化してから、次の１行を追つのサーボホーンをニッパでカットして整形し、軸受け材 P1

加してください。

から吊り下げる方式でサーボモーターを固定しています。な
お、サーボホーン用ビスは４つ必要ですが、１つのサーボモー#myscript = /home/pi/webiopi/examples/scripts/macros/script.py

ターの付属品では足りないことがあります。２つめを購入してmyscript = /usr/share/webiopi/htdocs/bb/08/script.py

そちらの付属品を用いるか、ネットショップなどで取り扱われ［SCRIPTS］
セクションに１行追加するている「エスコ M2 ｘ 8mm ナベ頭タッピングビス」（40 本入
29

30

10章

WebⅠOPiを用いたキャタピラ式模型の操作

3.3V

Ⅰ2C SDA (2)Ⅰ2C SCL (3)GPⅠO 17GPⅠO 22

追加したら設定ファイルを保存してから Leafpad を閉じます。そして 9.2.3 で学んだように、ps ax | grep webiopi コマ
ンドで WebIOPi がすでに起動していないか確認してから、
sudo service webiopi start で起動してください。すでに起動

GND

PWM0 (18)

GPⅠO 23GPⅠO 24

サーボモーターGPⅠO 25

されている場合、sudo service webiopi stop コマンドで停止してから起動しなおしましょう。
10.5.4  動作確認
動作確認するために、PC やスマートフォンのブラウザで

コネクタ

黒赤白
または
茶赤黄

10kΩ

「http://192.168.1.3:8000/bb/08/」 に ア ク セ ス し て く だ さ い（IP アドレスは皆さんの Raspberry Pi に割り当てられたもの

上シュ）も忘れずに記述しましょう。
1

下

DCモーター
左側を記述します）。
「http://」を省略せず、末尾の「/」（スラッ操作ページが正しく動作すれば、次ページの図 10-14 のような画面が現れます。書籍の 293 ページの図 10-9 と比べると、カメラからの映像の右側にスライダが縦に表示されており、これを動かすことでサーボモーターを上下に操作することができ

上
10

下

DCモーター右側ます。
なお、このプログラムを書籍 282 ページで解説したようにディスプレイを接続しない状態で自動起動しようとすると、
NOOBS 1.9.1 以降の Raspbian では「キャタピラは動作するが、サーボモーターは動作しない」という状態になってしまい

−
（黒）

＋
（赤）

ます。この問題を解決するには、以下のように「Raspbian が電池ボックス
単３×４コンソールで起動する」状態にする必要があります。

図 10-1331

それを実現するため、48 ページ図 2-16 の設定用アプリケー
シ ョ ン を 起 動 し、
「 シ ス テ ム（System）」 タ ブ の「 ブ ー ト
カメラをサーボモーターで操作するための回路図（Boot）」項目にある「CLI（To CLI）」にチェックを入れ、再
32

付録

付録 F

抵抗のカラーコード
抵抗には色付きの帯が描かれています。これは抵抗の大きさを表しています。ここではその読み方を紹介します。
抵抗の帯の本数は、４本のものや５本のものなどがあります
が、多く見かけるのは４本のものです。判別する際は、図 F-1のように、帯の間隔が広い方や、端の帯が太いほうを右に置きます。帯の太さや間隔がほぼ左右対称に見えることもあります
が、入手しやすい抵抗では、片方の端が金色のことが多いので、その場合は金色を右に置くようにします。そうすると、数
図 10-14ブラウザによる操作用の画面

起 動 し て く だ さ い。 画 面 が 黒 い「 コ ン ソ ー ル 」 状 態 で値、乗数、誤差の意味を持つ帯が図のように配置されます。
4 本帯

5 本帯

Raspbian が起動し、本節のプログラムが自動起動で正常動作するようになります。
誤差

乗数

図 F-1

数値

の「ブート（Boot）」項目で「デスクトップ（To Desktop）」

誤差

行してデスクトップを起動してから、設定用アプリケーション

乗数

戻したい場合、コンソールで「startx」というコマンドを実数値

なお、Raspbian が黒いコンソールで起動する状態から元に抵抗上の帯の意味

それぞれの色の意味は次ページの表 F-1 のとおりです。

を選択し、再起動してください。

33

34

付録

表 F-1

抵抗の色の意味

色

数値

乗数

付録 G
誤差

入手しやすいⅠ2C 接続のセンサ用サンプルファイル

黒

0

1

−

茶

1

101

±1%

赤

2

102

±2%

オレンジ

3

10

±0.05%

黄

4

104

−

緑

5

5

10

±0.5%

青

6

6

10

±0.25%

記述済みのサンプルファイルに含めました。表 G-1 はその一覧
です。

3

紫

7

10

±0.1%

グレー

8

108

−

白

9

109

−

銀

−

10-2

±10%

金

−

10

±5%

無色

−

−

±20%

7

-1

ここでは、本書でよく用いる 330Ωと 10kΩの抵抗の読み方を記しておきましょう。
・330Ω
オレンジ、オレンジ、茶、金→ 33×101Ω±5% = 330Ω（誤差±5%）・10kΩ
茶、黒、オレンジ、金７章で述べたように、I2C 接続のセンサの値を読むプログラ
ムを書くことは、プログラムの学び始めのレベルではなかなか大変です。そこで、入手しやすいセンサのためのプログラムを

表 G-1

記述済みのサンプルファイルで用いることのできるⅠ2C 接続センサ

サンプル
備考
ファイル名
温度
千石電商
07-04- 温度を計測する
センサ（SEN-11931） temp.py
加速度
LⅠS3DH 秋月電子通商
07-05- センサを動かしたとセンサ（K-06791）
acc.pyきの加速度（速度のを計測する。セADXL345 秋月電子通商
07-06- 変化）
ンサをゆっくり動か（M-06724）
acc.pyしているときの傾きも知ることができるコンパス HMC6352
千石電商
07-07- センサが北の方角か（SEN-07915） mag.py ら何度ずれているかを計測する
大気圧計 MPL115 秋月電子通商 07-08-bar. 大気圧をヘクトパス（Ⅰ-04596）py
カル単位で計測する
LPS331 秋月電子通商 07-09-bar.
（M-06679）
py
ジャイロ L3GD20 秋月電子通商
07-10- センサを動かしたとセンサ（K-06779）
gyro.py きの角速度
（回転の速
さ）
を計測する
種類

搭載
チップ
TMP102型番など→ 10×103Ω±5%=10×1000Ω±5%=10kΩ（誤差±5%）
本書では、各センサの使用法の解説は割愛しています。7.2
最後の計算では、1000Ω=1kΩという関係を用いています。
35

で扱った温度センサの演習がヒントになりますし、プログラム
36

付録

中のコメントに回路の接続方法などが記されていますので、参考にしてください。

付録 H

raspi‑config を用いた
Raspberry Pi の設定

H.1 raspi-config とは
jessie 系列の Raspbian では GUI による設定用アプリケーシ

図 H-1

raspi-config による設定画面

ョンを用います。本書でもすべてこの設定用アプリケーション
で解説を行いました。一方、wheezy 系列の Raspbian ではタ・上下の矢印キー（［↑］と［↓］）：選択する項目を移動しますーミナルで操作する raspi-config を用いて設定を行っていまし・
［TAB］キー：項目、<Select>、<Finish> 間を移動しますた。jessie 系列の Raspbian でも利用可能ですので、ここでそ・スペースキー：チェックボックスのチェック状態（[*]）と解の利用法を紹介しましょう。

除状態（[ ]）の変更を行います・［Enter］キー：カーソル位置の項目を決定します

H.2

設定画面の操作方法

raspi-config を利用するには、ターミナルを起動して下記のそれでは、次ページの図 H-2 を参考に操作を練習してみましょう。設定画面中央には複数の設定項目があり、１番目の項目

コマンドを実行します。

が赤く選択されています。ここで上下の矢印キーを押すこと

sudo raspi-config

で、選択される項目が変化します。ここで［TAB］キーを２すると、図 H-1 のような設定画面がターミナル上で開きま回押すと、選択項目が「<Select>」、「<Finish>」と順に変化

す。この画面ではマウスは使えませんのでキーボードのみで操し、さらに［TAB］キーをもう一度押すことで元に戻りま

作を行います。用いるキーは次のとおりです。

す。これが操作の基本です。なお、「<Finish>」が選択された状態で［Enter］
キーを押すと、raspi-config が終了することも

37

38

付録

［↑］
キー、
［↓］
キーで移動

（少し時間がかかります）③言語選択画面になりますので、［↓］キーを押してスクロー
ルし、「ja_ JP.UTF-8 UTF-8」にカーソルを合わせ、スペースキーを押します。すると [*] とチェックが入ります④［TAB］キーを押し、「了解（Ok）」にカーソルを合わせ、［Enter］キーを押します⑤デ フ ォ ル ト の 言 語 を 聞 か れ ま す の で、
［ ↓ ］ キ ー で ja_
JP.UTF-8 を赤く選択し、［Enter］キーを押します（少し時間がかかります）

［TAB］
キーで移動

［TAB］
キーで移動

［TAB］
キーで移動

以上の設定が済むと、 38 ページの図 H-1 に戻ります。
図 H-2

raspi-config でのキー操作

知っておくとよいでしょう。
以下では、本書で行ったさまざまな設定をこの raspi-config
でどのように実現するのかを紹介します。

H.3

言語の変更

言語を日本語に変更するには、下記の流れに従います。ただし、２章で注意したように、jessie では事前に日本語フォント

H.4 タイムゾーンの変更
タイムゾーンを東京（標準時から＋９時間）に設定するには
下記の流れに従います。
①「5 Internationalisation Options」を選択して［Enter］キーを押します②「I2 Change Timezone」を選択して［Enter］キーを押します（少し時間がかかります）

をインストールしないと文字化けしてしまうのでした。前ペー③地 域 の 選 択 画 面 に な り ま す の で、［↑］キーを押してジの図 H-1 からの設定の流れを記すと下記のようになります。

「Asia」を選択して［Enter］キーを押します④都 市 の 選 択 画 面 に な り ま す の で［ ↓ ］ キ ー を 押 し て①「5 Internationalisation Options」を選択して［Enter］キーを押します「Tokyo」を選択して［Enter］キーを押します（少し時間がかかります）②「I1 Change Locale」を選択して［Enter］キーを押します
39

40

付録

以上の設定が済むと、 38 ページの図 H-1 に戻ります。

（No compose key）
」を選択して［Enter］キーを押します⑨［Control］+［Alt］+［Backspace］キーについての質問に

H.5 キーボードレイアウトの変更
デフォルトの状態では Raspbian のキーボードとして英語キ

は「はい（Yes）」を選択して［Enter］キーを押します
以上の設定が済むと、図 H-1 に戻ります。

ーボードが設定されています。これを日本語 109 キーボードに変更するには、以下のように設定します。
①「5 Internationalisation Options」を選択して［Enter］キーを押します②「I3 Change Keyboard Layout」を選択して［Enter］キー

H.6 カメラ有効化
5.6 や 10.4 などでは、Raspberry Pi にカメラを取り付けて利用しました。raspi-config でカメラを有効にするには、以下のように設定します。

を押します（少し時間がかかります）③キーボードモデルの選択画面になりますので、「標準 105 キ①「6 Enable Camera」を選択して［Enter］キーを押しますー（国際）PC（Generic 105-key (Intl) PC）」にカーソルを②「Enable support for Raspberry Pi camera?」と質問され合わせ［Enter］キーを押します④レイアウトの選択画面になりますので［↓］キーを押して「その他（Other）」にカーソルを合わせ［Enter］キーを押
します

ますので、
「Enable」にカーソルを合わせ、［Enter］キーを押します③ raspi-config を終了すると、Raspberry Pi の再起動を促されますので再起動します⑤言語選択の画面になりますので、［↓］キーを押して「日本語（Japanese）」を選択して［Enter］キーを押します⑥レイアウトの選択画面になりますので［↑］キーを押して「 日 本 語 – 日 本 語（OADG 109A）（Japanese – Japanese(OADG 109A)）」を選択して［Enter］キーを押します⑦ AltGr キーについての質問には「キーボード配置のデフォル

H.7 Ⅰ2C 有効化
７章では、Raspberry Pi に I2C 接続の温度センサと LCD を取り付けて利用しました。raspi-config で I2C を有効にするには、以下のように設定します。

ト（The default for the keyboard layout）」を選択して［Enter］キーを押します⑧ Compose キーについての質問には「コンポーズキーなし
41①「9 Advanced Options」を選択して［Enter］キーを押し
ます
42

付録

②「A7 I2C」にカーソルを合わせ、［Enter］キーを押します［Enter］キーを押します③「Would you like the ARM I2C interface to be enabled?」④「The SPI interface will be enabled after a reboot」と表と質問されますので、「はい（Yes）」にカーソルを合わせて

示 さ れ ま す の で「 了 解（Ok）」にカーソルを合わせて［Enter］キーを押します［Enter］キーを押します④「 The ARM I2C interface will be enabled after a⑤「Would you like the SPI kernel module to be loaded byreboot」と表示されますので「了解（Ok）」にカーソルを合

default?」と質問されますので、「はい（Yes）」にカーソル

わせて［Enter］キーを押します

を合わせて［Enter］キーを押します⑤「Would you like the ARM I2C kernel module to be⑥「SPI kernel module will now be loaded by default」と表

loaded by default?」と質問されますので、「はい（Yes）」

示 さ れ ま す の で「 了 解（Ok）」にカーソルを合わせてにカーソルを合わせて［Enter］キーを押します⑥「I2C kernel module will now be loaded by default」と表示 さ れ ま す の で「 了 解（Ok）」にカーソルを合わせて［Enter］キーを押します⑦ raspi-config を終了すると、Raspberry Pi の再起動を促されますので再起動します［Enter］キーを押します⑦ raspi-config を終了すると、Raspberry Pi の再起動を促されますので再起動します

H.8

SPⅠ有効化配布 PDF 内の 6.6 では SPI モジュールを用いて SPI 通信を行いました。raspi-config で SPI を有効にするには、以下のように設定します。
①「9 Advanced Options」を選択して［Enter］キーを押します②「A6 SPI」にカーソルを合わせ、［Enter］キーを押します③「Would you like the SPI interface to be enabled?」と質問されますので、「はい（Yes）」にカーソルを合わせて
43

44

３章から10章の参考文献

３章から 10 章の参考文献
以下で紹介する３章以降の参考文献は、すべて英語で書かれたウェブサイトとなっています。英語で書かれたウェブサイト

・「RPi.GPIO Python Module」
https://sourceforge.net/p/raspberry-gpio-python/wiki/
Home/を参考にした理由は、Raspberry Pi は英国で開発されたものであり、網羅的な情報に関しては海外に一日の長があるからです。
なお、以下で紹介するウェブサイトは、PDF ファイル上ではリンクとして掲載しています。実際にウェブサイトをご覧になるときは、URL 上をクリックしてください。

６章
spidev を用いずに AD コンバータを用いる方法は、Adafruitの次のページを参考にしています。
・「Analog Inputs for Raspberry Pi Using the MCP3008」
https://learn.adafruit.com/reading-a-analog-in-andcontrolling-audio-volume-with-the-raspberry-pi/

３章

overview

Raspberry Pi の GPIO などに関する情報は、次のサイトにまとめられています。
・「RPi Low-level peripherals」
http://elinux.org/RPi_Low-level_peripherals

spidev を用いるための情報は、次のページが参考になります。
・「py-spidev」
https://github.com/Gadgetoid/py-spidev

また、GPIO の電気特性などは、公式情報ではありませんが次のページが参考になります。
・「GPIO Electrical Specifications」

７章
Python から I2C を用いる方法は、次のページにまとめられ

http://www.mosaic-industries.com/embedded-systems/ています。

microcontroller-projects/raspberry-pi/gpio-pin-

・「Using the I2C Interface」

electrical-specifications

http://www.raspberry-projects.com/pi/programming-inpython/i2c-programming-in-python/using-the-i2c-

４章から５章interface-2

GPIO を Python で制御するための RPi.GPIO モジュールの使
い方は、次のページの「Examples」という箇所にまとめられ
ています。
45

８章
PWM 信号を生成するための「精度の低い方法」は、４章か46

３章から10章の参考文献

ら５章の参考文献で紹介した「RPi.GPIO Python Module」ペ

また、Raspberry Pi 用カメラモジュールの映像を配信する

ージの PWM ページで解説されています。

方法は、次のページを参考にしました。

・「Using PWM in RPi.GPIO」

・「Raspberry Pi camera board video streaming」

https://sourceforge.net/p/raspberry-gpio-python/wiki/

https://miguelmota.com/blog/raspberry-pi-camera-

PWM/

board-video-streaming/

WiringPi を用いた「精度の高い方法」は、次のページにまなお、ここに掲載されているウェブサイトの URL は、すべ

とめられています。

て 2016 年５月時点のものです。皆さんがご覧になる際は、変・「WiringPi (Functions (API))」

更されている可能性があります。あらかじめご了承ください。

https://projects.drogon.net/raspberry-pi/wiringpi/
functions/
WiringPi で生成する PWM 信号の周波数の決定方法は、次のページを参考にしました。
・「Control Hardware PWM frequency」
http://raspberrypi.stackexchange.com/questions/4906/
control-hardware-pwm-frequency
９章から 10 章
WebIOPiについての情報は、公式ページがまず役立ちます。
・「WebIOPi -The Raspberry Pi Internet of Things
Framework」
http://webiopi.trouch.com
あとはソースコードに含まれるサンプルコードや、トップページの webiopi.js が参考になるでしょう。

47

48