見本ラズパイの世界

Introduction 1

世界中で使われているラズベリー・パイ大図鑑

ハード＆ソフト Ｉ ／Ｏ制御の基本

定番コンピュータ・ボード「ラズパイ」 の世界
永原 柊 Shu Nagahara

定番ラズベリー・パイ 4 モデル B
表1

ラズベリー・パイ 4 モデル B の主な仕様
項目

値など

SoC

BCM2711

有線 LAN 10/100/1000

値など

Wi−Fi

IEEE 802.11

CPU

Cortex−A72

コア数

4b/g/n/ac

クロック

1.5 GHz

2.4/5 GHz

RAM
ストレージ

1, 2, 4, 8 G バイト Bluetooth○

microSD

カメラ

MIPI CSI−2

USB 2.0/3.0

2/2

ディスプレイMIPI DSI

GPIO

40 ピン

HDMI

Micro×2

ラズベリー・パイ 4 モデル B

見本り，クロックも高速化しています．
▶ RAM 容量のバリエーション化
RAM はラズパイ 2 以降 1 G バイトしか選択肢がありませんでしたが，ラズパイ 4B では 1 G バイト，2 G
バイト，4 G バイト，8 G バイトが用意されました .

電源は従来の USB Micro−B コネクタに代わってUSB Type−C コネクタになり，スマートフォンの充電器などを流用しやすくなっています．

細かいバージョンを入れるともっと種類があるのですが，
ここでは主要なものに絞りました．

5

実用的に動かす▶ USB 3.0 対応
USB コネクタは 1B 以降変わらず 4 個ですが，4B
ではそのうち 2 個が USB 3.0 対応になっています．
▶ディスプレイ 2 系統化
ラズパイ 4B で初めてディスプレイ・コネクタが 2系統用意され，しかも解像度は 4K に対応しました．
ただし 2 台のディスプレイで同時に 4K 表示すると，
リフレッシュ・レートは 30 Hz になります．また，小型化のため HDMI Micro コネクタに変更されました．
▶有線イーサネットの高速化
ギガビット・イーサネットに本格的に対応しました．2B までは 100 Mbps 対応でした．ラズパイ 3B＋はギガビット・イーサネットに対応していましたが， ハ ー ド ウ ェ ア の 制 約 で ス ル ー プ ッ ト は 300
Mbps が上限でした．ラズパイ 4B ではその制約がなくなっています．
▶電源コネクタが USB Type−C に変更

カメラ＆ネット

ラズベリー・パイ（Raspberry Pi，ラズパイ）
は教育目的で開発された，世界中で使われているコンピュータ・ボードです．その中でラズパイ 4B は，初代モデル B から B＋，2B，3B，3B＋と続いている，
モデル B 系列の最新版です（2023 年執筆時点）．高性能化により，組み込み用途だけでなく，パソコンとしても十分使えるようになった，といえます．特に教育用途であれば，何の問題もないでしょう．本書でもこのボードを使用しています．外観を写真 1に，主な仕様を表 1 に示します．
ラズパイ 4B は，従来のものに比べてさまざまな点で改良が加えられています．
▶高性能化
SoC が変更され，CPU が Cortex−A72 ベースになよく使うＩ ／Ｏ

写真 1

項目

Introduction
小型系列 ラズベリー・パイZero 2 W
2023 年執筆時点で最後に発売されたラズパイで，小型の Zero 系列です．外観を写真 2 に，主な仕様を
表 2に示します．
Zero W と同じ無線機能を搭載したまま，SoC を
RP3A0 というカスタム品に変更しました．この SoCの CPU は， ラ ズ パ イ 3 A+ と 同 じ 4 コ ア の Cortex−
A53 に強化されています．CPU クロックは 1 GHz です．RAM 容量は 512 M バイトで，ラズパイ Zero W

から変更ありません．このように書くと，ラズパイ
Zero W との違いが小さいように思うかもしれません．しかし Zero W は 2012 年の初代ラズパイと同じ
SoC を使っているので，性能が低く抑えられています．
それに対して Zero 2 W では SoC を更新することで，少々重い処理でも実用的な性能で実行できます．公式サイトには，若干宣伝文句のようですが，Zero W
より 5 倍高速化したという記述があります．
表2

写真 2

ラズベリー・パイ Zero 2 W の外観

ラズベリー・パイ Zero 2W の主な仕様
項目

値など

項目

SoC

BCM2710A1

有線 LAN

値など−

CPU

Cortex−A53

Wi−Fi

IEEE 802.11

コア数

4

b/g/n

クロック

1 GHz

2.4 GHzRAM

512 M バイト

Bluetooth

○

ストレージ

microSD

カメラ

MIPI CSI−2

USB 2.0/3.0

1/−

ディスプレイ

−

GPIO

40 ピン

HDMI

ミニ

ラズパイという名のマイコン・ボード Pico
ラズベリー・パイという名前は付いていますが，Linux は動かず，純然たるマイコン・ボードです（写真 3，表 3）．マイコン・ボードとしてはシンプルな作りで，この半導体不足の状態でも入手は容易です．
ラズベリー・パイ財団が新たに開発した，RP2040

写真 3

ラズベリー・パイ Pico の外観というマイコンを搭載しています．CPU は 2 コアの
Arm Cortex−M0+ です．RP2040 単体でも販売され
ています．
表3

ラズベリー・パイ Pico の主な仕様
項目

値など

項目

値など

SoC

RP2040

GPIO

40 ピン

CPU

Cortex−M0+

有線 LAN

−

コア数

2

Wi−Fi

−

クロック

133 MHz

Bluetooth−RAM

264 K バイト

カメラ

−

ストレージ

2 M バイト

ディスプレイ−USB 2.0/3.0

1/−

HDMI

−

Wi−Fi 付き Pico W

見本

PicoにWi−Fi（2.4 GHz 802.11 n）
を追加したボードです．外観を写真 4 に，主な仕様を表 4 に示します．
Wi−Fi搭載以外には，
Picoと大きな違いはありません．
ただし，2023 年執筆時点では，入手できるボードには技適表示がありません．このボードの Wi−Fi を

写真 4
6

ラズベリー・パイ Pico W の外観

No.163使う場合は電波暗室内で動かすか，特例制度を使うなどの対策が必要です．
表4

ラズベリー・パイ Pico W の主な仕様

項目

値など

項目

値など

SoC

RP2040

GPIO

40 ピン

Wi−Fi

IEEE 802.11 n

CPU

Cortex−M0+

コア数

2

クロック

133 MHz

Bluetooth−RAM

264 K バイト

カメラ

−

ストレージ

2 M バイト

ディスプレイ−USB 2.0/3.0

1/−

HDMI

−

有線 LAN−

2.4 GHzIntroduction 2だから便利…ハードもソフトも単純部品を組み合わせる世界

ラズパイを生かす…
本書のコンセプト

永原 柊 Shu Nagahara
2012 年に初代 Raspberry Pi が衝撃的に登場してから 10 年以上が経過しました．登場した当初は入手まで半年待ちといった状況でしたが，今では容易に入手でき，幅広く利用されています．
いろいろなところで活用事例も多数紹介され，具体的な操作手順についても解説されています．また，
Raspberry Pi OS の中核であるカーネルに関する説明も出版物やブログなどで見られます．
このように数多く用いられ，活用のための情報もそろっているように思えますが，実際に何か動くものを作ろうとすると，途端にわからないことが出てくるのではないでしょうか．

そこで，もう少し楽に取り組めるようにならないか，と考えて本書を執筆しました．
本書では，まずコマンド入力で LED などの対象を操作します．次にそのコマンド操作を基に，単純な機能のプログラムとして実現します．そして，その単純な機能の組み合わせにより，より複雑なものを作っていきます．
言わば，まず単機能のソフトウェアの部品を作り，次にその部品を組み合わせて動くものを作る，という感じです．本書がみなさまの困りごとに少しでも役立てば幸いです．

見本16

No.163

第1部
第1章

ラズパイのハード＆ソフト

まずはコンピュータ本体を知る

ラズベリー・パイのハードウェア構成
永原 柊 Shu Nagahara

Raspberry Pi（ラズベリー・パイ，以下ラズパイと表記）は，もともとプログラミング学習用の安価なコンピュータとして開発されました．安価で汎用性が高く，幅広い用途に用いられています．
ラズパイは初代から 2，3，4 と強化されてきました．

また Zero という小型のタイプや，組み込み用途の「Compute Module」も用意されています．
ラズベリー・パイ 4 ともなると，ちょっとしたパソコンとして使えます．実際に，キーボード一体型のパ
ソコン「ラズベリー・パイ 400」も販売されています．

1 ラズベリー・パイのハードウェア構成
本書で使用したラズパイを図 1，写真 1 に示します．
主要な部品は表面［写真 1（a）］に実装され，裏面［写真 1（b）］は microSD カード・ソケットが目立つ程度
です．
外部とのインターフェースが充実しているのが特徴
です．特に 40 ピンの拡張端子は，本書で扱うような電子工作を行うには欠かせません．
SoC（System−on−a−Chip）には BCM2711 を搭載しており，最高 1.5 GHz で動作する Arm Cortex−A72×4 を
CPU のコアとして，GPIO や I2C，SPI などのインターフェースを内蔵しています．

40ピン拡張端子

Wi-Fi，
Bluetooth
モジュール

SDIO

microSD
カード・スロット

microSDカー
ド・インター
フェース

DSIディス
プレイ・
コネクタ

PWM

18

I2C
インター
フェース

SPI
インター
フェース

イーサネット・モジュール（BCM54213）

見本

DSIディスプレ
イ・インター
フェース

DC-DC
コンバータ
電源用
（3.3V/1.8V/1.1V）
USB
コネクタ（5V, 3A）
図1

GPIO

有線LAN
コネクタ

SoC（BCM2711）

モリ
（RAM）

CPU／GPU

HDMI
インター
フェース

カメラ・
インター
フェース

映像/音声
出力インター
フェース

マイクロ
HDMI
コネクタ
×2

CSI
カメラ・
コネクタ

コンポジット
出力ジャックラズベリー・パイモデル B のハードウェア構成

No.163

USB
コントローラ
（VL805）

USB3.0コネクタ
×2
USB2.0
コネクタ
×2

ラズベリー・パイ4モデルB

第1章 ラズベリー・パイのハードウェア構成
SoC（Broadcom
BCM2711）マイクロ HDMI
コネクタ

PoE 電源端子

CSI カメラ・コネクタ

10M/100M/1G ビット
有線 LAN コネクタ

コンポジット出力
4 極 3.5mm ジャックUSB3.0 Type‑A
コネクタ ×2

USB2.0 Type-A
コネクタ ×2（a）表面
microSD カード・スロット

カメラ＆ネット
実用的に動かす

見本
（b）裏面

写真 1

よく使うＩ ／Ｏ

電源用 USB
Type‑C コネクタ

RAM

ハード＆ソフト Ｉ ／Ｏ制御の基本

DSI ディス
プレイ・コ
ネクタ

40 ピン拡張端子（左下が 1 番ピン）

ラズパイの世界

Wi-Fi，
Bluetooth

ラズベリー・パイ 4 モデル B の外観

19

第2章

起動用 microSD の作成から起動後の設定まで

ラズベリー・パイのソフトウェア環境
永原 柊 Shu Nagahara

さっそくラズパイを使える状態にしていきましょう．
専用のツールが用意されているので，詳しい知識がな
くても設定できるようになっています．
ラズパイを動かすには，まず，起動用 microSD カードを作成します．作成した microSD カードをラズ
パイのスロットに差し込んで電源を ON にするとラズパイが起動するので，各種設定を行います．

ラズパイが出始めたころは起動用の microSD カー
ドを準備するだけで一苦労でしたが，今では専用ソフトウェアで簡単にできるようになりました．
起動用 microSD カードを作成する方法はいくつか用意されていますが，本章では最も基本的なやりかたを説明します．

起動用microSDカードの作成
起 動 用 microSD カ ー ド の 作 成 は，「Raspberry Pi
Imager」というツールを用いて行います．このツールを使ってmicroSDカードにラズパイ用のOS（Raspberry
Pi OS）をインストールします．
私が使用した microSD カードを写真 1 に示します．
容量 32 G バイト，Class 10 のカードがお勧めです．
起動用 microSD カード作成時に使用する機材を図 1に示します．筆者はパソコンに Windows 機を使用しました．メモリ・カード・リーダ / ライタは，パソコン内蔵のものを使用し，microSD－SD カード変換アダ
プタを介して接続しました．

容量 32G バイト

写真 1

使用した microSD カード

図 3 に示す，Raspberry Pi OS の Web ページが表示
さ れ ま す． こ の ペ ー ジ を 下 に ス ク ロ ー ル す る と，
Raspberry Pi Imager のインストーラをダウンロード
するリンクがあります．
自分の環境に合わせて，ツールのインストーラをダ
ウンロードします．Windows の場合は［Download forWindows］，macOS の場合は［Download for macOS］
を選びます．

見本

パソコンにRaspberry Pi Imagerを
インストールする● ダウンロードツール（Raspberry Pi Imager）のダウンロードから始めます．ラズパイの公式 Web サイト（https://www.
raspberrypi.com/）を 開 い て， メ ニ ュ ー の 中 に あ る「Software」をクリックします（図 2）注 1．

注 1： 以 前 は，Raspberry Pi 財 団 の Web サ イ ト https://www.
raspberrypi.org/ が ラ ズ パ イ の 公 式 ペ ー ジ と な っ て お り，－［Software］とメニューをたどる形になっていた．
［Computers］
今後も Web サイトの画面やメニューなどは変更になる可能性があるので，適宜読み替えていただきたい．

22

No.163

Class 10● インストールダウンロードしたツールをパソコンにインストール
して，使えるようにします．
インストールの手順は，画面で指示されるとおりに行 い ま す． そ の 後 の 操 作 手 順 や 画 面 の 見 た 目 はWindow でも macOS でも同じです．以降，Windows版の例で説明します．
ダウンロードしたインストーラを起動すると，ツー

2

第 部

第2部

第3章

ラズパイI/O 制御の基本メカニズム

ラズパイI/O 制御の基本メカニズム

定番のLチカ…まずは対話的に出力信号レベルを指定してみる

コマンド操作によるピン出力の制御永原 柊 Shu Nagahara
まずは理解を深めるために，外付けした LED の点滅から始めます．
ラズパイでハードウェアを操作する方法は，マイコンのプログラムによる操作とは全く異なっています．

ラズパイの拡張端子（GPIO ピン）に LED を接続して，コマンド・ラインからの操作によって対話的に点滅させてみます．

外付け LED を制御するためのハードウェア構成
ラズパイに用意された 40 ピン拡張端子にある多数の GPIO のピンの中から，ここでは 16 番ピンにある
GPIO23 を利用します．図 1 のように GPIO に LED と
1 kΩの電流制限用抵抗をつなぎます．GND は 14 番ピンを使います．
ブレッドボードを使った接続のようすを写真 1 に示します．後章で部品を追加するので，大きいブレッド
ボードを使用しました．

GPIO23（P16）
GND（P14）

抵抗

赤色LED

1k

ラズパイ・ボード
図1

外付け LED を使った回路図

外付けLED
電流制限用抵抗（1kΩ）

見本
GND（P14）

ブレッドボード（後の章で部品を追加していく）GPIO23（P16）

3.3V（後の章で使用する）

写真 1

外付け LED を使った実験のようす

後の章で部品を追加するので，大きいブレッドボードを使用した

No.163

34034-03901印

第2部3章.indd 34

2023/06/16 19:03

2

第 部

第4章

ラズパイI/O 制御の基本メカニズム
定番のLチカ…プログラムで出力信号レベルを自動的に操る

シェル・スクリプトによるピン出力の制御永原 柊 Shu Nagahara

ラズパイでは，コマンド・ラインからの操作を，ほぼそのままプログラムにすることができます．ラズパ

イの標準 OS である Raspberry Pi OS には，そのためのしくみが用意されています．

シェル・スクリプトで作るプログラムのしくみ
ラズパイでは，キーボードからの入力はシェルというプログラムが受け取って処理しています．つまり，キーボードがシェルの入力とつながっているイメージです．
もし図 1 のように，シェルの入力をファイルにつなぎ替えることができれば，シェルはそのファイルの内容を読み取って，キーボードから入力されたかのように処理することができそうです．そのファイルに，キーボード入力するのと同じ内容を書いておけば，シェルにはキーボード入力したときと同じ入力があり，同じ動きができます．ということは，このファイルはあシェルの入力をファイルに切り替えると，キー入力と同じ内容を何度でもシェルに入力できる（つまり，プログラムとして使える）

る種のプログラムと言えそうです．
ラズパイは，このようなしくみを備えています．シ
ェルへの入力になるファイルは，シェル・スクリプトと呼ばれます．プログラミング言語を知らなくても，
コマンド・ラインから操作する内容をシェル・スクリ
プトにすることで，そのままプログラムになります．
本章では「GPIO の事前準備をするシェル・スクリ
プト」，「後始末をするシェル・スクリプト」，「LEDを点灯するシェル・スクリプト」，「LED を消灯する
シェル・スクリプト」の 4 つを作ります．

入力がキーボードから来たのか，ファイルから来たのかに関係なく，同じ入力があれば同じ動作をする

見本
シェル

キー入力：
echo 23 > /sys/class …
echo out > /sys/class …
echo 1 > /sys/class …

キー入力と同じ内容を書いたファイル

図1

シェルへの入力を切り替える

キー入力内容をファイルに記録しておけば，プログラムとして何度でも実行できる

No.16340040-046

02印

第2部4章.indd 40

2023/06/16 19:04

第5章 ピン入力状態の読みとり

ラズパイの世界

第5章

外付けスイッチが押されているかをプログラムが知るには

ピン入力状態の読みとり
GPIO からの出力ができるようになったので，次にGPIO の入力を試します．GPIO を介して外付けしたスイッチの ON/OFF を検出します．
なお，念のために最初に書いておくと，ラズパイのディジタル入出力ピンは 3.3 V 入出力です．5 V トレ
ラント（耐電圧）ではないので，5 V を加えると破壊す
る恐れがあります．

外付けスイッチで入力するためのハードウェア構成

初期状態では内部的にプルダウンされているピンが多いようですが，それを明示したドキュメントを見つけられませんでした．また，シェル・スクリプトでプ
ルアップ/プルダウン機能を操作する方法を見つけられませんでした．
そこで，ボード上でプルアップされている GPIO2を使うことにします．GPIO2 と GPIO3 は I 2 C という効/無効は図 2 の設定画面で設定できます．画面左上のラズパイ・マークから，［設定］［Raspberry Pi の設定］の順に選んで，設定画面を表示します．もしI 2 C が有効になっていたら，このスイッチ入力の実験
中は一時的に無効にしてください．後の章で，別のプログラミング言語を用いて内部プルアップを操作する
例を示します．

外付けスイッチます．
回路を図 1 に，接続のようすを写真 1 に示します．
GPIO2 と GND の間にスイッチを入れます．後で使うので，第 3 章と第 4 章で使用した LED は残してあります．
初期状態では I 2 C は無効になっています．I 2 C の有

ディジタル入力へ（I2Cと共用）

GND（P14）

見本

ラズパイ・ボード
図1

LED

外付けスイッチを使った回路図

GPIO2（P3）

実用的に動かすラズパイのボード上で接続されている I 2 Cのプルアップ抵抗カメラ＆ネット

インターフェース（第 12 章を参照）でも使用するピンです．おそらく I 2 C 用のプルアップ抵抗なのだと思い

3.3V

スイッチ

GPIO2（P3）
GND（P14）P3 は I2C と共用しており，ここでは I2C のプルアップ抵抗を使う

写真 1

よく使うＩ ／Ｏ

ラズパイの GPIO は，チップ内部でプルアップ/プ
ルダウンする機能が用意されています．

ハード＆ソフト Ｉ ／Ｏ制御の基本

永原 柊 Shu Nagahara

外付けスイッチを使った実験のようす

拡張端子の P3 にある I2C のプルアップ抵抗を使うため，スイッチを P3に接続している

47047-054

03印

第2部5章.indd 47

2023/06/16 19:04

第6章 GPIO制御におけるラズパイ内部の動作

ラズパイの世界

第6章

なぜプログラムから電気信号を任意にI/Oできるのだろう

永原 柊 Shu Nagahara
ラ ズ パ イ で は， フ ァ イ ル を 読 み 書 き す る だ け でGPIO の入出力方向を変更できたり，GPIO を読み取れたりします．この方法は，人間から見てわかりやす
いだけでなく，Raspberry Pi OS の基本的な考え方でもあります．この方法を使うことにより，さまざまな手段で GPIO を操作できます．

ここでは，GPIO を制御する際のラズパイ内部のしくみを説明します．まずは 〜 で，GPIO 出力で
LED の点滅を行ったときのしくみを説明します．続いて 〜 で，外付けスイッチで GPIO 入力を行った
ときのしくみを説明します．

ラズパイ内部にある GPIO まわりの構成があります．
GPIO ドライバに指示する方法として，/sys/class/gpio ディレクトリにある export ファイルなどのような実体のないファイルが用意されています．このようなファイルを読み書きすることで，GPIOを操作します．

カメラ＆ネット

ラズパイ内部見本

GP I Oを操作するための仮想ファイル（実体のないファイル）が用意されている/sys/class/gpio
ディレクトリ

実用的に動かすGPIO
ドライバ

exportGPIO23（P16）

ラズパイの
ボード

図1

SoC

CPU

GPIO

40ピン拡張端子

よく使うＩ ／ＯGPIO まわりについて，ラズパイ内部のイメージとハードウェアを図 1 に示します．
関連するハードウェアとして，ラズパイ・ボード上の GPIO と，外付け LED があります．GPIO は，SoC
内にあるディジタル信号の出入り口（入出力端子）です．
それを制御するソフトウェアとして，GPIO ドライバ

ハード＆ソフト Ｉ ／Ｏ制御の基本

GPIO 制御におけるラズパイ内部の動作

LED

GND（P14）

ラズパイ内部にある GPIO まわりの構成（イメージ）

GPIO に関係するハードウェアとソフトウェアを示す

55055-060

04印

第2部6章.indd 55

2023/06/16 19:05

2

第 部

ラズパイI/O 制御の基本メカニズム

第8章

シェル以外のもう1つのオススメ方法

Python プログラム
によるI/O 制御
永原 柊 Shu Nagahara

ここまで，ずっとシェル・スクリプトを使ってきました．しかしプログラミング言語でも，同様のプログ
ラムを作成できます．また，異なるプログラミング言語で書かれたプログラムを組み合わせることが可能です．ここでは第 5 章や第 7 章で作ったプログラムをPython で書き直してみます．

1 ラズパイ内蔵のプルアップ抵抗を使ったスイッチ入力回路
前章までのスイッチ入力にはラズパイの GPIO2 を使ってきましたが，このピンは I 2 C というインターフ
ェース（第 12 章参照）を使う際に用います．そこで他の GPIO ピンを使うことにします．
ラズパイは GPIO にプルアップ抵抗もプルダウン抵抗も内蔵していますが，シェル・スクリプトではそれを有効にする方法がわかりませんでした．一方Python
では，プルアップ抵抗，プルダウン抵抗を有効にできます．そこで LED に使っている GPIO23 の隣にある，
GPIO22 のプルアップ抵抗を有効にしてスイッチをつなぎます．
作成する回路を図 1 に，実験のようすを写真 1 に示します．

外付けスイッチ

LED

GPIO22（P15）
GND（P14）
3.3V

見本

SoC内蔵のプルアップ抵抗
プルアップ抵抗用の内蔵スイッチ：ON（（有効にする））
ディジタル入力
プルダウン抵抗用の内蔵スイッチ：OFF（無効のまま）SoC内蔵のプルダ
ウン抵抗（ここでは
使わない）
）
図1

3.3V

PU

外付け
スイッチ

GPIO22（P15）PD

GND（P14）

GND
ラズパイのSoC

ラズパイ・ボード

外付けスイッチを使った回路図

GPIO22（P15）に外付けスイッチを接続し，ラズパイの SoC に内蔵されたプルアップ抵抗を Python プログラムから有効にする

06印

外付けスイッチを使った実験のようす

ラズパイの SoC 内蔵プルアップ抵抗を使えるので，使用できる拡張端子の幅が広い（ここでは P22 を使用）

No.163

66

066-077

写真 1

第2部8章.indd 66

2023/06/16 19:05

2

第 部

第9章

ラズパイI/O 制御の基本メカニズム
さすがパイプ…シェルでもPythonでも簡単につながるしくみ

異なる言語のプログラムも組み合わせる永原 柊 Shu Nagahara

これまでの章では，シェル・スクリプトと Python
で書いたプログラムを作り，それぞれ個別に動作することを確認してきました．また，シェル・スクリプト
どうしなら，スイッチ入力プログラムと LED 出力プ

ログラムを，パイプでつなぐことで組み合わせて動かすことができました［図 1（a）］．
本章では，Python で書いたプログラムとシェル・スクリプトを組み合わせて使ってみます．

Python で書いたプログラムとシェル・スクリプトを組み合わせて動かしてみる
Python で書いたスイッチ入力プログラム（第 8 章のリスト 1）と，シェル・スクリプトで書いた LED 出力
プログラム（第 7 章のリスト 1）を，図 1（b）のように組み合わせて使ってみます．

なお，第 8 章のリスト 1 は，もともとシェル・スク
リ プ ト で 書 い た プ ロ グ ラ ム（ 第 5 章 の リ ス ト 1）をPython で書いたプログラムに置き換えたものです．

シェル・スクリプトで書いたスイッチ入力プログラム

シェル・スクリプトで書いた
LED出力プログラム
パイプ（a）シェル・スクリプトで書いた2つのプログラムを組み合わせる

見本
置き換え

Pythonで書いたスイッチ入力プログラム

パイプ（b）Pythonで書いたプログラムとシェル・スクリプトで書いたプログラムを組み合わせる
図1

異なる言語で書いたプログラムを組み合わせて使う

シェル・スクリプトで書いたスイッチ入力プログラムを Python で書いたスイッチ入力プログラムに置き換えても，シェル・スクリプトで書いた LED 出力プログラムと組み合わせて正しく動作する

No.16378078-08107印

第2部9章.indd 78

2023/06/16 19:05

2

第 部

ラズパイI/O 制御の基本メカニズム

第10章 制御プログラムに不可欠なイベント・
ドリブンのしくみ

GPIO 割り込み制御
永原 柊 Shu Nagahara
第 8 章で使用したラズパイ用の GPIO ライブラリ

RPi.GPIO では，GPIO の変化でソフトウェア的な割り込みを発生させることができます（本書では，これを GPIO 割り込みと呼ぶ）．ここでは，スイッチを押すとソフトウェア的な割り込みハンドラが呼び出されるプログラムを作ってみます．

GPIO の入力が変化したときに割り込みを発生させる機能がある
ラズパイが時間がかかる処理を継続的に行っている
途中で，ユーザがスイッチを押したら，実行中の処理に割り込んで何か特別な処理を行いたい，という場合を考えます．図 1 では，スイッチを押すと画面に 1 を表示する（標準出力に 1 を出力する）例です．
単純に実現しようとすると，ラズパイが全力で実行しているプログラムの途中に，スイッチがつながっている GPIO を監視する処理を入れる必要があります．
しかし，このやり方はプログラムのどこでスイッチを監視すればよいかなど考えることが多く，汎用性がありません．
図 2 に 示 す よ う に， ス イ ッ チ が つ な が っ て い る
GPIO への入力が変化したときに，割り込みを発生できれば解決できそうです．
このように，GPIO の入力が変化したときに割り込みを発生させる機能を，ここでは GPIO 割り込みと呼
びます．

プログラム

行いたい処理：スイッチを押したら画面に1を表示したい

いろいろな処理対策案その1：
プログラムを改造して，スイッチ監視処理を追加
する？

：

見本
：
：
：
：

プログラムを全力で実行中図1

プログラムの実行が忙しくて，スイッチの状態を見る暇がない

プログラムを全力で実行中のラズパイに対して，スイッチ入力に反応してもらうにはどうすればよいか？

プログラムの中にスイッチ監視処理を追加する方法もあるが，汎用性がなくイマイチ

No.163

82082-08408印

第2部10章.indd 82

2023/06/16 19:06

第12章 定番I2C通信の制御

ラズパイの世界

第12章 液晶ディスプレイもセンサもサッと使えるバスのしくみ

定番 I2C 通信の制御
ラズパイを使いこなすためにいろいろな機器を外付けしようとすると，どのように接続するかを考える必要があります．
ここまで使ってきた GPIO では ON/OFF 信号しか送 れ な い の で，多機能な機器をつなぐには 多 数 のGPIO 端子が必要になり，現実的ではありません．例
えば 3 軸加速度センサを考えると，各軸の加速度を 8ビットで表した場合，8 ビット×3 軸で 24 本の GPIOが必要になります．これでは，加速度センサを付けただけでラズパイの GPIO 端子を使い切りそうです．
そこで，1 本の電線で多数の信号をやりとりできる通信が必要になります．I2C 通信はそのような通信規
格の 1 つです．ほかにも SPI 通信やシリアル通信などがあります．
本章では，I2C 通信を使って液晶表示器に任意の文字列を表示します．

● I2C 接続のしかた
図 1 に I2C 通信の接続例を示します．I2C は 2 本の通● I2C 機器はアドレスで区別する
図 1 のように接続すると，マスタが送信した信号がすべての機器に届いてしまいます．マスタがどの機器と通信したいかを示すために，
I2Cアドレスがあります．
I2C アドレスは，個々の機器に割り当てられた値で

見本

器など，さまざまな機器を接続します．
ラズパイ

す．例えば，後で出てくる液晶表示器の場合，I2C ア

電源（3.3V）

実用的に動かすマスタ

プルアップ抵抗

SCL
SDA

図1

スレーブ
1

スレーブ
2

スレーブ
N

例えば
センサ

例えば
液晶表示器

例えば
メモリ

カメラ＆ネット

信線（SCL と SDA）でバス型接続します．基本的に，
SCL はクロックを，SDA はデータをやりとりする通信線です．
それぞれの通信線はワイヤード OR（複数の出力を並列に接続した論理和）でつながっており，プルアッ
プ抵抗が必要になります．ラズパイの場合，ラズパイのボード上に実装されています．
この I2C 通信バスに，ラズパイやセンサや液晶表示

基本的に，1 つがマスタで，残りの機器はスレーブと呼ばれます．図 1 ではラズパイがマスタで，残りのセンサや液晶表示器などがスレーブになります．仕様
上はマスタが複数ある場合もあり得ます．

よく使うＩ ／Ｏ

1 I2C 通信のしくみ

ハード＆ソフト Ｉ ／Ｏ制御の基本

永原 柊 Shu Nagahara

I2C の接続形態

複数のスレーブ（機器）であっても 2 本の通信線があればよい．マスタ/スレーブの呼び方は，
コントローラ/ターゲットとも呼ばれる

95095-104

10印

第3部12章.indd 95

2023/06/16 18:20

3

第 部

よく使うPWM ＆通信の制御

第14章 時刻と温度のそれぞれを液晶に表示してみる

複数プログラムを組み合わせるしくみ「FIFO」
永原 柊 Shu Nagahara
第 12 章では時刻を，第 13 章では温度を液晶表示器に表示しました．
使用している液晶表示器は 2 行表示できるので，1行目には時刻を，2 行目には温度を表示したくなります．液晶表示プログラム（第 12 章のリスト 1）は標準入力から読み取りますが，標準入力は 1 つしかないので，同時に読み取れるプログラムは 1 つだけです．
本章では，複数のプログラムの出力を 1 つにまとめファイフォるために，FIFO（First In, First Out）と呼ばれるしくみを利用します．

1 パイプでは 2 つの出力を 1 つの入力につなげられない
ここで取り上げている問題を図 1 に示します．
これまで使ってきたパイプでは 1 つの出力と 1 つの入力を接続できました．しかし，2 つの出力を 1 つの

時刻出力
プログラム

1行目に表示したい
両方表示するにはどのように接続すればよいか？

温度測定
プログラム

入力につなぐには，今まで使ってきたパイプでは難し
そうです．

液晶表示
プログラム

2行目に表示したい

見本

図1

No.163

114

113-12012印

液晶表示器に 2 つのプログラムの出力を表示したい場合はどうすればよいか

第3部14章.indd 114

2023/06/16 18:55

4

第 部

第4部

カメラ＆ネットワーク入門

カメラ＆ネットワーク入門

第15章 強力なラズパイ・カメラの撮影から定番OpenCVまで

カメラ制御＆画像処理入門
永原 柊 Shu Nagahara
ラズパイでは，カメラのような大容量データを処理する機器を取り扱えます．ここでは，ラズパイの公式
カメラ・モジュールを使います．

まずスイッチを押したときに撮影するプログラムを作り，次にセンサ値によって撮影するプログラムに取り組みます．

カメラ撮影に使用した実験ボード
ここで使用するカメラは，ラズパイ公式から出ている（Raspberry Pi 財団が認可している）Raspberry Pi
Camera Module V2.1（以降，カメラ・モジュール）です．ラズパイ状のカメラ・コネクタに接続して使用します．
実験のようすを写真 1 に示します．LED と液晶表示
器は使いません．また，カメラ・モジュールを写真 2に示します．

温度センサ

液晶表示器
（本章では使わない）

（a）表面

見本

カメラ・モジュール

写真 1

実験のようす今回はカメラ・モジュールと温度センサを使う

13印

（b）裏面

使用するカメラ・モジュール

ラズパイ専用のカメラ・モジュールを使用した

No.163

122

122-132

写真 2

第4部15章.indd 122

2023/06/16 19:08

4

カメラ＆ネットワーク入門

第 部

第17章 強力なラズパイのネットワーク機能を試す②

ラズパイWeb サーバ入門
永原 柊 Shu Nagahara
前章ではクラウドに対してラズパイがクライアント
として動いていました．本章では，ラズパイを簡易なWeb サーバとして動かしてみます．
パソコンやスマートフォンなどのクライアントからアクセスして操作することにより，Web サーバであるラズパイにつながる LED を点灯/消灯させてみます．
本章で行う実験は基本的なやり方を確認するものです．これができれば，ネットワーク上のクライアントからリクエストを受けて，さまざまな動作をさせることができるはずです．

Web のしくみ
図 1 に，クライアントから Web サービスを利用する際の大まかな流れを示します．
（1）
クライアントの Web ブラウザにアクセス先となる URL が入力されると，クライアントは Web
サーバにアクセスしてリクエストを送信する（2）
Web サーバは，あらかじめ用意してある静的なデータや，プログラムにより生成する動的なデータからレスポンスを返す（3）
クライアントは，返ってきたレスポンスをもとに整形して表示する

今回の実験では，ラズパイ上で Web サーバを動か
します
（図 2）
．静的なデータは microSD カードに格納しておき，動的なデータは Python プログラムで生成します．また，そのプログラムで LED の点灯/消灯も同時に行います．
使用する通信プロトコルは図 3 のようになっています．必要なプロトコル・スタックはラズパイに標準で用意されています．

①クライアントはサーバにリクエストを送る
https://www.……

見本

クライアント（Webブラウザ）

Webサーバ②サーバはクライアントにレスポンスを返す③レスポンスのデータを整形して表示

図1②必要に応じて動的にデータを生成する

静的な(あらかじめ
作ってある)データ

Web サーバとクライアントのやりとりの流れ

クライアントである Web ブラウザからのリクエストに応じて，Web サーバは静的＆動的なデータからなるレスポンスを返す．Web ブラウザはそのレスポンスを整形して表示する

No.163140

140-149

15印

第4部17章.indd 140

2023/06/16 19:09

5

第 部

第5部

ラズパイの実用的プログラミング

ラズパイの実用的プログラミング

第18章 キー入力不要なプログラムは背後で動かしておく

その①…
バックグラウンド実行永原 柊 Shu Nagahara

ここまで，いろいろなプログラムを作っては，コマンド・ラインから起動してきました．
特に，第 14 章の図 7（図 1 として再掲）に示した例では，4 つのターミナルを開いて 8 個のプログラムを実行していました．
この例では，スイッチ入力と温度センサの測定値をもとに，LED への PWM 出力と液晶表示器への表示を行っていて，キー入力が不要でした．
このようにキー入力が不要な場合は，プログラムを
バックグラウンドで実行することもできます．図 1 の例をバックグラウンドで実行すると，1 つのターミナ
ルで実行できます．
本章では，プログラムをバックグラウンドで実行する方法について説明します．
FIFO

スイッチ入力
PWM値変換プログラム

スイッチ入力プログラム
swin.py

例：010

sw2pwm.py

図1

例：
20.0

str2lcd.py/tmp/pwm
例：
1:PWM20.0

FIFO

先頭への文字列
追加プログラム

温度表示プログラム
spitemp.py

pwm.py

先頭への文字列
追加プログラムtee
コマンド

例：36.5str2lcd.py

PWM出力
プログラム

液晶表示
プログラム
lcd.py/tmp/lcd
例：2:t=36.5

液晶表示例：
PWM20.0
t=36.58 個のプログラムを同時に実行する例（第 14 章の図 7 を再掲）

Python プログラムと tee コマンド，合計 8 個のプログラムを実行する．第 14 章では，4 つのターミナルを使って 4 つのコマンド・ラインを実行していた見本

通常のプログラム実行とバックグラウンドでの実行の違い● 普通に実行すると
まず，普通に実行してみます．
コマンド・ラインで sleep 5 を実行すると，5 秒
間キー入力ができなくなり，5 秒経過すれば次のコマンドを受け付けられる状態になります（図 2）．
また，sleep 5 を実行中の 5 秒間に [Ctrl] ＋C を入力すると，sleep コマンドの実行を中断できます．
No.163

152

152-156

16印● バックグラウンドで実行すると次に，バックグラウンドで実行します．
sleep 5 & と「&」を付けて実行します．すると [1]1340 などという表示が出て，すぐに次のコマンドを入力できる状態になります［図 3（a）］．
表示されているものは，ジョブ番号とプロセス番号と呼ばれるものです．
かっこ内の数字はジョブ番号（こ

第5部18章.indd 152

2023/06/16 19:02

第22章 ラズパイの良き相棒Picoマイコン入門

ラズパイの世界

第22章 役割分担すれば死角なし！ UART通信から

永原 柊 Shu Nagahara
前章で説明したように，ラズパイはタイミング制御
において精度の高い処理が得意ではありません．一方，シングルタスク動作のマイコンであれば，Arduino
Uno に搭載されている 8 ビット・マイコンでさえ，ラズパイを上回る精度を出すことができます．
本章では，ラズパイにマイコンを外付けして連携動作させ，ラズパイが得意な処理はラズパイで，マイコンが得意な処理はマイコンで行わせてみます．
ど の よ う な マ イ コ ン で も 使 え ま す が， こ こ で はRaspberry Pi 財団が開発した RP2040 マイコンを使います．
ラズパイとマイコンの間は，これまで使ってこなかったシリアル通信で接続します．またマイコン側はフルスペックの Python が使えないので，マイコン用に軽量化した MicroPython を使ってプログラムを作成
します．ラズパイ側はコマンド・ラインから操作しま
す．

パルス出力

パルス幅を指示ラズパイ

シリアル通信マイコン・ボード

パルス幅はラズパイが指示したもの
図1

ラズパイとマイコン・ボードの役割分担

ラズパイがシリアル通信経由でパルス幅をマイコン（マイコン・ボード）に伝え，マイコンは指定された幅のパルスを出力する

実用的に動かす見本にします．
ラズパイとマイコンの接続は，通信できれば何でもよいので，今まで使ってこなかったシリアル通信を使うことにします．

カメラ＆ネット

図 1 に示すように，ラズパイとマイコン・ボードを組み合わせて動かしてみます．ここでは，RP2040 マ
イコンを搭載した Raspberry Pi Pico（ 以降，Pico）を組み合わせます．
実現するのは，前章で見た 1 ms のパルスを出力する処理です．これを，ラズパイとマイコンの連携で実現します．
といっても，マイコンだけでパルス出力を実現できます．そこで，ここではラズパイからパルス幅を指定
すると，マイコンが指定された幅のパルスを出力することに挑戦します．センサから読み取った値から計算したり，ネットワーク経由で指示されたり，といったことによりラズパイがパルス幅を決めると考えること

よく使うＩ ／Ｏ

ラズパイとマイコンを組み合わせる

ハード＆ソフト Ｉ ／Ｏ制御の基本

ラズパイの良き相棒
Pico マイコン入門

177

177-186

20印

第5部22章.indd 177

2023/06/17 9:22

第23章 アナログ信号をラズパイに取り込む

ラズパイの世界

第23章 A D変換制御…Picoを組み合わせるもう1つのメリット

永原 柊 Shu Nagahara
外付けマイコンとの連携で，パルス出力以外の活用方法を考えてみます．
ラズパイにはユーザが利用できる A D 変換機能がありません．そこで，マイコン内蔵の A D 変換機能を利用して，その変換結果をラズパイで受け取ることを考えます．
ここではマイコンからラズパイにデータを渡すことになります．
マイコンとして Raspberry Pi Pico
（ 以降 Pico）を使います．一般的な機能だけを使っているので，ほかのマイコンでも同様に実現できるはずです．
ラズパイと Pico の接続は，前章と同様にシリアル通信を使います．また，A D 変換の簡単な回路を追加します．

ラズパイとマイコンをシリアル通信でつなぐ● ラズパイから A D 変換開始の指示を出す
ここではラズパイから A D 変換開始の指示を出します．具体的には「adc」という文字列を送ります．
Pico が指示を受けると，A D 変換を実行して結果をラズパイに返します．ラズパイから 1 回指示を出すと，Pico が 1 回結果を返すやりとりになります．

カメラ＆ネット

USB
8番ピン（GPIO14，TX）

6番ピン（GP4，UART1 TX）

見本

10番ピン
（GPIO15，RX）

シリアル
通信

7番ピン
（GP5，UART1 RX）

実用的に動かす36番ピン（3V3 OUT）
31番ピン（ADC0）

半固定抵抗
10kΩ

33番ピン
（AGND）

ラズパイ

よく使うＩ ／Ｏ

● Raspberry Pi Pico 側の回路
図 1 のように，シリアル通信（UART）の接続に加えて，31 番ピンの A D 変換端子（ADC0）に半固定抵抗をつなぎました．Pico の 36 番ピンの 3.3V 出力と，33番ピンの AGND を電源として使っています．
実験のようすを写真 1 に示します．

ハード＆ソフト Ｉ ／Ｏ制御の基本

アナログ信号をラズパイに取り込む

Pico

図 1 ラズパイと Pico の接続

Pico の A D 変換端子に半固定抵抗をつなぐ

187

187-189

21印

第5部23章.indd 187

2023/06/17 9:23

このPDFは，CQ出版社発売の「トランジスタ技術SPECIAL No.163」の一部見本です．
内容・購入方法などにつきましては以下のホームページをご覧下さい．
内容
http://shop.cqpub.co.jp/hanbai/books/MSP/MSP202307.html
購入方法 https://www.cqpub.co.jp/order.htm